GCM (Galois / Counter Mode), in particolare in combinazione con AES, è stato di fatto un gold standard per anni. Crittografa e autentica in un unico passaggio, è davvero fantastico e termini come AEAD funzionano bene per impressionare una ragazza, quindi sarebbe vantaggioso per tutti. Ma, scherzo a parte …
Mi sono sempre chiesto cosa lo rende così speciale, e più ci penso, meno capisco. Se lo guardi, allora la magia generale non è affatto così fantastica. O forse, forse sono troppo stupido per ascoltarlo (da qui la mia domanda).
I miei pensieri:
Prima di tutto, GCM è una forma di modalità contatore . Il che significa che a differenza di, ad es. Cipher Block Chaining, luscita di un blocco dipende esattamente da un blocco di input. Peggio ancora: puoi modificare un singolo bit e il risultato decrittografato sarà diverso esattamente in quel bit. Perché, a dire il vero, un codice a blocchi in modalità contatore non è affatto un ” codice a blocchi “, ma un PRNG (con chiave) seguito da unoperazione XOR. Fondamentalmente un ” blocco ” stream cipher. Non ci vuole molto per immaginare uno scenario in cui qualcuno potrebbe abusarne per modificare i messaggi in modo dannoso (ad es. Modificare la ” transazione: +5.000 \ $ ” a ” transazione: -5,000 \ $ “). I cifrari a blocchi normalmente hanno la proprietà innata di trasformarsi in un completo senza senso mentre capovolgi un solo bit (più, con il concatenamento, lintero resto del messaggio). Questa è in realtà una proprietà molto carina e desiderabile, che abbiamo appena gettato in mare senza una buona ragione.
Certo, con lautenticatore , lattacco di cui sopra è difficile da ottenere poiché la manomissione verrà scoperta. Ma fondamentalmente, lautenticatore risolve solo il problema che la scelta della modalità di funzionamento ha introdotto .
GHASH è un MAC che supporta dati extra autenticati. Da quello che posso dire, questa è una bugia. Oppure chiamala ” esagerazione ottimistica ” se vuoi. È solo una funzione di compressione con matematica non intuitiva (per i non matematici) alle spalle, ma alla fine non fa altro che una semplice moltiplicazione e getta via metà dei bit di input con lequivalente di ” overflow “. Che è proprio quello che, con una matematica più banale, può essere fatto in due righe di codice C per blocco entro una dozzina di cicli (o se sei daccordo con luso di moltiplicazioni a 32 bit invece di 64, può essere fatto in parallelo, ad esempio con AVX2 ” s vpmulld per due blocchi completi in ~ 4 cicli).
Coloro che ricordano ancora IDEA ricorderanno di aver usato la mod addizione 2 16 e la modulazione 2 16 + 1 come S-box che aveva la bella proprietà di essere reversibile (un po necessario se si desidera decifrare). Sfortunatamente, questo non poteva essere esteso a 32 bit perché 2 32 +1 non è “ta numero primo, quindi non è garantito che tutti gli input siano relativamente primi e quindi hai problemi a invertire loperazione. Ma … nel nostro caso va benissimo, non “vogliamo la nostra funzione di compressione sia invertibile! Quindi, in realtà, ” semplice “, anche la moltiplicazione ordinaria dovrebbe funzionare altrettanto bene?
Quindi, quella compressione semplice, non speciale, non magica la funzione è inizializzata con la chiave e IV, che incidentalmente rende loutput finale dipendente dalla chiave in un modo o nellaltro, quindi quella funzione ordinaria diventa effettivamente un MAC. Se hai ” dati aggiuntivi “, inseriscili nellhash prima di crittografare i tuoi dati, fatto. Ancora una volta, non è qualcosa di super speciale.
Nel complesso, non è niente che non potresti ottenere praticamente con ogni altra funzione hash .
Ora, Galois / counter presume che venga utilizzata la modalità counter. La modalità Counter (e le sue derivate) e GHASH hanno il vantaggio di poter crittografare / decrittografare i blocchi in parallelo. Inoltre, GHASH è banalmente parallelizzabile.
Yay, prestazioni ! Ma siamo onesti, questo è davvero un vantaggio, o piuttosto un enorme svantaggio ?
Importa quanto tempo ci vuole per decifrare un gigabyte o un terabyte di dimensioni messaggio e quanto bene puoi parallelizzare quel lavoro? O applicazioni in cui vuoi assolutamente ” cercare ” in posizioni casuali? Bene, ci sono applicazioni in cui questo può essere importante, certo. Mi viene in mente la crittografia completa del disco. Ma in questo caso non vorrai utilizzare GCM poiché desideri che le dimensioni dellinput e delloutput siano identiche.
Per un server occupato (o VPN) sarà importante, o almeno così sembra , ma questi possono elaborare qualsiasi cosa in parallelo comunque poiché hanno molte connessioni simultanee.Quindi, la possibilità o meno di parallelizzare uno stream non fa davvero differenza nel complesso. E le applicazioni in cui ci sono solo poche connessioni? Bene, normalmente non trasmetti terabyte di dati su un terminale di accesso e, se lo fai, la tua connessione Internet è ancora probabilmente il fattore limitante, poiché le prestazioni single-core superano facilmente la larghezza di banda GbE anche su processori desktop di 7-8 anni .
Va bene, potresti dover aspettare 2-3 secondi in più quando estrai un file 7z da 2 TB crittografato sul tuo disco rigido (se la creazione di migliaia di voci di directory non è davvero il collo di bottiglia, a cui sono propenso credo che sarà il caso). Quante volte lhai fatto nellultimo anno? Io: zero volte.
Gli unici per cui fa davvero la differenza sono ” cattivi “, cioè esattamente quelli che non vuoi che abbiano una vita facile. Abbastanza sicuro, se riesci a parallelizzare banalmente, gli attacchi diventano molto più facili. Getta una stanza piena di hardware dedicato (GPU, FPGA, qualunque cosa) al problema e lascia che si risolva. Nessuna comunicazione tra i nodi necessaria? Bene, perfetto, non può andare meglio.
È davvero un vantaggio? Non lo so, a me sembra un enorme svantaggio. Semmai, vorrei rendere il parallelismo il più difficile possibile, non il più semplice possibile.
Quindi … basta riflettere e alla domanda:
Qual è il cosa fondamentale che mi manca di GCM che lo rende così fantastico che dovresti assolutamente usarlo?
Commenti
- Ma chi sono i ” cattivi ” è impossibile da definire. E questo ha un enorme impatto sui consigli governativi e sulle risposte in questo forum.
Answer
TL; DR: GCM fornisce prestazioni eccellenti con le migliori proprietà di sicurezza che ci aspettiamo dalle cifrature oggi (AEAD).
GCM utilizza CTR per creare un cifrario a flusso. Questo è un metodo ben studiato, che ha un solo inconveniente: necessita assolutamente di unautenticazione per evitare il bit flipping. Prima di GCM, CTR-then-MAC era la soluzione. Un vantaggio principale dei cifrari a flusso è lassenza di attacchi di riempimento (perché non è necessario il riempimento). Un altro vantaggio è che AES-CTR può trarre vantaggio dalle istruzioni AES-NI.
GCM è CTR-then-MAC con prestazioni migliori . Un miglioramento chiave rispetto a CRT-then-MAC è la capacità di sovrapporre lesecuzione di crittografia e autenticazione. Inoltre, si è dimostrato sicuro nel modello di sicurezza concreto e non è gravato da brevetti, quindi è “un gioco da ragazzi utilizzarlo.
Ha alcuni svantaggi: non è efficiente nellhardware incorporato ed è difficile da implementare in modo efficiente. Lultimo punto viene contrastato utilizzando librerie scritte da altri. Tuttavia, questi sono i motivi per cui xchacha20-poly1305 è diventato popolare su GCM.
Commenti
- Direi che un altro motivo per cui ChaCha20 ha guadagnato popolarità è perché non AES. Non ‘ fraintendetemi, AES è un ottimo algoritmo, ma mettere letteralmente tutte le nostre uova nello stesso paniere forse non è la più intelligente di tutte le idee. E avere un altro algoritmo ben collaudato oltre ad AES è piuttosto prezioso
- @ MechMK1 Sono daccordo con te , ma non ho scritto che sono tutte le ragioni della ‘ popolarità di ChaCha20, perché ‘ Non è la domanda posta qui. Il mio punto era t hat GCM non è considerato ” fantastico ” come pensa lOP.
- Assolutamente vero. ‘ non è unoca doro, ma nessuno è mai stato licenziato per aver usato AES-GCM, per così dire.
- E ‘ non è gravato da brevetti.
- @StephenTouset Grazie, ho modificato il mio post per includere il tuo commento.
Risposta
Prima di tutto, GCM è una forma di modalità contatore. Il che significa che a differenza di, ad es. Cipher Block Chaining, luscita di un blocco dipende esattamente da un blocco di input. Peggio ancora: puoi modificare un singolo bit e il risultato decrittografato sarà diverso esattamente in quel bit. Perché se sei onesto, un cifrario a blocchi in modalità contatore non è affatto un “cifrario a blocchi”, ma un PRNG (con chiave) seguito da unoperazione XOR. Fondamentalmente un cifrario a flusso “a blocchi”. Non ci vuole molto per immaginare uno scenario in cui qualcuno potrebbe abusarne per modificare i messaggi in modo dannoso (ad esempio, cambiare “transazione: +5.000 \ $” in “transazione: -5.000 \ $”).
Lautenticazione del messaggio che GCM sovrappone al CTR rende la sua malleabilità irrilevante.
I cifrari a blocchi hanno normalmente la proprietà innata di trasformarsi in un completo incomprensibile quando capovolgi un singolo bit (più, con il concatenamento, lintero resto del messaggio) . Questa è in realtà una proprietà molto carina e desiderabile, che abbiamo semplicemente gettato in mare senza una buona ragione.
Questo è molto, molto sbagliato. Prima di tutto , La modalità CBC soffre anche di una sorta di debolezza della malleabilità; se capovolgi un bit del testo cifrato, rimescoli solo un blocco e capovolgi il bit corrispondente del blocco netto. E ci sono altri attacchi di malleabilità contro CBC; vedi, ad esempio, lattacco EFail .
Più in generale, la tua idea informale di messaggi “che si trasformano in un completo senza senso” non è abbastanza buona. Abbiamo assolutamente bisogno che i computer rilevino meccanicamente, con una precisa risposta “sì / no”, quando un messaggio crittografato è stato contraffatto. Confidare che un essere umano sarà nel giro abbastanza presto da individuare “incomprensibili” non è “sufficiente.
GHASH è un MAC che supporta dati extra autenticati. Da quello che posso dire, questa è una vera bugia. Oppure chiamatela “esagerazione ottimistica” se volete. È solo una funzione di compressione con matematica non intuitiva (per i non matematici) alle spalle, ma alla fine non fa altro che una semplice moltiplicazione e butta via metà dei bit di input con lequivalente di “overflow”.
Il MAC non smette di funzionare perché gli utenti non capiscono la matematica. È come dire che le persone non possono guardare la TV satellitare perché non “Conosco il calcolo. I MAC a campi finiti sono una costruzione standard, nota ormai da decenni.
Che è proprio quello che, con una matematica più banale, si può fare in due righe di C codice per blocco entro una dozzina di cicli (o se sei daccordo con luso di moltiplicazioni a 32 bit anziché 64, può essere fatto in parallelo, ad esempio con AVX2 “s vpmulld per due blocchi completi in ~ 4 cicli).
Esiste un vero dibattito sul fatto che i MAC basati su campi di Galois come GHASH, o MAC basati su campi primari come Poly1305, siano una scelta più pratica. In gran parte dipende dai compromessi tra la progettazione di MAC per enfatizzare il software e le implementazioni hardware; ad esempio, le moltiplicazioni di campo di Galois sono da incubo nel software, ma molto più semplici delle moltiplicazioni aritmetiche nellhardware. Una buona parte dei compromessi dipende anche dalla vulnerabilità agli attacchi di canale laterale, ad esempio, lanalisi della potenza .
Ma non si discute se i campi di Galois o i campi prime siano fondamentalmente inadeguati nd. La matematica controlla entrambi.
Yay, performance! Ma siamo onesti, questo è davvero un vantaggio o piuttosto un enorme svantaggio?
Ditelo alle infinite sfilate di ingegneri nel corso dei decenni che hanno resistito allaggiunta della crittografia ai prodotti a causa delle prestazioni. pensa ai dispositivi embedded e sii molto spaventato dallInternet of Things.
Voglio dire, questo non è affatto un problema morto. Negli ultimi due anni cè stato un acceso dibattito e lo sviluppo di una nuova costruzione crittografica per supportare la crittografia dellintero disco sui dispositivi Android di fascia bassa che sono stati giudicati non abbastanza potente per gli algoritmi basati su AES Android offerti in precedenza.
Gli unici per cui [la performance] fa davvero la differenza sono i “cattivi”, cioè esattamente quelli che non vuoi avere un vita facile. Abbastanza sicuro, se riesci a parallelizzare banalmente, gli attacchi diventeranno molto più facili. Getta una stanza piena di hardware dedicato (GPU, FPGA, qualunque cosa) al problema e lascia che si risolva.
I cifrari risolvono questo problema utilizzando chiavi di dimensioni sufficientemente grandi, non rallentando i cifrari. La preoccupazione che” stai sollevando sorge nella crittografia basata su password in cui non “t avere chiavi segrete sufficientemente entropiche. Le chiavi simmetriche a 256 bit saranno per sempre più che sufficienti per sconfiggere qualsiasi attacco di forza bruta nel nostro universo.
Che cosè la cosa fondamentale che mi manca di GCM che lo rende così fantastico che dovresti assolutamente usarlo?
Non devi assolutamente usare GCM È allo stesso tempo:
- Fondamentale y suono e molto ampiamente supportato nellhardware;
- gravato da una serie di inconvenienti che non hai evidenziato, come le scarse prestazioni del software e il catastrofico errore di autenticità al riutilizzo del nonce, che spesso lo squalificano in alcuni contesti pratici .
Se disponi di hardware con supporto AES-GCM nativo e software ben verificato che lo sfrutta, “non sarebbe saggio non inserirlo tra i tuoi migliori candidati.