SHA-3

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 3. tammikuuta 2016 tarkistetusta versiosta . tarkastukset vaativat 57 muokkausta .
SHA-3, Keccak
Kehittäjät Guido Bertoni, Joan Dymen , Mikael Pieters, Gilles Van Asche
Luotu 2008
julkaistu 2008
Edeltäjä SHA-2
Hash-koko 224, 256, 384, 512 (muuttuja, 0<d≤2 64 -1)
Kierrosten lukumäärä 24 (oletus)
Tyyppi hash-toiminto

SHA-3 ( Keccak  - lausutaan "kechak") on muuttuvapituinen hajautusalgoritmi , jonka on kehittänyt Joan Dymen , Rijndaelin toinen kirjoittaja , MMB- , SHARK- , Noekeon- , SQUARE- ja BaseKing - salausten kirjoittaja . 2. lokakuuta 2012 Keccak voitti Yhdysvaltain kansallisen standardointi- ja teknologiainstituutin järjestämän Cryptographic Algorithm Contest -kilpailun [1] . 5. elokuuta 2015 algoritmi hyväksyttiin ja julkaistiin FIPS 202 [2] [3] -standardina . Ohjelmistotuotannossa kirjoittajat vaativat 12,5 sykliä tavua kohden, kun se suoritetaan PC :ssä, jossa on Intel Core 2 -prosessori . Kuitenkin laitteistototeutuksissa Keccak osoittautui paljon nopeammaksi kuin kaikki muut finalistit. [neljä]

SHA-3-algoritmi on rakennettu kryptografisen sienen periaatteelle (tätä salausalgoritmien rakennetta ehdottivat aiemmin Keccak-algoritmin kirjoittajat) [5] .

Historia

Vuosina 2004–2005 hyökättiin useisiin hajautusalgoritmeihin, mukaan lukien vakavat hyökkäykset National Institute of Standards and Technologyn (NIST) SHA-1-algoritmia vastaan . Vastauksena NIST järjesti avoimia työpajoja ja julkaisi 2. marraskuuta 2007 kilpailun uuden hajautusalgoritmin kehittämiseksi. 2. lokakuuta 2012 Keccak-algoritmi voitti kilpailun ja standardisoitiin uudeksi SHA-3-algoritmiksi [6] . 5. elokuuta 2015 algoritmi hyväksyttiin ja julkaistiin FIPS 202 [2] [3] -standardina .

Algoritmin ovat kehittäneet Guido Bertoni , Joan Dymen , Gilles Van Asche STMicroelectronicsista ja Mikael Pieters NXP :stä [ 7] .

Algoritmi perustuu aikaisempiin Panaman ja RadioGatúnin [8] hash-funktioihin . Dimen ja Craig Clapp kehittivät Panaman vuonna 1998, ja Dimen, Peters ja Van Asche toteuttivat RadioGatúnin Panaman perusteella vuonna 2006 [8] .

Kilpailun aikana kilpailijat saivat tehdä muutoksia algoritmeihinsa korjatakseen havaitut ongelmat. Keccak-algoritmiin tehdyt muutokset [9] [10] :

Algoritmi

SHA-3- perheen hash-funktiot perustuvat kryptografisen sienen [5] rakentamiseen , jossa tiedot ensin "absorboituu" sieneen, jossa alkuperäinen viesti altistetaan monikierroksisille permutaatioille , sitten tulos "puristuu" pois sienestä. "Soak"-vaiheessa sanomalohkot summataan modulo 2 tilan osajoukkoon, jonka jälkeen koko tila muunnetaan permutaatiofunktiolla . "Push"-vaiheen aikana lähtölohkot luetaan samasta permutaatiofunktion muokkaaman tilan osajoukosta . Sen tilan osan kokoa, joka kirjoitetaan ja luetaan, kutsutaan "nopeudeksi" ( eng. rate ) ja sitä merkitään , ja sen osan kokoa, johon tulo/lähtö ei koske, kutsutaan "kapasiteetiksi" ( eng . . kapasiteetti ) ja sitä merkitään .

Hash-funktion arvon hankkimisalgoritmi voidaan jakaa useisiin vaiheisiin [11] :

Koska tila sisältää ylimääräisiä bittejä, algoritmi kestää sanoman pidentämishyökkäyksen , jolle SHA-1- ja SHA-2- algoritmit ovat alttiita .

SHA-3:ssa tila on 5 × 5 sanan pituinen joukko = 64 bittiä, yhteensä 5 × 5 × 64 = 1600 bittiä. Myös Keccakissa voidaan käyttää pituuksia, jotka ovat yhtä suuria kuin 2:n pienemmät potenssit ( = 1 - = 32).

Täydennys

Jotta alkuperäinen viesti M voidaan jakaa r -pituisiin lohkoihin , tarvitaan täyttö . SHA-3 käyttää pad10*1 [11] -mallia: viestiin lisätään 1, jota seuraa 0 tai useampi nollabittiä ( r-1 asti ) ja 1 lopussa.

r-1 nollabittiä voidaan lisätä, kun viimeinen viestilohko on r-1 bittiä pitkä. Tämä lohko on pehmustettu yhdellä, seuraava lohko koostuu r-1 nollia ja yksi.

Myös kaksi 1-bittiä lisätään, jos alkuperäisen viestin M pituus on jaollinen r :llä [11] . Tällöin viestiin lisätään lohko, joka alkaa ja päättyy ykkösiin, joiden välissä on r-2 nollabittiä. Tämä on tarpeen, jotta viestille, joka päättyy bittisarjaan, kuten täytetoiminnossa, ja viestille, jossa ei ole näitä bittejä, hash-arvot ovat erilaiset.

Ensimmäinen 1 bitti on välttämätön, jotta tiivistefunktion tulokset sanomista, jotka eroavat lopussa usealla nollabitillä, ovat erilaisia ​​[11] .

Permutaatiofunktio

SHA-3:ssa käytetty permutaatiofunktio sisältää poissulkevan OR (XOR) , bittikohtaisen AND (AND) ja bittikohtaisen negation (NOT) . Funktio on määritelty merkkijonoille pituus-potenssi 2 . SHA-3:n päätoteutuksessa ( ).

Tila voidaan esittää kolmiulotteisena taulukkona , jonka koko on 5 × 5 × . Tällöin taulukon elementti on tilarivin bitti .

Toiminto sisältää useita vaiheita: , , , , , jotka suoritetaan useissa kierroksissa [11] . Jokaisessa vaiheessa merkitsemme syöttötaulukkoa A, lähtötaulukkoa A'.

Vaihe

Kaikille ja , niin että , , laitamme

Kaikille , , , _

Vaihe

Kaikille , niin että

Anna alkuun . 0-23 :

  1. Kaikille , niin että

Vaihe

Kaikille sellaisille , _

Vaihe

Kaikille sellaisille , _

Vaihe

Esittelemme lisäfunktion , jossa syöte on kokonaisluku ja tulos on bitti.

Algoritmi
  1. Jos , palautetaan 1
  2. Päästää
  3. I 1 - t mod 255:
    1. R = 0 || R
  4. Palauttaa
Algoritmi

 - pyöreä numero.

  1. Kaikille sellaisille , _
  2. Antaa olla pituudeltaan nollalla täytetty  joukko .
  3. 0 - :
  4. Kaikille , niin että

Permutaatioalgoritmi

  1. Merkkijonon kääntäminen taulukoksi
  2. alkaen alkaen _
  3. Matriisin muuntaminen pituiseksi merkkijonoksi

Mielivaltaisen pituisten viestien tiivistys

Algoritmin pakkausfunktion perustana on funktio f, joka suorittaa algoritmin sisäisen tilan sekoittamisen. Tila (merkitkäämme sitä A:ksi) esitetään 5×5 - taulukona , jonka elementit ovat 64-bittisiä sanoja, jotka on alustettu nollabitillä (eli tilan koko on 1600 bittiä). Funktio f suorittaa 24 kierrosta, joista jokaisessa suoritetaan seuraavat toiminnot:

C[x] = A[x, 0] A[x, 1] A[x, 2] A[x, 3] A[x, 4], x = 0…4; D[x] = C[x - 1] (С[x + 1] >>> 1), x = 0…4; A[x, y] = A[x, y] D[x], x = 0…4, y = 0…4; B[y, 2x + 3y] = A[x, y] >>> r[x, y], x = 0…4, y = 0…4; A[x, y] = B[x, y] (~B[x + 1, y] & B[x + 2, y]), x = 0…4, y = 0…4,

Missä:

B  on tilataulukko, joka on rakenteeltaan samanlainen kuin tilataulukko; C ja D  ovat väliaikaisia ​​taulukoita, jotka sisältävät kumpikin viisi 64-bittistä sanaa; r  on matriisi, joka määrittää syklisen siirron määrän kullekin tilasanalle; ~x  on x : n bittikohtainen komplementti ; ja taulukon indeksien toiminnot suoritetaan modulo 5.

Yllä olevien operaatioiden lisäksi jokaisella kierroksella XOR-operaatio asettaa myös pyöreän vakion sanalle A[0, 0].

Ennen kuin pakkaustoiminto suoritetaan, alkuperäisen viestin XORing-fragmenttien toiminta alkutilan fragmenttien kanssa on päällekkäin. Tulos käsitellään f -funktiolla . Tämä peitto yhdessä kullekin syöttödatalohkolle suoritetun pakkaustoiminnon kanssa muodostaa kryptografisen sienen "absorboivan" vaiheen.

On syytä huomata, että f -toiminto käyttää vain toimintoja, jotka kestävät sivukanavan tietovuotohyökkäyksiä.

Tuloksena oleva hash-arvo lasketaan kryptografisen sienen puristusvaiheessa, joka myös perustuu edellä kuvattuun f -funktioon . Mahdolliset hash-koot ovat 224, 256, 384 ja 512 bittiä.

Asetukset

Alkuperäisessä Keccak-algoritmissa on monia säädettäviä parametreja [11] , jotta saadaan aikaan optimaalinen salausvoimakkuuden ja nopeuden tasapaino algoritmin tietylle sovellukselle tietyllä alustalla. Säädettävät arvot ovat: tietolohkon koko, algoritmin tilan koko, f() -funktion kierrosten lukumäärä ja muut.

National Institute of Standards and Technology -hajautuskilpailun aikana osallistujilla oli oikeus muokata algoritmejaan ongelmien ratkaisemiseksi. Keccakiin tehtiin siis joitain muutoksia: kierrosten määrää nostettiin 18:sta 24:ään turvallisuusmarginaalin lisäämiseksi.

Keccakin kirjoittajat ovat perustaneet useita palkintoja saavutuksista tämän algoritmin kryptausanalyysissä .

Lopulliseksi SHA-3-standardiksi hyväksytyssä algoritmin versiossa on muutamia pieniä eroja Keccakin alkuperäiseen kilpailuun jättämiseen verrattuna. Erityisesti joitain parametreja rajoitettiin (hitaat tilat c=768 ja c=1024 poistettiin), mukaan lukien suorituskyvyn lisääminen [12] [13] [14] [15] . Standardi esitteli myös "funktiot laajennetulla tuloksella" (XOF, Extendable Output Functions) SHAKE128 ja SHAKE256, joille tuli tarpeelliseksi täydentää tiivistettyä viestiä 2 tai 4 bitin " liitteellä " funktion tyypistä riippuen. .

Toiminto Kaava
SHA3-224( M ) Keccak[448]( M ||01, 224)
SHA3-256( M ) Keccak[512]( M ||01, 256)
SHA3-384( M ) Keccak[768]( M ||01, 384)
SHA3-512( M ) Keccak[1024]( M ||01, 512)
SHAKE128( M , d ) Keccak[256]( M ||1111, d )
SHAKE256( M , d ) Keccak[512]( M ||1111, d )

Lisäominaisuudet

Joulukuussa 2016 Yhdysvaltain kansallinen standardointi- ja teknologiainstituutti julkaisi uuden asiakirjan, NIST SP.800-185 [16] , jossa kuvataan SHA-3:een perustuvia lisäominaisuuksia:

Toiminto Kuvaus
cSHAKE128( X , L , N , S ) SHAKEn parametroitu versio
cSHAKE256( X , L , N , S )
KMAC128( K , X , L , S ) Keccakiin perustuva jäljitelmälisäosa
KMAC256( K , X , L , S )
KMACXOF128( K , X , L , S )
KMACXOF256( K , X , L , S )
TupleHash128( X , L , S ) Merkkijonojen tiivistäminen _
TupleHash256( X , L , S )
TupleHashXOF128( X , L , S )
TupleHashXOF256( X , L , S )
ParallelHash128( X , B , L , S ) Keccak-pohjainen rinnakkainen hash-funktio
ParallelHash256( X , B , L , S )
ParallelHashXOF128( X , B , L , S )
ParallelHashXOF256( X , B , L , S )

Testaa vektoreita

Eri hash-muunnelmien arvot tyhjästä merkkijonosta.

SHA3-224("") 6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7 SHA3-256("") a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a SHA3-384("") 0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004 SHA3-512("") a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500b68c3e9402c3ac558f50068d SHAKE128("", 256) 7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26 SHAKE256("", 512) 46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc64b27b27b592f6fc64b8

Pieni muutos viestissä aiheuttaa suuren muutoksen hash-arvossa lumivyöryefektin vuoksi , kuten seuraavissa esimerkeissä näkyy:

SHA3-224(" Nopea ruskea kettu hyppää laiskan koiran yli ") d15dadceaa4d5d7bb3b48f446421d542e08ad8887305e28d58335795 SHA3-224 ("Nopea ruskea kettu hyppää laiskan koiran yli . ") 2d0708903833afabdd232a20201176e8b58c5be8a6fe74265ac54db0 SHA3-256 ("Nopea ruskea kettu hyppää laiskan koiran yli") 69070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04 SHA3-256 ("Nopea ruskea kettu hyppää laiskan koiran yli . ") a80f839cd4f83f6c3dafc87feae470045e4eb0d366397d5c6ce34ba1739f734d SHA3-384 ("Nopea ruskea kettu hyppää laiskan koiran yli") 7063465e08a93bce31cd89d2e3ca8f602498696e253592ed26f07bf7e703cf328581e1471a7ba7ab119b1a9ebdf8be41 SHA3-384 ("Nopea ruskea kettu hyppää laiskan koiran yli . ") 1a34d81695b622df178bc74df7124fe12fac0f64ba5250b78b99c1273d4b080168e10652894ecad5f1f4d5b965437fb9 SHA3-512 ("Nopea ruskea kettu hyppää laiskan koiran yli") 01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fc0f5940d SHA3-512 ("Nopea ruskea kettu hyppää laiskan koiran yli . ") - SHAKE128("Nopea ruskea kettu hyppää laiskan koiran yli", 256) f4202e3c5852f9182a0430fd8144f0a74b95e7417ecae17db0f8cfeed0e3e66e SHAKE128("Nopea ruskea kettu hyppää laiskan yli " , 256) 853f4538be0db9621a6cea659a06c1107b1f83f02b13d18297bd39d7411cf10c

Cryptanalysis

Kryptusanalyysin tulokset kilpailun aikana [4] .
Kohde Hyökkäystyyppi Poistu Vaihtoehto CF-puhelu Muisti
hash-toiminto törmäys 160 r = {240, 640, 1440},

c = 160

1,2 kierrosta

hash-toiminto Prototyypin löytäminen 80 r = {240, 640, 1440},

c = 160

1,2 kierrosta

Permutaatiot hyökkäys-syrjittäjä Kaikki 24 kierrosta
Permutaatiot erilainen ominaisuus Kaikki 8 kierrosta
hash-toiminto hyökkäys-syrjittäjä 224, 256 4 kierrosta
hash-toiminto törmäys 224, 256 2 kierrosta
hash-toiminto Toisen prototyypin löytäminen 224, 256 2 kierrosta
hash-toiminto Toisen prototyypin löytäminen 512 6 kierrosta
hash-toiminto Toisen prototyypin löytäminen 512 7 kierrosta
hash-toiminto Toisen prototyypin löytäminen 512 8 kierrosta
hash-toiminto törmäys 224, 256 4 kierrosta

Muistiinpanot

  1. NIST valitsee Secure Hash Algorithm (SHA-3) -kilpailun voittajan . Haettu 3. lokakuuta 2012. Arkistoitu alkuperäisestä 5. lokakuuta 2012.
  2. 1 2 NIST julkaisee SHA-3 Cryptographic Hash Standardin . Haettu 21. tammikuuta 2016. Arkistoitu alkuperäisestä 17. elokuuta 2015.
  3. 1 2 NIST Manuscript Julkaisuhaku . Haettu 21. tammikuuta 2016. Arkistoitu alkuperäisestä 12. elokuuta 2015.
  4. ↑ 1 2 Shu-jen Chang, Ray Perlner, William E. Burr, Meltem Sonmez Turan, John M. Kelsey. Kolmannen kierroksen raportti SHA-3 Cryptographic Hash Algorithm Competition -kilpailusta . - doi : 10.6028/nist.ir.7896 .
  5. ↑ 1 2 Keccak Team  . keccak.tiimi. Käyttöpäivä: 15. joulukuuta 2017. Arkistoitu alkuperäisestä 16. joulukuuta 2017.
  6. SHA-3 Project - Hash Functions | CSRC . csrc.nist.gov. Haettu 7. marraskuuta 2017. Arkistoitu alkuperäisestä 20. marraskuuta 2017.
  7. NIST valitsee Secure Hash Algorithm (SHA-3) -kilpailun voittajan . NIST (2. lokakuuta 2012). Haettu 2. lokakuuta 2012. Arkistoitu alkuperäisestä 30. huhtikuuta 2017.
  8. ↑ 1 2 Guido Bertoni, Joan Daemen, Michaël Peeters, Gilles Van Assche. Tie Panamasta Keccakiin RadioGatúnin kautta  // Symmetric Cryptography / Helena Handschuh, Stefan Lucks, Bart Preneel, Phillip Rogaway. - Dagstuhl, Saksa: Schloss Dagstuhl - Leibniz-Zentrum fuer Informatik, Saksa, 2009. Arkistoitu alkuperäisestä 22. joulukuuta 2017.
  9. Keccak  Team . keccak.tiimi. Haettu 12. marraskuuta 2017. Arkistoitu alkuperäisestä 13. marraskuuta 2017.
  10. Keccak  Team . keccak.tiimi. Haettu 12. marraskuuta 2017. Arkistoitu alkuperäisestä 13. marraskuuta 2017.
  11. ↑ 1 2 3 4 5 6 Morris J. Dworkin. SHA-3-standardi: permutaatioon perustuvat hajautusfunktiot ja laajennettavat tulosteet . - doi : 10.6028/nist.fips.202 .
  12. Onko Keccak SHA-3? (1. lokakuuta 2013). Käyttöpäivä: 20. joulukuuta 2013. Arkistoitu alkuperäisestä 30. tammikuuta 2014.
  13. Mitä ihmettä NISTin salausstandardin SHA-3 kanssa tapahtuu?  (englanniksi)  (24. syyskuuta 2013). Arkistoitu alkuperäisestä 25. tammikuuta 2014. Haettu 20. joulukuuta 2013.
  14. Kyllä, tämä on Keccak! (4. lokakuuta 2013). Haettu 20. joulukuuta 2013. Arkistoitu alkuperäisestä 8. joulukuuta 2013.  - Keccakin tekijöiden vastauslausunto
  15. Keccak-sienitoimintoperhe (17. tammikuuta 2011). Haettu 30. syyskuuta 2015. Arkistoitu alkuperäisestä 12. syyskuuta 2015.  — täyttöalgoritmin muutos kilpailun 3. kierroksella
  16. SHA-3:sta johdetut funktiot: cSHAKE, KMAC, TupleHash ja ParallelHash . Haettu 31. lokakuuta 2017. Arkistoitu alkuperäisestä 31. lokakuuta 2017.

Linkit

Toteutukset: