Care este principala diferență între o cheie, un IV și un nonce?

apr. 24, 2021
admin

O cheie, în contextul criptografiei simetrice, este ceva ce țineți secret. Oricine vă cunoaște cheia (sau o poate ghici) poate decripta orice date pe care le-ați criptat cu ea (sau poate falsifica orice coduri de autentificare pe care le-ați calculat cu ea, etc.).

(Există, de asemenea, criptografia „asimetrică” sau cu cheie publică, în care cheia are efectiv două părți: cheia privată, care permite decriptarea și/sau semnarea, și o cheie publică (derivată din cheia privată corespunzătoare) care permite criptarea și/sau verificarea semnăturii.)

Un IV sau vector de inițializare este, în sensul cel mai larg, doar valoarea inițială folosită pentru a începe un anumit proces iterat. Termenul este utilizat în câteva contexte diferite și implică cerințe de securitate diferite în fiecare dintre ele. De exemplu, funcțiile hash criptografice au de obicei un IV fix, care este doar o constantă arbitrară care este inclusă în specificația funcției hash și care este utilizată ca valoare hash inițială înainte de introducerea oricăror date:

Diagrama unei funcții hash Merkle-Damgård din Wikipedia

În schimb, majoritatea modurilor de operare a cifrului bloc necesită un IV care este aleatoriu și imprevizibil, sau cel puțin unic pentru fiecare mesaj criptat cu o anumită cheie. (Bineînțeles, dacă fiecare cheie este folosită doar pentru a cripta un singur mesaj, se poate scăpa cu utilizarea unui IV fix). Acest IV aleatoriu asigură faptul că fiecare mesaj se criptează diferit, astfel încât vizualizarea mai multor mesaje criptate cu aceeași cheie nu oferă atacatorului mai multe informații decât vizualizarea unui singur mesaj lung. În special, se asigură că criptarea aceluiași mesaj de două ori produce două texte cifrate complet diferite, ceea ce este necesar pentru ca schema de criptare să fie sigură din punct de vedere semantic.

În orice caz, IV nu trebuie niciodată să fie ținut secret – dacă ar fi așa, ar fi o cheie, nu un IV. Într-adevăr, în cele mai multe cazuri, păstrarea secretă a IV nu ar fi practică nici dacă s-ar dori, deoarece destinatarul trebuie să o cunoască pentru a decripta datele (sau pentru a verifica hash-ul, etc.).

Un nonce, în sens larg, este doar „un număr folosit o singură dată”. Singurul lucru care se cere, în general, de la un nonce este ca acesta să nu fie folosit niciodată de două ori (în cadrul domeniului de aplicare relevant, cum ar fi criptarea cu o anumită cheie).IV-urile unice folosite pentru criptarea cu cifrare în bloc se califică drept nonce-uri, dar diverse alte scheme criptografice folosesc, de asemenea, nonce-uri.

Există o oarecare variație cu privire la care dintre termenii „IV” și „nonce” este folosit pentru diferite moduri de operare cu cifrare în bloc: unii autori folosesc exclusiv unul sau altul, în timp ce alții fac o distincție între ei. Pentru modul CTR, în special, unii autori rezervă termenul „IV” pentru întregul bloc de intrare al cifrului format prin concatenarea nonce-ului și a valorii inițiale a contorului (de obicei, un bloc cu toți biții zero), în timp ce alții preferă să nu folosească deloc termenul „IV” pentru modul CTR. Toate acestea sunt complicate de faptul că există mai multe variante privind modul în care nonce/IV trimis împreună cu mesajul în modul CTR este de fapt mapat în intrarea inițială a blocului de cifrare.

În schimb, pentru alte moduri decât CTR (sau moduri conexe, cum ar fi EAX sau GCM), termenul „IV” este aproape universal preferat în locul lui „nonce”. Acest lucru este valabil în special pentru modul CBC, deoarece acesta are cerințe privind IV-ul său (în mod specific, ca acestea să fie imprevizibile) care depășesc cerința obișnuită de unicitate așteptată de la nonces.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.