SWIFFT | |
---|---|
Fejlesztők | Vadim Lyubashevsky, Daniel Michiancio, Chris Peikert, Alon Rosen |
Létrehozva | 2008 |
közzétett | 2008 |
Típusú | hash függvény |
A SWIFFT kriptográfiai hash függvények készlete bizonyított biztonsággal [1] [2] [3] . Ezek a gyors Fourier-transzformáción ( FFT ) alapulnak, és az LLL-redukált bázisalgoritmust használják . A SWIFFT-függvények kriptográfiai biztonsága (aszimptotikus értelemben) [4] az ajánlott paraméterek [5] segítségével matematikailag bizonyított . Az ütközések megtalálása SWIFFT - ben a legrosszabb esetben legalább olyan időigényes , mint a rövid vektorok megtalálása ciklikus/ ideális rácsokban . A SWIFFT gyakorlati alkalmazása éppen azokban az esetekben lesz értékes, ahol különösen fontos az ütközésállóság. Például a digitális aláírások, amelyeknek hosszú ideig megbízhatónak kell maradniuk.
Ez az algoritmus körülbelül 40 Mb/s átviteli sebességet biztosít egy 3,2 GHz-es órajelű Intel Pentium 4 processzoron [6] [1] . Kutatásokat végeztek az FFT felgyorsítására, amelyet a SWIFFT-ben használnak [7] . Ennek eredményeként az algoritmus sebessége több mint 13-szorosára nőtt [6] . A SWIFFT ezen megvalósítása gyorsabbnak bizonyult, mint a széles körben használt hash-függvények [8] .
A 2012-es National Institute of Standards and Technology [2] versenyen a SWIFFTX-et (a SWIFFT egy módosítása) SHA-3 néven javasolták (a régebbi SHA-2 és különösen az SHA-1 helyére [9] ), de a első kör [10] .
A SWIFFT függvények egyszerű algebrai kifejezésként írhatók le valamilyen polinomgyűrűn [1] [11] . A függvénycsalád három fő paramétertől függ : legyen 2 hatványa, - egy kis egész szám, és - nem feltétlenül prímszám , de jobb, ha prímszámot választunk. A forma gyűrűjeként határozzuk meg . Például a -beli polinomok gyűrűje , amelyek együtthatói egész számok, az a szám, amellyel modulo osztást hajtunk végre, és . A -ból származó elem lehet alacsonyabb fokú polinom , melynek együtthatói -ból .
A SWIFFT családban egy meghatározott függvényt rögzített gyűrűs elemekként határoznak meg, amelyeket szorzóknak neveznek. Ez a függvény a gyűrű felett a következő formában írható fel:
,
ahol a hosszúságú bináris bemeneti üzenetnek megfelelő bináris együtthatójú polinomok vannak .
A műveleti algoritmus a következő: [1] [12] [11]
Az n , m és p paraméterek fajlagos értékeit a következőképpen választjuk ki: n = 64, m = 16, p = 257 [13] . Ezeknél a paramétereknél a család bármely rögzített tömörítési függvénye elfogad egy mn = 1024 bit (128 bájt) hosszúságú üzenetet bemenetként. A kimenet mérete tartományban van . A kimeneti adatok 528 bittel (66 bájttal) ábrázolhatók.
A fenti kifejezés kiszámításának legnehezebb része a szorzás eredményének kiszámítása [1] [14] . Egy adott szorzat kiszámításának gyors módja a konvolúciós tétel használata , amely kimondja, hogy bizonyos feltételek mellett:
Itt a Fourier-transzformációt jelöli , a művelet pedig az együtthatók azonos indexű szorzását jelenti. Általában a konvolúciós tétel jelentése konvolúció , nem szorzás. Kimutatható azonban, hogy a polinomok szorzása konvolúció.
A Fourier-transzformáció megtalálásához a gyors Fourier-transzformációt (FFT) használjuk, amely [1] . A szorzási algoritmus a következő [14] : az összes polinomra egyszerre számítjuk ki az összes Fourier-együtthatót az FFT segítségével. Ezután páronként megszorozzuk a két polinom megfelelő Fourier-együtthatóit. Miután az inverz FFT-t használjuk, ami után egy fokú polinomot kapunk, amely nem magasabb, mint .
A szokásos Fourier-transzformáció helyett a SWIFFT a diszkrét Fourier-transzformációt (DFT) [1] [14] használja . Az egység gyökereit használja az egység komplex gyökerei helyett. Ez akkor lesz igaz, ha egy véges mező , és az egység 2. n - edik egyszerű gyöke létezik az adott mezőben. Ezek a feltételek akkor teljesülnek, ha olyan prímszámot veszünk, amely osztható -vel .
Az m , p , n paramétereknek meg kell felelniük a következő követelményeknek [15] :
Vegyük például a következő paramétereket: n =64, m =16, p =257. Az átviteli sebességet 40 Mb / s [6] szintre vesszük , a biztonságot az ütközések keresésétől - műveletek.
SWIFFT – Bizonyított biztonságú kriptográfiai funkciók [1] [3] . Mint a legtöbb esetben, a függvények biztonságának bizonyítása azon alapul, hogy a függvényekben használt matematikai probléma nem oldható meg polinomiális időben. Ez azt jelenti, hogy a SWIFFT ereje csak abban rejlik, hogy összetett matematikai problémán alapul.
A SWIFFT esetében a bizonyított biztonság abban rejlik, hogy ciklikus/ ideális rácsokban rövid vektorokat találunk [17] . Bebizonyítható, hogy igaz a következő állítás: tegyük fel, hogy van egy algoritmusunk, amely függvényütközéseket talál a SWIFFT egy véletlenszerű változatára, amely -ből származik , bizonyos időn belül valószínűséggel . Ez azt jelenti, hogy az algoritmus a család funkcióinak csak egy kis, de észrevehető hányadán működik. Ekkor találhatunk egy olyan algoritmust is , amely mindig képes egy rövid vektort találni bármely ideális rácson egy gyűrű felett bizonyos időn belül attól függően, hogy és . Ez azt jelenti, hogy az ütközések megtalálása SWIFFT-ben nem kevésbé nehéz, a rövid vektorok megtalálásának problémája a feletti rácsban , amelyre csak exponenciális algoritmusok léteznek.
Ennek a hash-függvénynek a szerzői megvizsgálták a különféle támadásokkal szembeni sebezhetőségeket, és megállapították, hogy a „születésnapi” támadáshoz van szükség a legkevesebb hash-számlálási műveletre (2 106 ) az ütközések megtalálásához. [18] [1] . A permutációs támadásokhoz 2448 számlálás szükséges a szabványos paraméterekhez. A lehetséges értékek teljes felsorolásához 2528 hash-számításra lenne szükség. Ez általában elég ahhoz, hogy lehetetlenné tegye az ellenséges támadást.
Hash függvények | |
---|---|
Általános rendeltetésű | |
Kriptográfia | |
Kulcsgenerálási funkciók | |
Csekkszám ( összehasonlítás ) | |
Hashes |
|