SWIFFT | |
---|---|
Kehittäjät | Vadim Lyubashevsky, Daniel Michiancio, Chris Peikert, Alon Rosen |
Luotu | 2008 |
julkaistu | 2008 |
Tyyppi | hash-toiminto |
SWIFFT on joukko kryptografisia hajautusfunktioita, joiden turvallisuus on todistettu [1] [2] [3] . Ne perustuvat FFT ( Fast Fourier Transform ) -muunnokseen ja käyttävät LLL-reduced bases -algoritmia . SWIFFT-funktioiden kryptografinen turvallisuus (asymptoottisessa mielessä) [4] on matemaattisesti todistettu käyttämällä suositeltuja parametreja [5] . Törmäysten löytäminen SWIFFT:ssä on pahimmassa tapauksessa vähintään yhtä aikaa vievää kuin lyhyiden vektoreiden löytäminen syklisistä/ ideaaleista hiloista . SWIFFT:n käytännön soveltaminen on arvokasta juuri niissä tapauksissa, joissa törmäyskestävyys on erityisen tärkeää. Esimerkiksi digitaaliset allekirjoitukset, joiden on säilyttävä luotettavina pitkään.
Tämä algoritmi tarjoaa noin 40 Mb/s suorituskyvyn Intel Pentium 4 -prosessorilla kellotaajuudella 3,2 GHz [6] [1] . SWIFFT:ssä käytetyn FFT:n nopeuttamiseksi on tehty tutkimusta [7] . Tämän seurauksena algoritmin nopeus kasvoi yli 13 kertaa [6] . Tämä SWIFFT-toteutus osoittautui nopeammaksi kuin yleisesti käytettyjen hash-funktioiden toteutukset [8] .
Vuoden 2012 National Institute of Standards and Technology [2] -kilpailussa SWIFFTX:ää (SWIFFT:n muunnos) ehdotettiin SHA-3 :ksi (korvaamaan vanhemman SHA-2:n ja erityisesti SHA-1:n [9] ), mutta se hylättiin ensimmäinen kierros [10] .
SWIFFT-funktiot voidaan kuvata yksinkertaisena algebrallisena lausekkeena jonkin polynomirenkaan yli [1] [11] . Toimintojen perhe riippuu kolmesta pääparametrista : olkoon potenssi 2, - pieni kokonaisluku ja - ei välttämättä alkuluku , mutta se on parempi valita alkuluku. Määrittelemme sen muodon renkaaksi . Esimerkiksi polynomien rengas , jonka kertoimet ovat kokonaislukuja, on luku, jolla suoritamme modulo-jaon, ja . Alku voi olla alemman asteen polynomi kertoimilla alkaen .
Määritelty funktio SWIFFT-perheessä määritellään kiinteiksi rengaselementeiksi , joita kutsutaan kertojiksi. Tämä funktio renkaan päälle voidaan kirjoittaa seuraavassa muodossa:
,
missä ovat polynomit, joiden binäärikertoimet vastaavat pituuden binaarisyöteviestiä .
Toimintaalgoritmi on seuraava: [1] [12] [11]
Parametrien n , m ja p ominaisarvot valitaan seuraavasti: n = 64, m = 16, p = 257 [13] . Näille parametreille mikä tahansa perheen kiinteä pakkausfunktio hyväksyy syötteeksi viestin, jonka pituus on mn = 1024 bittiä (128 tavua). Tulos on alueella , jolla on koko . Lähtötiedot voidaan esittää käyttämällä 528 bittiä (66 tavua).
Vaikein osa yllä olevan lausekkeen laskemisessa on kertolaskutuloksen laskeminen [1] [14] . Nopea tapa laskea tietty tulo on käyttää konvoluutiolausetta , joka sanoo, että tietyissä olosuhteissa:
Tässä tarkoittaa Fourier-muunnosta ja operaatio tarkoittaa kertoimien kertomista samalla indeksillä. Yleensä konvoluutiolauseella on konvoluutio , ei kertolasku. Voidaan kuitenkin osoittaa, että polynomien kertolasku on konvoluutio.
Fourier-muunnoksen löytämiseksi käytämme nopeaa Fourier-muunnosta (FFT), joka kestää [1] . Kertolalgoritmi on seuraava [14] : laskemme kaikki Fourier-kertoimet kaikille polynomeille kerralla käyttämällä FFT:tä. Kerromme sitten pareittain näiden kahden polynomin vastaavat Fourier-kertoimet. Kun käytämme käänteistä FFT:tä, jonka jälkeen saamme polynomin, jonka aste ei ole suurempi kuin .
Tavallisen Fourier-muunnoksen sijaan SWIFFT käyttää Discrete Fourier-muunnosta (DFT) [1] [14] . Se käyttää yhtenäisyyden juuria monimutkaisten yhtenäisyyden juurien sijaan . Tämä on totta, jos on äärellinen kenttä ja sen 2 n :nnet yksinkertaiset ykseyden juuret ovat olemassa annetussa kentässä. Nämä ehdot täyttyvät, jos otamme sellaisen alkuluvun , joka on jaollinen luvulla .
Parametrien m , p , n on täytettävä seuraavat vaatimukset [15] :
Voit ottaa esimerkiksi seuraavat parametrit: n =64, m =16, p =257. Otamme suorituskyvyn tasolle 40 Mb / s [6] , turvallisuus törmäysten etsinnästä - operaatiot.
SWIFFT - Todistettu turvallisuus salaustoiminnot [1] [3] . Kuten useimmissa tapauksissa, funktioiden turvallisuuden todistaminen perustuu siihen, että funktioissa käytettyä matemaattista ongelmaa ei voida ratkaista polynomiajassa. Tämä tarkoittaa, että SWIFFT:n vahvuus on vain siinä, että se perustuu monimutkaiseen matemaattiseen ongelmaan.
SWIFFT:n tapauksessa todistettu turvallisuus piilee ongelmassa löytää lyhyitä vektoreita syklisistä/ ideaalihiloista [17] . Voidaan todistaa, että seuraava väite on totta: oletetaan, että meillä on algoritmi, joka löytää funktiotörmäyksiä SWIFFT:n satunnaiselle versiolle, joka on saatu kohdasta , jossain mahdollisessa ajassa todennäköisyydellä . Tämä tarkoittaa, että algoritmi toimii vain pienellä mutta huomattavalla osalla perheen toimintoja. Sitten voimme löytää myös algoritmin , joka voi aina löytää lyhyen vektorin mistä tahansa ideaalisesta hilasta renkaan yli jossain mahdollisessa ajassa riippuen ja . Tämä tarkoittaa, että törmäysten löytäminen SWIFFT:ssä ei ole yhtä vaikeaa, ongelmana on löytää lyhyitä vektoreita hilassa yli , jolle on olemassa vain eksponentiaalisia algoritmeja.
Tämän hash-funktion kirjoittajat tutkivat sen haavoittuvuuksia eri hyökkäyksille ja havaitsivat, että "syntymäpäivä"-hyökkäys vaatii vähiten hash-laskentatoimintoja (2 106 ) törmäysten löytämiseksi. [18] [1] . Permutaatiohyökkäykset vaativat 2 448 laskentaa vakioparametreille. Mahdollisten arvojen täydellinen luettelointi vaatisi 2 528 hash-laskentaa. Tämä riittää yleensä tekemään vihollisen hyökkäyksen mahdottomaksi.
Hash-funktiot | |
---|---|
yleinen tarkoitus | |
Kryptografinen | |
Avainten luontitoiminnot | |
Tarkista numero ( vertailu ) | |
Hashes |
|