Come funziona FDE (Full Disk Encryption) così rapidamente?


13

Sono curioso di sapere come funziona la crittografia completa del disco di Ubuntu sotto il cofano. Ecco un esempio:

Considerando la seguente stringa come tutto il contenuto del disco:

hello world

Dopo aver applicato una sorta di metodo di crittografia sarebbe simile a questo:
(Ho usato il codice di Cesare con uno spostamento di +1 per questo esempio, ad esempio A → B; B → C ...)

ifmmp xpsme

A quanto ho capito, quando il computer è spento, il contenuto dell'unità sarà la stringa sopra. Ma quando viene riacceso, Ubuntu ha bisogno che il suo contenuto sia di nuovo indietro hello worldper avviarsi correttamente.

Quello che non capisco davvero è che nel mondo reale il contenuto del disco è molto di più, e l'algoritmo di crittografia è molto più complesso, e trovo difficile per il computer crittografare / decrittografare tutto in pochi secondi (non ci vuole più tempo per l'avvio o l'arresto).

Com'è possibile?

Risposte:


10

Come funziona la crittografia AES / Rijndael in generale?

Questa pagina contiene una divertente guida di A Stick Figure a Advanced Encryption Standard (AES) che sembra facile da capire, anche se sembra essere più di 50 immagini, ad esempio queste due:

inserisci qui la descrizione dell'immagine

e

inserisci qui la descrizione dell'immagine

È troppo per duplicare tutto qui, ma se devi avere un'immagine all-in-one è questa:

inserisci qui la descrizione dell'immagine


Oppure, c'è una spiegazione più compatta su http://www.password-depot.com/know-how/blowfish_and_rijndael.htm

Il metodo di crittografia Rijndael si basa sulla sostituzione, modifica ed esecuzione di operazioni xor su byte. Il metodo è simile al seguente:

  • Dalla chiave a 128 bit, Rijndael genera 10 chiavi da 128 bit ciascuna.
  • Questi tasti sono collocati in array 4x4.
  • Il testo normale è inoltre diviso in array 4x4 (128 bit ciascuno).
  • Ciascuno degli elementi di testo semplice a 128 bit viene elaborato in 10 round (10 round per chiavi a 128 bit, 12 per 192, 14 per 256).
  • Dopo il decimo round viene generato il codice.
  • Ogni singolo byte viene sostituito in una casella S e sostituito dal reciproco su GF (2 8).
  • Quindi viene applicata una matrice modulo-2 bit-saggia, seguita da un'operazione XOR con 63.
  • Le linee delle matrici sono ordinate ciclicamente.
  • Le colonne della moltiplicazione della matrice vengono scambiate su GF (2 8).
  • Le sottochiavi di ogni round sono soggette a un'operazione XOR.

Il livello di sicurezza di questo metodo di crittografia aumenta se Rijndael viene eseguito più volte con diverse sottochiavi.


Come funziona la crittografia completa del disco di Ubuntu?

Credo che funzioni crittografando una partizione con LUKS (impostazioni predefinite con AES), quindi inserendo alcuni volumi con LVM (come /, swap), e li decodifica e li monta all'avvio dopo aver inserito una passphrase. E c'è una partizione di avvio regolare (non crittografata) che si avvia abbastanza da richiedere la passphrase.

the_simple_computer's Guide to Full Disk Encryption with Ubuntu (Aggiornato il 28 giugno 2015) dice che riguarda il funzionamento della crittografia dell'installer predefinito e menziona che il dual-boot non funzionerebbe (almeno non pronto all'uso ), l'unità devi utilizzare MBR in modo che " se il tuo computer è dotato di UEFI, la distribuzione verrà installata in modalità BIOS legacy in modo da non poter utilizzare Secure Boot " e " ti dà anche una dimensione di swap uguale a quella della RAM del tuo sistema (spesso non necessaria) e tu non ha scelta sul tipo di crittografia utilizzato. "


Quanto è veloce la crittografia?

Se lo esegui cryptsetup benchmark, verranno eseguiti dei test che ti diranno quanto velocemente impiega la crittografia da sola, controlla le linee (attualmente) predefinite aes-xts:

#  Algorithm | Key |  Encryption |  Decryption
     aes-xts   256b    150.0 MiB/s    145.0 MiB/s

Una velocità di lettura media del disco rigido potrebbe essere 80-160 MB / s, quindi non sarai molto più lungo di una lettura normale ed è possibile che i settori appena letti siano già stati decifrati mentre stai ancora aspettando disco rigido per leggere di più.

Un SSD potrebbe essere più veloce, forse 200-550 MB / s, quindi potresti notarlo. Ma le letture casuali potrebbero essere più lente e ho letto che le velocità dell'SSD possono rallentare dopo l'uso (forse quando l'unità si riempie completamente e deve iniziare a "cancellare" i settori?)

Come può il computer crittografare / decrittografare completamente tutte le unità in pochi secondi (non ci vuole più tempo per l'avvio o l'arresto)?

Non deve prima decifrare tutto. La crittografia (LUKS) funziona su blocchi di dati , può decrittografare casualmente qualsiasi blocco e si comporta come un livello tra i dati crittografati dell'unità e ciò che vede il filesystem.

Quando il filesystem vuole vedere qualsiasi blocco di dati, LUKS prima decodifica quel blocco e quindi fornisce i dati decrittografati al filesystem. Prima devi aspettare che l'unità legga il blocco di dati (proprio come senza usare la crittografia) e hai solo un ritardo in più per la decodifica di quel singolo blocco (o pochi blocchi) di dati - e se la decrittazione è più veloce del disco può leggere, la decrittografia potrebbe essere terminata prima che l'unità legga il blocco di dati successivo.

Quindi, proprio come un normale filesystem non ha bisogno di leggere l'intera unità per leggere un file, quando viene aggiunta la crittografia non è nemmeno necessario leggere l'intera unità e non rende le cose molto più lente.

I dati sul disco rigido sono sempre crittografati , quindi non c'è nulla da fare all'arresto se non dimenticare la chiave.


@Hewbot Ho aggiunto alcune informazioni (in basso) sulla velocità di decodifica per file e blocchi, dato che il titolo della tua Q è stato modificato per aggiungere "così velocemente?" (il titolo è ancora quello che volevi chiedere?)
Xen2050,

3

Sarà una semplificazione, ma proverò ad accedere al processo di accesso a un file su un filesystem crittografato.

Ad esempio, supponiamo che all'inizio del filesystem crittografato sia presente una tabella dei file; diciamo che vogliamo leggere /foo.bar. Quindi, la prima cosa che facciamo è leggere l'inizio della partizione, decodificarla e cercare attraverso di essa il file che vogliamo; diciamo che dice che il file inizia a 0x10000000 byte. Quindi, per leggere, iniziamo a leggere dal disco in quella posizione e decifrandolo; allo stesso modo, per scrivere, possiamo crittografare i nuovi contenuti e scriverli in quella nuova posizione.

Speriamo che questo aiuti a chiarire qualsiasi confusione sul processo.


1
Penso che questa sia la risposta che risponde effettivamente alla domanda dell'OP - il suo malinteso è che deve crittografare / decrittografare completamente l'intero disco, non solo i bit che vengono letti / scritti mentre vengono utilizzati.
SomeoneSomewhereSupportsMonica

2

Il processore utilizza un set di istruzioni dedicato. È possibile grazie ad esso, AES-NI . Consente la crittografia e la decrittografia rapide o si può dire che riduce il sovraccarico. È veloce perché è un'implementazione hardware, come spiegato qui .

Puoi verificare gli impatti sulle prestazioni qui e ne valgono la pena per una maggiore sicurezza.


1
Inoltre, i dati sul disco vengono crittografati / decrittografati solo se necessario; ad esempio, all'avvio vengono decifrati solo script di avvio, informazioni utente, eseguibili DM / WE, ecc.
Nick Mertin,

Molte CPU non hanno il supporto AES e la crittografia di Ubuntu funziona ancora su di esse ... anche se lo facessero, questo non risponde ancora alla domanda su come funziona la crittografia di Ubuntu
Xen2050

@shsh Quindi, se fossi su un computer molto vecchio, sarebbe impossibile usare FDE, perché non ci sarebbe l'implementazione dell'hardware? Dovrei capire quindi che l'intero disco viene crittografato e decrittografato all'avvio e allo spegnimento?
Hewbot,

@ MagikM18 In tal caso, come fa l'algoritmo a sapere da dove iniziare a decifrare l'intera "stringa"? Voglio dire, se apro un documento, come fa a sapere le "coordinate" dove si trova?
Hewbot,

@Hewbot allo stesso modo sarebbe comunque; in sostanza, la crittografia è un livello tra il disco fisico e il demone del filesystem. quindi, quando richiede di leggere i dati dal disco, viene letto e poi decrittografato; quindi, proprio come in una normale fs, legge prima la tabella dei file, trova la posizione iniziale del file, quindi legge da lì.
Nick Mertin,

0

I computer moderni possono eseguire miliardi di operazioni al secondo, quindi non mi sorprende che la crittografia e la decrittografia siano veloci.

Ecco come classificherei intuitivamente la velocità con cui i computer fanno le cose:

  1. Esecuzione di calcoli all'interno della memoria (in particolare memoria L1 e L2), estremamente veloce
  2. Lettura dalla memoria locale, meno veloce (i dischi a stato solido sono più veloci dei dischi rigidi)
  3. Lettura dalla rete, ancora meno veloce.

L'altro bit chiave da capire è che il funzionamento non ha bisogno di decrittografare l'intero disco rigido per avviare il sistema. Piuttosto, il sistema operativo sa come decifrare solo le parti del disco rigido di cui ha bisogno al volo, e lo stesso vale per la scrittura.

Così intuitivamente, non mi sorprende che la crittografia completa del disco non abbia un grande impatto sulle prestazioni, poiché immagino che il collo di bottiglia sia il disco.

Naturalmente, queste intuizioni non sempre corrispondono alla realtà. Ad esempio, in realtà, ci sono stati casi in cui la crittografia dell'intero disco ha causato un notevole calo delle prestazioni. Ma di solito questi vengono risolti dopo che gli sviluppatori hanno attraversato alcuni round di sviluppo di ottimizzazioni.


1
Non riesco a trovare un modo in cui questa risposta sia possibile. La copia di 1 TB con USB 3.0 richiede alcuni minuti, se è necessario eseguire un processo intermedio (la decodifica), potrebbero essere necessari alcuni minuti per avviare un computer con FDE.
Hewbot,

@Hewbot Ho modificato la mia risposta per spiegare che la decodifica avviene al volo. Il sistema operativo non deve leggere 1 TB di dati per iniziare a utilizzare un disco crittografato da 1 TB.
Flimm,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.