Az SHA-2 ( Secure Hash Algorithm ) egy hash függvénycsalád , amelyet az Egyesült Államok Nemzetbiztonsági Ügynöksége (NSA) tervezett, az SHA-1 és SHA-0 függvények mintájára , amelyek maguk is erősen inspirálták Ron Rivest MD4 funkcióját . (amely párhuzamos MD5-t adott ). Amint azt a Nemzeti Szabványügyi és Technológiai Intézet (NIST) leírta , magában foglalja az SHA-256 és SHA-512 függvényeket, amelyek algoritmusai hasonlóak, de különböző szóméretekkel működnek (32 bit az SHA-256-nál és 64 bit az SHA-512-nél. ), Az SHA-224 és az SHA-384, amelyek lényegében az előzőek csonka kimenettel rendelkező változatai, és újabban az SHA-512/256 és SHA-512/224, amelyek az SHA-512 csonka változatai. Az utolsó utótag a hash bitjeinek számát jelzi.
Az SHA-2 család, az SHA-256, az SHA-384 és az SHA-512 algoritmusait az SHA1 vállalat az Egyesült Államok szokásos szövetségi kormányaként ( Federal Information Processing Standard ) írja le és publikálja a FIPS 180 -2-ben (Secure Hash Standard) 2002-től (a hozzászólások előkészítése 2001-ben készült). Az SHA-224 funkció egy kicsit később kerül hozzáadásra. A legújabb verzió a mai napig, FIPS 180-4 (Secure Hash szabvány) időpontokat2012. március és hozzáteszi az SHA-512/256 és az SHA-512/224 funkciókat.
2005 - ben kiemelték az SHA-1 biztonsági problémáit : van egy elméleti támadás az ütközések kutatásához, amely lényegesen gyorsabb, mint a hash funkciók elleni általános születésnapi támadás . Noha az SHA-2 algoritmus megegyezik az SHA-1 algoritmusával, ezek a támadások jelenleg nem terjeszthetők ki az SHA-2-re. A NIST azonban versenyt tartott egy új hash függvény, az SHA-3 kiválasztására . 2012 végén a verseny eredményeként egy új funkciócsaládot választottak, amelynek kialakítása nagyon különbözik az SHA-1-től és az SHA-2-től. Az új funkciócsaládot egy másik lehetséges választásként mutatják be, ez legalábbis egyelőre nem kérdőjelezi meg az SHA-2 használatát.
Mint minden hash függvény, az SHA-2 funkciók is tetszőleges méretű üzenetet vesznek be bemenetként, annak korlátozásával (minden elméleti értékkel), és eredményt (úgynevezett " hash ", hash , kondenzátum vagy akár ujjlenyomat ...) rögzített méret. A kivonat méretét az utótag jelzi: 224 bit az SHA-224, 256 bit az SHA-256, 384 bit az SHA-384 és 512 bit az SHA-512 esetében.
Az SHA-2 család algoritmusai nagyon hasonlóak, alapvetően két különböző funkció létezik, az SHA-256 és az SHA-512, a többiek az egyik vagy a másik variációi. Az SHA-256 és SHA-512 függvények felépítése azonos, de különböznek a használt szavak és blokkok méretétől. Ez a szerkezet meglehetősen hasonlít az SHA-1 szerkezetéhez, de egy kicsit összetettebb és elkerüli bizonyos ismert gyengeségeket. Általánosabban kapcsolódik a hash funkciók családjához, amelyet Ron Rivest MD4 és MD5 ihletett . Primitívnek találjuk az n rögzített nagyságú egész számok összeadását , azaz a modulo 2 n összeadást , egy nemlineáris műveletet (a lineáris algebra értelmében ) a Booleans F 2 területén , valamint a bitenkénti műveleteket (xor és mások).
A család minden funkciójához hasonlóan (kivéve az SHA-3-at, amely szivacsfunkción alapul ) iteratív sémát követnek, amely a Merkle-Damgård felépítését követi (véglegesítési művelet nélkül). Az iterált tömörítési funkciónak két fix méretű bemenete van, a második bemenet ugyanolyan méretű, mint a függvény kimenete:
A tömörítési függvény bemenetei fel vannak osztva
A tömörítési funkció ugyanazt a műveletet többször megismétli, az egyik kerek vagy kerek , 64 kör az SHA-256, az SHA-80 fordulat 512-ig. Minden fordulat primitív módon magában foglalja a rögzített méretű egész számok összeadását, azaz a modulo 2 32 vagy a modulo 2 64 összeadást , a bitenkénti műveleteket: logikai műveleteket, eltolásokat a bitek egy részének elvesztésével és körkörös eltolásokkal , és előre definiált konstansokat. , az inicializáláshoz is használják.
Feldolgozás előtt az üzenetet kitöltéssel töltik ki, így annak hossza a tömörítési függvény által feldolgozott blokk méretének a többszöröse. A párnázás magában foglalja a feldolgozandó szó hosszát (bináris formában): ez a Merkle-Damgård ( (en) Merkle-Damgård erősítése ) megerősítése , amely lehetővé teszi a hash-funkció ütközésekkel szembeni ellenállásának csökkentését ehhez. a tömörítési függvény. Ezt a hosszúságot a párnázás végén tárolják az SHA-256 esetében 64 bit (mint az SHA-1 esetében), az SHA-512 esetében pedig több mint 128 bitet, ami „korlátozza” a továbbítandó üzenetek méretét. az SHA-256 (és az SHA-224) esetében 2 64 bit, az SHA-512 (és az SHA-384) esetében pedig 2128 bit.
Az SHA-256 funkció 2002-ben az információfeldolgozás szövetségi szabványává válik ( a NIST FIPS ). 256 bites kivonatot készít . Az SHA-256 jellemzői a következők:
Az algoritmus két szakaszra bontható
a, b, c, ..., h = működő változók (ebben az esetben w-bites szavak), amelyeket a hash kiszámításakor használnak
= a # i hash érték. a hash kezdeti értéke. az utolsó hash érték.
= szó (w bit) # j hash értéke # i, ahol az i hash érték legjelentősebb szava (balra).
= a hash kiszámításánál használt iteratív állandók a t értéke szerint
k = az üzenethez hozzáadott 0-k száma az előfeldolgozás során (komplementer)
l = az M üzenet hossza, bitekben
m = a blokkban található bitek száma, azaz 512 bit
M = a feldolgozandó üzenet = blokk n ° i (m bit), üzenet M = szó (w bit) n ° j, blokk (m bit) n ° i, üzenet M
n = a szóra alkalmazandó eltolási vagy forgatási bitek száma, ha bináris függvénnyel társul
N = blokkok száma az M üzenetben szereplő m bitek
T- kiegészítése után T = ideiglenes változó , w-bites szó, amelyet hash kiszámításához használunk
w = a szóban lévő bitek száma, azaz 32 bit. = az üzenetből levezetett táblázat sz
Az itt használt hexadecimális jelölés a következő lesz:
példa:= bináris művelet ÉS = bináris művelet OR = bináris művelet XOR = bináris kiegészítés = összeadás modulo = bináris eltolás balra, ahol úgy kapjuk meg, hogy eltávolítjuk az x n bal bal bitjét, és n nullát adunk jobbra. = bináris eltolás jobbra, ahol úgy kapjuk meg, hogy eltávolítjuk az x n jobb bitjét, és n nullát adunk balra.
Az alkalmazott műveletek a következők:
Ez a szakasz a kivonatértékek kiszámításakor használt funkciókat ismerteti. Az SHA-256 6 logikai függvényt használ az x, y, z megjegyzéssel ellátott 32 bites szavakon. Ezeknek a függvényeknek az eredménye egy új 32 bites szókimenet.
Állandóak
Az SHA-256 a 32 bites szavak 64 állandó értékét használja, megjegyezve . Ezek a számok jelzik az első 32 bit a tizedes rész a harmadfokú gyökerei az első 64 fő számokat . A következő értékeket hexadecimális jelöléssel fejezzük ki (16. alap).
0x428a2f98 | 0x71374491 | 0xb5c0fbcf | 0xe9b5dba5 | 0x3956c25b | 0x59f111f1 | 0x923f82a4 | 0xab1c5ed5 | |
0xd807aa98 | 0x12835b01 | 0x243185be | 0x550c7dc3 | 0x72be5d74 | 0x80deb1fe | 0x9bdc06a7 | 0xc19bf174 | |
0xe49b69c1 | 0xefbe4786 | 0x0fc19dc6 | 0x240ca1cc | 0x2de92c6f | 0x4a7484aa | 0x5cb0a9dc | 0x76f988da | |
0x983e5152 | 0xa831c66d | 0xb00327c8 | 0xbf597fc7 | 0xc6e00bf3 | 0xd5a79147 | 0x06ca6351 | 0x14292967 | |
0x27b70a85 | 0x2e1b2138 | 0x4d2c6dfc | 0x53380d13 | 0x650a7354 | 0x766a0abb | 0x81c2c92e | 0x92722c85 | |
0xa2bfe8a1 | 0xa81a664b | 0xc24b8b70 | 0xc76c51a3 | 0xd192e819 | 0xd6990624 | 0xf40e3585 | 0x106aa070 | |
0x19a4c116 | 0x1e376c08 | 0x2748774c | 0x34b0bcb5 | 0x391c0cb3 | 0x4ed8aa4a | 0x5b9cca4f | 0x682e6ff3 | |
0x748f82ee | 0x78a5636f | 0x84c87814 | 0x8cc70208 | 0x90befffa | 0xa4506ceb | 0xbef9a3f7 | 0xc67178f2 |
Ez a művelet három lépésben zajlik: töltse ki az M üzenetet, ossza fel az eredményt blokkokra és inicializálja a kivonatolási értékeket.
LekvárEz magában foglalja az M üzenet kitöltését úgy, hogy annak mérete 512 bit többszöröse legyen. A tölteléket használja a bináris ábrázolása egész szám L , amely a hossza bitben az üzenet M ( Merkle-Damgård megerősítés ). Ehhez hozzáadjuk egymás után:
Példák:
Az elkészült üzenet N 512 bites blokkra van felosztva . Ezután minden 512 bites blokkot 16, 32 bites szóra osztunk, megjegyezzük .
InicializálásA következő nyolc változóhoz a kezdeti értékeket az alábbiak szerint rendeljük hozzá:
Ehhez a kezeléshez fogjuk használni
Az M N blokkját egymás után dolgozzuk fel a következő lépések szerint
I = 1-től N-ig
{
}
Miután megismételte a fenti négy lépést az M üzenet N blokkjaira (vagyis feldolgozás után ), az M 256 bites emésztését az értékek összefűzésével kapjuk meg
Az SHA-224 funkciót először 2004-ben adták ki. A kimenet (hash, “hash” vagy hash) 224 bit . Kifejezetten olyan ujjlenyomat létrehozására tervezték, amelynek mérete négy, egyenként 56 bites DES billentyűnek felel meg . Az algoritmus az SHA-256 algoritmusa, csak eltérésekkel
Az SHA-512 funkció az SHA-256-mal együtt jelent meg, és így válik 2002-ben az információfeldolgozás szövetségi szabványává ( FIPS a NIST ). 512 bites kivonatot készít .
Az algoritmus nagyon hasonlít az SHA-256 algoritmusához, de fontos különbség van a feldolgozott adatok méretében: a blokk mérete 1024 bit (nem 512 bit), és az algoritmus 64 bites szavakon (a szó-memória) működik sok modern processzor mérete). Különösen az ezeken a processzorokon optimalizált számtani műveleteket hajtják végre 64 biten.
Az algoritmus felépítése megegyezik az SHA-256 szerkezetével, de
Az SHA-384 funkció megjelent az SHA-256 és az SHA-512 mellett. 384 bites kivonatot készít . Az SHA-512 algoritmusa csak eltéréseket mutat
Az SHA-256 lett az új ajánlott szabvány a kriptográfiai hasításhoz az MD5 és SHA-1 elleni támadások után . Az SHA család többi tagja viszonylag titkosítatlan volt az SHA-0 és az SHA-1 - hez képest . A 2003 , Helena Handschuh és Henri Gilbert elemzést tett közzé SHA-256, 384 és 512. A tanulmány azt mutatja, hogy más tagjai SHA nem érinti a támadásokat, hogy már bizonyított más hash függvények ( MD4 , MD5 és SHA-1 többek között). A lineáris kriptanalízis és differenciál nem érvényes.
Másrészt a két kriptológus kiemelte a módosított verziók jelentős gyengeségeit. Ha megváltoztatjuk az állandókat vagy az inicializálási paramétereket, hogy szimmetrikusak legyenek, miközben a moduláris összeadást XOR-ra cseréljük , kapunk egy kivonatot, amely szimmetrikus ujjlenyomatot eredményez, ha a bemeneti üzenet is szimmetrikus.