SWIFFT | |
---|---|
Dezvoltatori | Vadim Lyubashevsky, Daniel Michiancio, Chris Peikert, Alon Rosen |
Creată | 2008 |
publicat | 2008 |
Tip de | funcția hash |
SWIFFT este un set de funcții hash criptografice cu securitate dovedită [1] [2] [3] . Acestea se bazează pe transformarea rapidă Fourier ( FFT ) și folosesc algoritmul de baze reduse cu LLL . Securitatea criptografică a funcțiilor SWIFFT (în sensul asimptotic) [4] este dovedită matematic folosind parametrii recomandați [5] . Găsirea coliziunilor în SWIFFT este cel puțin la fel de consumatoare de timp în cel mai rău caz ca găsirea de vectori scurti în rețele ciclice/ ideale . Aplicarea practică a SWIFFT va fi valoroasă tocmai în acele cazuri în care rezistența la coliziuni este deosebit de importantă. De exemplu, semnăturile digitale, care trebuie să rămână de încredere mult timp.
Acest algoritm oferă un debit de aproximativ 40 Mb/s pe un procesor Intel Pentium 4 cu o frecvență de ceas de 3,2 GHz [6] [1] . Au fost făcute cercetări pentru a accelera FFT, care este folosit în SWIFFT [7] . Ca urmare, viteza algoritmului a fost mărită de peste 13 ori [6] . Această implementare a SWIFFT sa dovedit a fi mai rapidă decât implementările funcțiilor hash utilizate pe scară largă [8] .
La concursul Institutului Național de Standarde și Tehnologie [2] din 2012, SWIFFTX (o modificare a SWIFFT) a fost propus ca SHA-3 (pentru a înlocui vechiul SHA-2 și în special SHA-1 [9] ), dar a fost respins în primul tur [10] .
Funcțiile SWIFFT pot fi descrise ca o simplă expresie algebrică peste un inel polinomial [1] [11] . Familia de funcții depinde de trei parametri principali : fie o putere de 2, - un număr întreg mic și - nu neapărat un număr prim , dar este mai bine să-l alegeți prim. Îl definim ca un inel de forma . De exemplu, inelul de polinoame din , ai căror coeficienți sunt numere întregi, este numărul cu care efectuăm împărțirea modulo și . Un element din poate fi un polinom de grad inferior cu coeficienți din .
O funcție definită în familia SWIFFT este definită ca elemente inelare fixe , numite multiplicatori. Această funcție peste inel poate fi scrisă în următoarea formă:
,
unde sunt polinoame cu coeficienți binari corespunzători unui mesaj de intrare binar de lungime .
Algoritmul de operare este următorul: [1] [12] [11]
Valorile specifice pentru parametrii n , m și p sunt alese după cum urmează: n = 64, m = 16, p = 257 [13] . Pentru acești parametri, orice funcție fixă de compresie a familiei va accepta un mesaj cu lungimea mn = 1024 biți (128 octeți) ca intrare. Ieșirea este într-un interval care are dimensiune . Datele de ieșire pot fi reprezentate folosind 528 de biți (66 de octeți).
Cea mai grea parte a calculului expresiei de mai sus este de a calcula rezultatul înmulțirii [1] [14] . O modalitate rapidă de a calcula un produs dat este să utilizați teorema de convoluție , care afirmă că în anumite condiții:
Aici denotă transformata Fourier , iar operația înseamnă înmulțirea coeficienților cu același indice. În general, teorema de convoluție are sensul de convoluție , nu de înmulțire. Totuși, se poate demonstra că înmulțirea polinoamelor este o convoluție.
Pentru a găsi transformata Fourier, folosim transformata Fourier rapidă (FFT), care necesită [1] . Algoritmul de multiplicare este următorul [14] : calculăm toți coeficienții Fourier pentru toate polinoamele simultan folosind FFT. Apoi înmulțim în perechi coeficienții Fourier corespunzători celor două polinoame. După ce folosim inversul FFT, după care obținem un polinom de grad nu mai mare decât .
În loc de transformarea Fourier obișnuită, SWIFFT folosește transformata Fourier discretă (DFT) [1] [14] . Folosește rădăcinile unității în loc de rădăcini complexe ale unității. Acest lucru va fi adevărat dacă este un câmp finit și a 2- a n - a rădăcină simplă a unității există în câmpul dat. Aceste condiții vor fi îndeplinite dacă luăm un astfel de număr prim care este divizibil cu .
Parametrii m , p , n trebuie să îndeplinească următoarele cerințe [15] :
Puteți lua, de exemplu, următorii parametri: n =64, m =16, p =257. Luăm debitul la nivelul de 40 Mb/s [6] , securitate din căutarea coliziunilor - operațiuni.
SWIFFT - Funcții criptografice dovedite de securitate [1] [3] . Ca în majoritatea cazurilor, demonstrarea securității funcțiilor se bazează pe faptul că problema matematică folosită în funcții nu poate fi rezolvată în timp polinomial. Aceasta înseamnă că puterea SWIFFT constă doar în faptul că se bazează pe o problemă matematică complexă.
În cazul SWIFFT, securitatea dovedită constă în problema găsirii vectorilor scurti în rețele ciclice/ ideale [17] . Se poate dovedi că următoarea afirmație este adevărată: să presupunem că avem un algoritm care poate găsi coliziuni de funcții pentru o versiune aleatorie a SWIFFT obținută din , într-un timp posibil cu probabilitate . Aceasta înseamnă că algoritmul funcționează doar pe o fracțiune mică, dar vizibilă, din funcțiile familiei. Apoi, putem găsi, de asemenea, un algoritm care poate găsi întotdeauna un vector scurt pe orice rețea ideală peste un inel într-un timp posibil, în funcție de și . Aceasta înseamnă că găsirea coliziunilor în SWIFFT nu este mai puțin dificilă, problema găsirii de vectori scurti într-o rețea peste , pentru care există doar algoritmi exponențiali .
Autorii acestei funcții hash au examinat-o pentru vulnerabilități la diferite atacuri și au descoperit că atacul „zile de naștere” necesită cele mai puține operațiuni de numărare hash (2 106 ) pentru a găsi coliziuni. [18] [1] . Atacurile de permutare necesită 2.448 de numărări pentru parametrii standard. O enumerare completă a valorilor posibile ar necesita 2.528 de calcule hash. Acest lucru este de obicei suficient pentru a face imposibil un atac inamic.
Funcții hash | |
---|---|
scop general | |
Criptografic | |
Funcții de generare a cheilor | |
Numărul de verificare ( comparație ) | |
Hashes |
|