Pentru a calcula eticheta de autentificare în modul Galois / Counter (GCM), mai întâi se calculează un MAC folosind GHASH peste cifru text și datele suplimentare. După aceea, acest MAC este criptat folosind GCTR (folosind primul contor).
Întrebarea mea este: De ce este necesar acest ultim pas de criptare? Care ar fi problema de securitate, dacă aș folosi direct ieșirea GHASH direct ca etichetă de autentificare?
Răspuns
Care ar fi problema de securitate, dacă aș folosi direct ieșirea GHASH ca etichetă de autentificare?
Apoi cineva care ascultă mesaje criptate ar putea recupera $ H $ , dintre care unul este corect.
Rezultatul GHASH este un polinom public (bazat pe textul cifrat și AAD), evaluat la o valoare secretă $ H $ . Se pare că, având în vedere un astfel de polinom, $ H $ poate fi recuperat eficient, fie rescriind polinomul ca $ \ mathrm {GHASH} (H) + \ mathrm {Tag} = 0 $ și recuperarea rădăcinilor (care se poate face într-un câmp finit) sau chiar mai ușor, obținând două astfel de texte criptate, rescriind ambele și utilizați o valoare extinsă euclidiană pentru a-și recupera rădăcina comună.
Având în vedere $ H $ , un atacator poate face în mod banal modificări arbitrare la mesajele criptate ; da, este „rău.
Comentarii
- O altă întrebare: De ce este necesar să folosiți GCTR pentru a cripta blocul GHASH în loc să folosiți doar $ Enc_H (GHASH) $ ca etichetă? În acest fel, GMAC ar putea fi utilizat fără a fi nevoie de un IV.
- @mat: vrei să spui $ GHASH $ prin AES (folosind $ H $ ca cheie )? Ei bine, de fapt, un astfel de lucru ar funcționa (ei bine, nu aș folosi
nu aș folosi $ H $ ca cheie, dar în afară de asta …) și ar fi un design mai conservator; cu toate acestea, GCM a fost inițial conceput pentru a fi un mod liniar cu țevi; adică ar putea fi implementat având în vedere o implementare hardware AES în care, în fiecare ciclu de ceas, dăm următorul bloc de text simplu hardware-ului și fiecare ciclu de ceas, apare textul cifrat de acum 10-14 cicluri. Făcând o criptare pe GHASH, ' d blocăm conducta …