Whirlpool | |
---|---|
Kehittäjät |
Vincent Rayman , Barreto |
Ensimmäinen julkaistu | marraskuuta 2000 |
Standardit | NESSIE Portfolio ( 2003 ), ISO/IEC 10118-3:2004 ( 2004 ) |
Hash-koko | 512-bittinen |
Kierrosten lukumäärä | kymmenen |
Tyyppi | hash-toiminto |
Whirlpool on Vincent Raymanin ja Paulo Barreton kehittämä kryptografinen hash-funktio . Julkaistu marraskuussa 2000 . Tiivistää syöttöviestin enintään bitin pituiseksi . Hajautusfunktion Whirlpool - hajautusarvo on 512 bittiä.
Whirlpoolin hash-funktio on nimetty Whirlpool Galaxyn (M51) mukaan Canis Houndsin tähdistössä , joka on ensimmäinen galaksi, jossa on havaittavissa oleva spiraalirakenne.
Sen perustamisesta vuonna 2000 lähtien Whirlpoolia on muutettu kahdesti.
Ensimmäinen versio, Whirlpool-0, esitetään ehdokkaana NESSIE-projektissa ( eng. New European Schemes for Signatures, Integrity and Encryption , uudet eurooppalaiset projektit digitaalisesta allekirjoituksesta , eheydestä ja salauksesta).
Whirlpool-0:n muunnos, nimeltään Whirlpool-T, lisättiin NESSIE:n suositusten salaustoimintojen luetteloon vuonna 2003 . Muutokset koskivat Whirlpoolin korvauslohkoa ( S-box ): ensimmäisessä versiossa S-box-rakennetta ei kuvattu ja se generoitiin mielivaltaisesti, mikä aiheutti tiettyjä ongelmia Whirlpoolin laitteistototeutuksessa. Whirlpool-T-versiossa S-box "hanki" selkeän rakenteen.
Taizō Shirain ja Kyoji Shibutanin [1] havaitsema Whirlpool-T-diffuusimatriisien vika korjattiin myöhemmin, ja lopullinen (kolmas) versio, lyhennettynä Whirlpool, hyväksyttiin ISO :ssa ISO/IEC:ssä. 10118-3:2004 vuonna 2004.
Pääversio - hash-funktiot - on kolmas; toisin kuin ensimmäisessä versiossa, S-laatikko on määritelty ja hajamatriisi korvataan uudella Shirain ja Shibutanin raportin [1] jälkeen .
Whirlpool koostuu pakkaustoiminnon uudelleenkäytöstä , joka perustuu erityiseen 512-bittiseen lohkosalaukseen 512-bittisellä avaimella.
Algoritmi käyttää operaatioita Galois'n kentässä moduloi redusoitumattoman polynomin .
Polynomit kirjoitetaan heksadesimaalimuodossa lyhyyden vuoksi. Esimerkiksi merkintä tarkoittaa .
Whirlpool on rakennettu erityiseen lohkosalaukseen , joka toimii 512-bittisen tiedon kanssa.
Muunnoksissa hash -laskennan välitulosta kutsutaan hash-tilaksi tai yksinkertaisesti tilaksi . Laskennassa tilaa edustaa yleensä tilamatriisi . Whirlpoolille tämä on matriisi . Siksi 512-bittiset tietolohkot on muunnettava tähän muotoon ennen lisälaskelmia. Tämä saavutetaan ottamalla käyttöön toiminto :
Yksinkertaisesti sanottuna tilamatriisi täytetään tiedoilla rivi riviltä. Tässä tapauksessa matriisin jokainen tavu on vastaava polynomi .
Toiminto koostuu korvauslaatikon ( S-box ) soveltamisesta rinnakkain tilamatriisin kaikkiin tavuihin:
Korvauslohko on kuvattu seuraavassa korvaustaulukossa:
|
||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
Permutaatio kiertää tilamatriisin jokaista saraketta siten, että sarake siirtyy alaspäin :
Tämän muunnoksen tehtävänä on sekoittaa tilamatriisirivien tavut keskenään.
Lineaarinen diffuusioLineaarinen diffuusio on lineaarinen muunnos, jonka matriisi on MDS-matriisi , eli:
Toisin sanoen tilamatriisi kerrotaan oikealta matriisilla . Muista, että matriisielementtien yhteen- ja kertolaskutoiminnot suoritetaan .
MDS-matriisi on sellainen äärellisen kentän matriisi, että jos se otetaan lineaarisen muunnoksen matriisinaavaruudesta avaruuteen ,niinmissä tahansa kahdessa näkymäavaruuden vektorissaon ainakineroja komponenteissa. Toisin sanoen joukko näkymävektoreitamuodostaa koodin, jolla on enimmäisvälin ominaisuus ( englanniksi Maximum Distance Separable code ). Tällainen koodi on esimerkiksi Reed-Solomon-koodi .
Whirlpoolissa MDS-matriisin maksimidiversiteettiominaisuus tarkoittaa, että vektorin ja vektorin vaihtuvien tavujen kokonaismäärä on vähintään . Toisin sanoen mikä tahansa muutos vain yhteen tavuun johtaa muutoksen kaikkiin 8 tavuun . Tämä on lineaarisen diffuusion ongelma .
Kuten edellä mainittiin, Whirlpoolin uusimman (kolmannen) version MDS-matriisia on muokattu Taizo Shirain ja Kyoji Shibutanin[1] artikkelin ansiosta . He analysoivat Whirlpoolin toisen version MDS-matriisia ja osoittivat mahdollisuuden parantaa Whirlpoolin vastustuskykyä differentiaalista kryptausanalyysiä vastaan . He ehdottivat myös 224 ehdokasta uuteen MDS-matriisiin. Tästä luettelosta Whirlpoolin kirjoittajat valitsivat laitteistoon helpoimmin toteutetun vaihtoehdon.
Avaimen lisääminenAvainten summausfunktio on tilan ja avainmatriisien bittikohtainen yhteenlasku ( XOR ) :
Pyöreät vakiotJokainen kierros käyttää vakiomatriisia siten, että:
Tämä osoittaa, että matriisin ensimmäinen rivi on tulosta korvauslohkon soveltamisesta tavunumeroihin .
Loput 7 riviä ovat nollia.
Pyöreä funktioJokaisella kierroksella kierrosfunktio on yhdistelmämuunnos , jonka parametri on avainmatriisi . Pyöreä toiminto on kuvattu seuraavasti:
Jokaisella kierroksella tarvitaan 512-bittinen salausavain . Tämän ongelman ratkaisemiseksi monet algoritmit ottavat käyttöön niin sanotun avaimen laajennusmenettelyn . Whirlpoolissa avainlaajennus toteutetaan seuraavasti:
Siten tunnetusta avaimesta tuotetaan vaadittu näppäinsarja jokaiselle lohkosalauksen kierrokselle .
Erityinen 512-bittinen lohkosalaus käyttää 512-bittistä avainta parametrina ja suorittaa seuraavan muunnossarjan:
jossa avaimet luodaan yllä kuvatulla avaimenlaajennusmenettelyllä . Whirlpool - hajautusfunktiossa kierrosten määrä on .
Whirlpoolin, kuten minkä tahansa muun tiivistefunktion , on tiivistettävä mielivaltaisen pituinen viesti. Koska sisäinen salauslohko toimii 512-bittisten syöttöviestien kanssa, alkuperäinen viesti on jaettava 512-bittisiksi lohkoiksi. Tässä tapauksessa viimeinen lohko, joka sisältää viestin lopun, voi olla epätäydellinen.
Tämän ongelman ratkaisemiseksi Whirlpool käyttää Merkle-Damgor-syöttöviestin lisäysalgoritmia . Viestin valmistumisen tulos on viesti, jonka pituus on 512:n kerrannainen. Olkoon alkuperäisen viestin pituus. Sitten se selviää useassa vaiheessa:
Täydennetty viesti on kirjoitettu muodossa
ja jaettu 512-bittisiksi lohkoiksi jatkokäsittelyä varten.
Whirlpool käyttää Preneel-
täytetyn viestin lohkot salataan peräkkäin lohkosalauksella :
missä ( eng. alustusvektori , alustusvektori ) on 512-bittinen merkkijono, joka on täytetty luvulla "0".
Viestitiivistelmä on pakkausfunktion lähtöarvo , joka muunnetaan takaisin 512-bittiseksi merkkijonoksi:
Hajautusfunktion sanotaan olevan kryptografisesti turvallinen , jos se täyttää kolme perusvaatimusta, joihin useimmat salausfunktioiden sovellukset perustuvat : peruuttamattomuus , tyypin 1 törmäyskestävyys ja tyypin 2 törmäyskestävyys .
Antaa olla 512-bittisen Whirlpool - tiivisteen mielivaltainen bittimerkkijono . Whirlpoolin kirjoittajat väittävät, että heidän luomansa hash-funktio täyttää seuraavat kryptografisen vahvuuden vaatimukset :
Whirlpoolin kirjoittajat lisäsivät huomautuksen tähän lausuntoon:
Nämä lausunnot johtuvat merkittävästä turvamarginaalista kaikkia tunnettuja hyökkäyksiä vastaan. Ymmärrämme kuitenkin, että on mahdotonta antaa ei-spekulatiivisia lausuntoja tuntemattomista asioista.
Tähän mennessä WHIRLPOOL on vastustuskykyinen kaikentyyppisille kryptausanalyysille . Whirlpoolin kahdeksan vuoden olemassaolon aikana ei ole kirjattu yhtään hyökkäystä sitä vastaan.
Kuitenkin vuonna 2009 julkaistiin uusi menetelmä hyökätä hash-funktioihin - The Rebound Attack [2] [3] . Uuden hyökkäyksen ensimmäiset "marsut" olivat hash-funktiot Whirlpool ja Grøstl . Suoritetun krypta -analyysin tulokset on esitetty taulukossa.
hash-toiminto | Kierrosten lukumäärä | Monimutkaisuus | Vaadittu määrä muistia | Törmäystyyppi |
---|---|---|---|---|
Whirlpool | törmäys | |||
puolivapaa törmäys | ||||
puolivapaa lähes törmäys | ||||
Grøstl-256 | puolivapaa törmäys |
Tutkimuksen tekijät käyttivät seuraavia käsitteitä ja termejä:
Törmäystyypit : _
Kuten taulukosta näkyy, onnistuimme synnyttämään törmäyksen Whirlpoolille vain sen "leikatulla" 4,5 kierroksen versiolla. Lisäksi tarvittavien laskelmien monimutkaisuus on melko korkea.
Whirlpool on vapaasti käytettävissä oleva hash-toiminto . Siksi sitä käytetään laajasti avoimen lähdekoodin ohjelmistoissa . Tässä on joitain esimerkkejä Whirlpoolin käytöstä:
Mukavuussyistä Whirlpool-hajautusarvon 512 bittiä (64 tavua) esitetään usein 128-numeroisena heksadesimaalilukuna.
Kuten edellä mainittiin, algoritmiin on tehty kaksi muutosta vuoden 2000 julkaisun jälkeen. Alla on esimerkkejä tiivisteistä, jotka on laskettu ASCII - tekstistä : Nopea ruskea kettu hyppää laiskan koiran pangramin yli kaikille kolmelle Whirlpoolin versiolle:
Whirlpool-0("Nopea ruskea kettu hyppää laiskan koiran yli") = 4F8F5CB531E3D49A61CF417CD133792CCFA501FD8DA53EE368FED20E5FE0248C 3A0B64F98A6533CEE1DA614C3A8DDEC791FF05FEE6D971D57C1348320F4EB42D Whirlpool-T("Nopea ruskea kettu hyppää laiskan koiran yli") = 3CCF8252D8BBB258460D9AA999C06EE38E67CB546CFFCF48E91F700F6FC7C183 AC8CC3D3096DD30A35B01F4620A1E3A20D79CD5168544D9E1B7CDF49970E87F1 Whirlpool("Nopea ruskea kettu hyppää laiskan koiran yli") = B97DE512E91E3828B40D2B0FDCE9CEB3C4A71F9BEA8D88E75C4FA854DF36725F D2B52EB6544EDCACD6F8BEDDFEA403CB55AE31F03AD62A5EF54E42EE82C3FB35Jopa pieni muutos viestin alkuperäisessä tekstissä (tässä tapauksessa yksi kirjain korvataan: merkki "d" korvataan merkillä "e") johtaa täydelliseen muutokseen hashissa :
Whirlpool-0("Nopea ruskea kettu hyppää laiskan egon yli") = 228FBF76B2A93469D4B25929836A12B7D7F2A0803E43DABA0C7FC38BC11C8F2A 9416BBCF8AB8392EB2AB7BCB565A64AC50C26179164B26084A253CAF2E012676 Whirlpool-T("Nopea ruskea kettu hyppää laiskan egon yli") = C8C15D2A0E0DE6E6885E8A7D9B8A9139746DA299AD50158F5FA9EECDDEF744F9 1B8B83C617080D77CB4247B1E964C2959C507AB2DB0F1F3BF3E3B299CA00CAE3 Whirlpool("Nopea ruskea kettu hyppää laiskan egon yli") = C27BA124205F72E6847F3E19834F925CC666D0974167AF915BB462420ED40CC5 0900D85A1F923219D832357750492D5C143011A76988344C2635E69D06F2D38CMerkkien lisääminen merkkijonoon, merkkijonojen yhdistäminen ja muut muutokset vaikuttavat myös tulokseen.
Esimerkkejä "nolla"-merkkijonon tiivisteistä :
Whirlpool-0("") = B3E1AB6EAF640A34F784593F2074416ACCD3B8E62C620175FCA0997B1BA23473 39AA0D79E754C308209EA36811DFA40C1C32F1A2B9004725D987D3635165D3C8 Whirlpool-T("") = 470F0409ABAA446E49667D4EBE12A14387CEDBD10DD17B8243CAD550A089DC0F EEA7AA40F6C2AAAB71C6EBD076E43C7CFCA0AD32567897DCB5969861049A0F5A Whirlpool("") = 19FA61D75522A4669B44E39C1D2E1726C530232130D407F89AFEE0964997F7A7 3E83BE698B288FEBCF88E3E03C4F0757EA8964E59B63D93708B138CC42A66EB3Suoritusaika | Koodi | Tulos |
---|---|---|
PHP 5.0 | echo hash('whirlpool', 'testi'); | b913d5bbb8e461c2c5961cbe0edcdadfd29f068225ceb37da6defcf89849368f 8c6c2eb6a4c4ac75775d032a0ecfdfe8550573062b653fe92fc7b8fb3b7be8d6 |
rubiini | asettaa Whirlpool.calc_hex('test') | b913d5bbb8e461c2c5961cbe0edcdadfd29f068225ceb37da6defcf89849368f 8c6c2eb6a4c4ac75775d032a0ecfdfe8550573062b653fe92fc7b8fb3b7be8d6 |
Hash-funktiot | |
---|---|
yleinen tarkoitus | |
Kryptografinen | |
Avainten luontitoiminnot | |
Tarkista numero ( vertailu ) | |
Hashes |
|