it-swarm-eu.dev

Per LUKS: la cifra più preferibile e più sicura?

Sto per crittografare due dei miei dischi rigidi usando LUKS, dato che non riesco davvero a farlo da solo, utilizzo la guida sul wiki di Arch Linux (che può essere trovato qui) . In un esempio nella guida la cifra specificata è aes-xts-plain con una chiave di 512 bit. È aes-xts-plain la scelta migliore o c'è una cifra migliore da usare? Preferirei la sicurezza piuttosto che la velocità.

22
Peter

Ci sono tre componenti che devi capire in ogni utilizzo di cifratura a blocchi e si applicano esplicitamente qui:

  • La primitiva di cifratura a blocchi. Questa potrebbe essere una delle tue cifre familiari e candidate AES come, beh, AES, Serpent, Twofish, Blowfish, ...
  • La modalità di funzionamento. Utilizzando un codice a blocchi così com'è, blocco per blocco si chiama libro elettronico, ma ci sono altre modalità come il concatenamento dei blocchi di cifratura e la modalità contatore, con i loro vari vantaggi e svantaggi.
  • Lo schema di generazione del vettore di inizializzazione, come essiv che combatte varie tecniche di impronte digitali disponibili per gli aggressori contro CBC utilizzate per la crittografia del disco.

Quindi quando scegli un'opzione, ad es. aes-cbc-essiv, in realtà stai chiedendo AES, utilizzato in modalità CBC con IV crittografati basati su un identificatore per blocco, mentre aes-xts-plain usa AES in modalità XTS con semplici vecchi IV generati da alcune informazioni per blocco.

Si riduce a credere che XTS abbia una resistenza sufficiente allo sbiancamento (che ESSIV combatte) collegato alla modalità di crittografia. In questa fase, XTS è una modalità più moderna con maggiori vantaggi tecnici, ma ha subito meno test crittografici rispetto a CBC.

Un punto da notare con XTS, da Wikipedia:

A causa della suddivisione, gli utenti che desiderano la crittografia AES 256 e AES 128 dovranno scegliere le dimensioni della chiave rispettivamente di 512 e 256 bit.

È necessario scegliere la cura generando le dimensioni della chiave con questa modalità in modo tale che ciascun blocco utilizzi una chiave della dimensione bit desiderata. Non ho guardato le informazioni LUKS per vedere come, o cryptsetup, dividere le sue chiavi; questo può essere qualcosa che desideri fare per assicurarti di avere il corretto livello di sicurezza che desideri. Pertanto, seguendo la guida, è stata utilizzata la crittografia a 256 bit per blocco (con la chiave 512 suddivisa in due parti).

16
user2213

Come menzionato nel tuo post originale su SU, per la maggior parte degli scopi, il livello di sicurezza richiesto dovrebbe essere sufficiente affinché un utente malintenzionato non abbia ragionevoli possibilità di infrangerlo in un lasso di tempo utile (ad es. Per i tuoi dati personali, potresti voler essere un 10 anno).

Quindi, in questo esempio, supponendo che tu non abbia segreti nazionali o dati aziendali sensibili sul tuo PC, AES-XTS-PLAIN dovrebbe resistere per un ragionevole lasso di tempo contro un attaccante.

8
Rory Alsop

La cifra più preferibile è aes-xts-plain64 e viene utilizzata come distro wide (RedHat, CentOS, Oracle Linux, Ubuntu) per impostazione predefinita. La maggior parte delle persone usa aes perché molti dispositivi, applicazioni lo supportano e le prestazioni di aes possono essere accelerate su Processore Intel . E questo tipo di funzione di accelerazione offre a aes molti vantaggi su altre cifre. Puoi leggere il confronto delle prestazioni tra simple implementation of aes vs hardware accelerated aesqui . E una cosa la menzione, se usi aes c'è un altro vantaggio che è ampiamente usato, quindi se c'è un attacco disponibile su Internet lo saprai velocemente e probabilmente otterrai un aggiornamento velocemente. E ci sono alcuni attacchi passivi disponibili sull'implementazione di aes come crittografia del disco che puoi leggere da qui

Ma la tua scelta può essere diversa. E mentre scegli il codice devi solo assicurarti che il codice che scegli non sia ancora compromesso. Puoi controllarlo da qui . Ci sono altre cifre simili disponibili che non sono efficienti (dal punto di vista I/O) come aes ma buone alternative. Se non hai intenzione di usare aes, allora ci sono due successori di aes che sono sicuro diaes è Anubis = e serpente poiché puoi sacrificare la velocità per la sicurezza. Fortunatamente, puoi usarli in luks. E se vuoi proteggere il segreto della nazione di aes è sufficiente, poiché aes è preferito in FISMA e NIST-Special-Publication-800-53- Revisione-4 .

A mio avviso, con l'algoritmo di crittografia, dovresti essere serio riguardo all'algoritmo di hashing. Se usi un hash debole rispetto al tuo algoritmo super sicuro non ti sarà di grande aiuto. Perché l'hash ha un ruolo vitale nel processo di crittografia luks. Quindi non dovresti usare sha1 ma sha512 è abbastanza sicuro. Ma puoi anche usare whirepool o il vincitore della recente competizione di hashing delle password argon2i .

Da la mia altra risposta su luks,

Puoi elencare le cifre supportate dai tuoi kernel con il seguente comando,

[[email protected]]# ls /lib/modules/$(uname -r)/kernel/crypto/
algif_rng.ko.xz   blowfish_common.ko.xz   cmac.ko.xz               cts.ko.xz          gf128mul.ko.xz           michael_mic.ko.xz  rsa_generic.ko.xz      tgr192.ko.xz           xts.ko.xz
ansi_cprng.ko.xz  blowfish_generic.ko.xz  crc32_generic.ko.xz      deflate.ko.xz      ghash-generic.ko.xz      pcbc.ko.xz         salsa20_generic.ko.xz  twofish_common.ko.xz   zlib.ko.xz
anubis.ko.xz      camellia_generic.ko.xz  crct10dif_common.ko.xz   des_generic.ko.xz  jitterentropy_rng.ko.xz  pcrypt.ko.xz       seed.ko.xz             twofish_generic.ko.xz
arc4.ko.xz        cast5_generic.ko.xz     crct10dif_generic.ko.xz  dh_generic.ko.xz   khazad.ko.xz             rmd128.ko.xz       serpent_generic.ko.xz  vmac.ko.xz
async_tx          cast6_generic.ko.xz     cryptd.ko.xz             drbg.ko.xz         lrw.ko.xz                rmd160.ko.xz       sha512_generic.ko.xz   wp512.ko.xz
authencesn.ko.xz  cast_common.ko.xz       crypto_null.ko.xz        fcrypt.ko.xz       mcryptd.ko.xz            rmd256.ko.xz       tcrypt.ko.xz           xcbc.ko.xz
authenc.ko.xz     ccm.ko.xz               crypto_user.ko.xz        gcm.ko.xz          md4.ko.xz                rmd320.ko.xz       tea.ko.xz              xor.ko.xz

Puoi elencare le cifre e gli hash che puoi utilizzare e il loro confronto I/O per luks con il seguente comando,

[[email protected] arif]# cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1       289342 iterations per second for 256-bit key
PBKDF2-sha256     353293 iterations per second for 256-bit key
PBKDF2-sha512     227555 iterations per second for 256-bit key
PBKDF2-ripemd160  233224 iterations per second for 256-bit key
PBKDF2-whirlpool  236165 iterations per second for 256-bit key
argon2i       4 iterations, 917485 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
argon2id      4 iterations, 951672 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
#     Algorithm |       Key |      Encryption |      Decryption
        aes-cbc        128b       642.2 MiB/s      2495.8 MiB/s
    serpent-cbc        128b        89.3 MiB/s       542.6 MiB/s
    twofish-cbc        128b       100.4 MiB/s       343.1 MiB/s
        aes-cbc        256b       477.2 MiB/s      1979.2 MiB/s
    serpent-cbc        256b        89.3 MiB/s       538.9 MiB/s
    twofish-cbc        256b       173.3 MiB/s       343.1 MiB/s
        aes-xts        256b      1668.0 MiB/s      1664.1 MiB/s
    serpent-xts        256b       535.7 MiB/s       523.4 MiB/s
    twofish-xts        256b       332.6 MiB/s       339.8 MiB/s
        aes-xts        512b      1384.5 MiB/s      1380.7 MiB/s
    serpent-xts        512b       539.3 MiB/s       524.4 MiB/s
    twofish-xts        512b       335.0 MiB/s       340.1 MiB/s

Puoi confrontare specifiche cifre con il seguente comando,

[[email protected]]# ciphers="aes-xts serpent-xts anubis-xts"

[[email protected]]# echo "#     Algorithm |       Key |      Encryption |      Decryption";for i in $ciphers ; do cryptsetup benchmark --cipher $i|tail -n 1; done

#     Algorithm |       Key |      Encryption |      Decryption
        aes-xts        256b      1613.9 MiB/s      1642.8 MiB/s
    serpent-xts        256b       538.9 MiB/s       521.9 MiB/s
     anubis-xts        256b       182.0 MiB/s       182.1 MiB/s

4
Muhammad