SWIFFT | |
---|---|
Utvecklare | Vadim Lyubashevsky, Daniel Michiancio, Chris Peikert, Alon Rosen |
Skapad | 2008 |
publiceras | 2008 |
Sorts | hash-funktion |
SWIFFT är en uppsättning kryptografiska hashfunktioner med beprövad säkerhet [1] [2] [3] . De är baserade på Fast Fourier Transform ( FFT ) och använder den LLL-reducerade basalgoritmen . Den kryptografiska säkerheten för SWIFFT-funktioner (i asymptotisk mening) [4] är matematiskt bevisad med hjälp av de rekommenderade parametrarna [5] . Att hitta kollisioner i SWIFFT är minst lika tidskrävande i värsta fall som att hitta korta vektorer i cykliska/ ideala gitter . Den praktiska tillämpningen av SWIFFT kommer att vara värdefull just i de fall där motståndet mot kollisioner är särskilt viktigt. Till exempel digitala signaturer, som måste förbli tillförlitliga under lång tid.
Denna algoritm ger en genomströmning på cirka 40 Mb/s på en Intel Pentium 4-processor med en klockfrekvens på 3,2 GHz [6] [1] . Det har gjorts forskning för att påskynda FFT, som används i SWIFFT [7] . Som ett resultat ökades hastigheten på algoritmen med mer än 13 gånger [6] . Denna implementering av SWIFFT visade sig vara snabbare än implementeringar av allmänt använda hashfunktioner [8] .
Vid tävlingen 2012 National Institute of Standards and Technology [2] föreslogs SWIFFTX (en modifiering av SWIFFT) som SHA-3 (för att ersätta den äldre SHA-2 och särskilt SHA-1 [9] ), men avvisades i första omgången [10] .
SWIFFT-funktionerna kan beskrivas som ett enkelt algebraiskt uttryck över någon polynomring [1] [11] . Funktionsfamiljen beror på tre huvudparametrar : låt vara en potens av 2, - ett litet heltal, och - inte nödvändigtvis ett primtal , men det är bättre att välja det primtal. Vi definierar det som en ring av formen . Till exempel, ringen av polynom i , vars koefficienter är heltal, är talet med vilket vi utför modulo division, och . Ett element från kan vara ett polynom av lägre grad med koefficienter från .
En definierad funktion i SWIFFT-familjen definieras som fasta ringelement , kallade multiplikatorer. Denna funktion över ringen kan skrivas i följande form:
,
där är polynom med binära koefficienter som motsvarar ett binärt ingångsmeddelande av längd .
Operationsalgoritmen är som följer: [1] [12] [11]
Specifika värden för parametrarna n , m och p väljs enligt följande: n = 64, m = 16, p = 257 [13] . För dessa parametrar kommer alla fasta komprimeringsfunktioner i familjen att acceptera ett meddelande med längden mn = 1024 bitar (128 byte) som indata. Utgången är i ett intervall som har storlek . Utdata kan representeras med 528 bitar (66 byte).
Det svåraste med att beräkna uttrycket ovan är att beräkna resultatet av multiplikation [1] [14] . Ett snabbt sätt att beräkna en given produkt är att använda faltningssatsen , som säger att under vissa förhållanden:
Här betecknar Fouriertransformen , och operation innebär att multiplicera koefficienter med samma index. I allmänhet har faltningssatsen innebörden av faltning , inte multiplikation. Det kan dock visas att multiplikationen av polynom är en faltning.
För att hitta Fouriertransformen använder vi Fast Fourier Transform (FFT), som tar [1] . Multiplikationsalgoritmen är som följer [14] : vi beräknar alla Fourierkoefficienter för alla polynom samtidigt med FFT. Vi multiplicerar sedan parvis de motsvarande Fourierkoefficienterna för de två polynomen. Efter använder vi den inversa FFT, varefter vi får ett polynom med grad som inte är högre än .
Istället för den vanliga Fouriertransformen använder SWIFFT den Diskreta Fouriertransformen (DFT) [1] [14] . Den använder enhetsrötter i stället för komplexa enhetsrötter. Detta kommer att vara sant om det är ett ändligt fält och dess 2 :e enkla enhetsrötter finns i det givna fältet. Dessa villkor kommer att uppfyllas om vi tar ett sådant primtal som är delbart med .
Parametrarna m , p , n måste uppfylla följande krav [15] :
Du kan till exempel ta följande parametrar: n =64, m =16, p =257. Vi tar genomströmningen på nivån 40 Mb/s [6] , säkerhet från sökandet efter kollisioner - operationer.
SWIFFT - Beprövade säkerhetskrypteringsfunktioner [1] [3] . Som i de flesta fall bygger beviset på funktioners säkerhet på att det matematiska problemet som används i funktionerna inte kan lösas i polynomtid. Det betyder att styrkan med SWIFFT bara ligger i det faktum att den är baserad på ett komplext matematiskt problem.
I fallet med SWIFFT ligger den bevisade säkerheten i problemet med att hitta korta vektorer i cykliska/ ideala gitter [17] . Det kan bevisas att följande påstående är sant: anta att vi har en algoritm som kan hitta funktionskollisioner för en slumpmässig version av SWIFFT erhållen från , i en möjlig tid med sannolikhet . Detta innebär att algoritmen bara fungerar på en liten men märkbar bråkdel av familjens funktioner. Sedan kan vi också hitta en algoritm som alltid kan hitta en kort vektor på vilket idealiskt gitter som helst över en ring under en möjlig tid beroende på och . Detta betyder att det inte är mindre svårt att hitta kollisioner i SWIFFT, problemet med att hitta korta vektorer i ett gitter över , för vilka det bara finns exponentiella algoritmer.
Författarna till denna hashfunktion undersökte den för sårbarheter för olika attacker och fann att attacken "födelsedagar" kräver minsta hashräkningsoperationer (2 106 ) för att hitta kollisioner. [18] [1] . Permutationsattacker kräver 2 448 räkningar för standardparametrar. En fullständig uppräkning av de möjliga värdena skulle kräva 2 528 hashberäkningar. Detta är vanligtvis tillräckligt för att göra en fiendeattack omöjlig.
Hash-funktioner | |
---|---|
generell mening | |
Kryptografisk | |
Nyckelgenereringsfunktioner | |
Kontrollnummer ( jämförelse ) | |
Hashes |
|