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] .
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] :
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).
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] .
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'.
Kaikille ja , niin että , , laitamme
Kaikille , , , _
Kaikille , niin että
Anna alkuun . 0-23 :
Kaikille sellaisille , _
Kaikille sellaisille , _
Esittelemme lisäfunktion , jossa syöte on kokonaisluku ja tulos on bitti.
Algoritmi- pyöreä numero.
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ä.
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 ) |
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 ) |
Eri hash-muunnelmien arvot tyhjästä merkkijonosta.
SHA3-224("") 6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7 SHA3-256("") a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a SHA3-384("") 0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004 SHA3-512("") a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500b68c3e9402c3ac558f50068d SHAKE128("", 256) 7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26 SHAKE256("", 512) 46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc64b27b27b592f6fc64b8Pieni 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) 853f4538be0db9621a6cea659a06c1107b1f83f02b13d18297bd39d7411cf10cKohde | 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 |
Toteutukset:
Hash-funktiot | |
---|---|
yleinen tarkoitus | |
Kryptografinen | |
Avainten luontitoiminnot | |
Tarkista numero ( vertailu ) | |
Hashes |
|