UMAC ( codul de autentificare a mesajelor în engleză bazat pe hashing universal, MAC universal , cod de autentificare a mesajelor bazat pe hashing universal) este unul dintre tipurile de cod de autentificare a mesajelor ( MAC ).
Acest algoritm a fost selectat de NESSIE în 2003, iar la dezvoltarea sa au participat următoarele persoane: Intel Corp. (SUA), Universitatea Nevada (SUA), Laboratorul de Cercetare IBM (SUA), Technion ( Israel ) și Universitatea din California Davis (SUA). Autorii săi au fost John Black, Shai Halevi și Hugo Krawczyk, Ted Krovetz și Phillip Rogaway .
Funcția rapidă „universală” este folosită pentru a hash mesajul primit M într-un șir scurt. Acest șir este apoi XOR cu o valoare pseudo-aleatorie, rezultând o etichetă UMAC:
unde K1 și K2 sunt chei secrete aleatorii pe care le au destinatarul și expeditorul.
Acest lucru arată că securitatea UMAC depinde de modul în care expeditorul și receptorul aleg aleatoriu funcția hash secretă și secvența pseudo-aleatorie . În acest caz, valoarea lui Nonce schimbă fiecare măsură. Datorită utilizării Nonce, receptorul și transmițătorul trebuie să știe când a fost trimis mesajul și cum a fost generată valoarea Nonce. În schimb, puteți utiliza orice altă valoare care nu se repetă ca Nonce, cum ar fi numărul de secvență al mesajului. În același timp, acest număr nu trebuie să fie secret, principalul lucru este că nu trebuie repetat.
UMAC este proiectat să utilizeze etichete pe 32 de biți, 64 de biți, 92 de biți și 128 de biți, în funcție de nivelul de securitate necesar. UMAC este de obicei folosit împreună cu algoritmul de criptare AES .
Crearea de octeți pseudo-aleatori este necesară pentru ca UHASH să funcționeze și atunci când se generează etichete
Pentru activitatea sa, UMAC folosește un cifr de bloc , a cărui alegere este determinată de următoarele constante:
Aceasta folosește funcția
Exemplu: dacă AES este folosit cu o cheie de 16 octeți, atunci BLOCLEN va fi 16 (deoarece AES funcționează cu blocuri de 16 octeți).
Această funcție generează o secvență de octeți pseudo-aleatori utilizați pentru funcțiile hash ale cheilor.
Intrare:
Ieșire:
Această funcție necesită o cheie și un anumit timp și returnează un număr pseudo-aleatoriu de utilizat în eticheta de generare. Cu această funcție, pot fi obținute numere cu lungimea de 4, 8, 12 sau 16 octeți.
Intrare:
Ieșire:
Etichetele UMAC sunt generate folosind funcția UHASH folosind valoarea Nonce și șirul obținut anterior (vezi Descriere). Lungimea lor poate fi de 4, 8, 12 sau 16 octeți.
Intrare:
Ieșire:
Algoritm de calcul al etichetei:
HashedMassage = UHASH(K, M, TagLen) Pad = PDF(K, nonce, TagLen) Tag = Pad xor HashedMassageAceste denumiri conțin în numele lor o anumită valoare a lungimii etichetei:
UHASH ( Hashing universal în engleză ) este o funcție de hashing universală, nucleul algoritmului UMAC. UHASH - funcția funcționează în trei etape. Mai întâi, L1-HASH este aplicat mesajului de intrare, apoi L2-HASH este aplicat acelui rezultat și, în final, L3-HASH este aplicat rezultatului. Dacă lungimea mesajului de intrare nu este mai mare de 1024 de biți, atunci L2-HASH nu este utilizat. Deoarece funcția L3-Hash returnează doar un cuvânt cu lungimea de 4 octeți, dacă este necesar să se obțină un hash cu lungime mai mare de 4 octeți, sunt efectuate mai multe iterații ale acestei scheme pe trei niveluri.
Lăsați funcția hash să fie aleasă dintr-o clasă de funcții hash H care mapează mesajele la D, un set de posibile modele de mesaje. Această clasă se numește universală dacă pentru orice pereche separată de mesaje, există în setul de funcții H/D, o funcție care le mapează la elementul D. Semnificația acestei funcții este că dacă o terță parte dorește să înlocuiască un mesaj cu alta, dar în același timp consideră că funcția hash a fost aleasă absolut aleatoriu, atunci probabilitatea de a nu detecta o substituție de către partea primitoare tinde spre 1/D.
L1-Hash împarte mesajele în bucăți de 1024 de octeți și aplică un algoritm de hashing numit NH fiecărei bucăți. Ieșirea algoritmului NH este de 128 de ori mai mică decât intrarea.
L2-Hash funcționează cu ieșirea L1-Hash, folosește algoritmul polinom POLY. A doua etapă de hashing este utilizată numai dacă lungimea mesajului de intrare este mai mare de 16 megaocteți. Utilizarea algoritmului POLY este necesară pentru a evita atacurile de sincronizare. Ieșirea de la algoritmul POLY este un număr de 16 octeți.
Această etapă este necesară pentru a obține o valoare de 4 octeți de la ieșirea de 16 octeți ai algoritmului L2-Hash.
Puterea UMAC depinde de funcțiile sale principale: funcția de derivare a cheii (KDF) și funcția de generare a secvenței pseudo-aleatorie (PDF). De aceea, ambele funcții sunt implementate folosind criptarea bloc, de obicei Advanced Encryption Standard (AES). Cu toate acestea, UMAC permite utilizarea altor coduri bloc. Principalul avantaj al algoritmului UMAC și al funcției UHASH este că puterea lor depinde numai de proprietățile matematice ale algoritmului și funcției date. Prin urmare, criptoanaliza nu afectează securitatea funcției UHASH.
Algoritmul MAC este utilizat pentru autentificarea mesajelor între două părți care cunosc cheia secretă partajată K. Etichetele de autentificare sunt calculate pentru mesaj folosind cheia K, iar în cazul UMAC, cheia este timpul. Hackerea algoritmului MAC înseamnă că atacatorul este capabil să genereze el însuși mesaje fără să cunoască cheia. Teoria Wegman-Carter și analiza UMAC arată că dacă se folosește un algoritm UMAC cu chei aleatoare și valoare inițială Nonce, atunci probabilitatea ca un atacator să spargă mesajul este: , , , , dacă etichete de ieșire cu lungimea 32, 64, 96 , sunt utilizate, respectiv, 128. Dacă un atacator face N încercări, atunci probabilitatea de hacking crește proporțional cu numărul de încercări, adică de N ori. Odată cu utilizarea suplimentară a algoritmului AES, probabilitatea de hacking este semnificativ redusă.
UMAC folosește ora curentă în intervalul 1 până la BLOCKLEN octeți. În acest caz, toate valorile Nonce din timpul sesiunii trebuie să fie egale ca lungime. Pentru cea mai bună securitate, nicio valoare Nonce nu trebuie repetată atunci când utilizați aceeași cheie de sesiune.
Dacă se utilizează un canal de transmisie duplex, atunci pot fi folosite taste diferite pentru fiecare direcție. Când folosiți o cheie în ambele direcții, este foarte important ca valoarea Nonce să nu se repete, acest lucru se poate face folosind taste pare într-o direcție și taste impare în cealaltă direcție. În acest caz, valoarea curentă a lui Nonce nu trebuie să fie păstrată secretă.
Valoarea Nonce poate fi creată și transmisă în următoarele moduri:
Atacurile prin reluare sunt acțiunile unui atacator care vizează repetarea unui mesaj, un număr aleatoriu și autentificarea unei etichete. În UMAC, acest atac va eșua deoarece fiecare valoare Nonce este folosită exact o dată.
Natura UMAC permite implementarea verificării prefixului de etichetă, de exemplu, un receptor poate verifica doar un prefix de 32 de biți dintr-o etichetă de 64 de biți. Acesta este utilizat pentru optimizare dacă sarcina de calcul a verificării este mare. În acest caz, receptorul are capacitatea de a respinge întreaga etichetă dacă prefixul pe 32 de biți este incorect. Acest algoritm reduce securitatea sesiunii.