BLAKE (hash funkce) - BLAKE (hash function) - Wikipedia
Všeobecné | |
---|---|
Návrháři | Jean-Philippe Aumasson, Luca Henzen, Willi Meier, Raphael C.-W. Phan |
Nástupci | BLAKE2 |
Osvědčení | Finalista SHA-3 |
Detail | |
Velikosti trávení | 224, 256, 384 nebo 512 bitů |
Struktura | Konstrukce HAIFA |
Kola | 14 nebo 16 |
Rychlost | 8.4 cpb na Jádro 2 pro BLAKE-256; 7,8 cpb pro BLAKE-512 |
BLAKE je kryptografická hashovací funkce na základě Dan Bernstein je ChaCha proudová šifra, ale permutovaná kopie vstupního bloku, XORed s kulatými konstantami, je přidán před každým kolem ChaCha. Jako SHA-2, existují dvě varianty, které se liší v slovo velikost. ChaCha funguje na poli slov 4 × 4. BLAKE opakovaně kombinuje hodnotu hash 8 slov se 16 slovy zprávy, čímž zkracuje výsledek ChaCha a získá další hodnotu hash. BLAKE-256 a BLAKE-224 používat 32bitová slova a vytvářet souhrnné velikosti 256 bitů, respektive 224 bitů while BLAKE-512 a BLAKE-384 použijte 64bitová slova a vytvořte souhrnné velikosti 512 bitů, respektive 384 bitů.
The BLAKE2 hash funkce, založená na BLAKE, byla oznámena v roce 2012. The BLAKE3 hašovací funkce založená na BLAKE2 byla oznámena v roce 2020.
Dějiny
BLAKE byl předložen Soutěž o hashovací funkci NIST Jean-Philippe Aumasson, Luca Henzen, Willi Meier a Raphael C.-W. Phan. V roce 2008 bylo přihlášeno 51 účastníků. BLAKE postoupil do posledního kola složeného z pěti kandidátů, ale podlehl Keccak v roce 2012, který byl vybrán pro SHA-3 algoritmus.
Algoritmus
Jako SHA-2, BLAKE přichází ve dvou variantách: jedna, která používá 32bitová slova, používá se pro výpočet hashů s délkou až 256 bitů, a ta, která používá 64bitová slova, používá se pro výpočet hashů s délkou až 512 bitů. Transformace jádrového bloku kombinuje 16 slov vstupu se 16 pracovními proměnnými, ale mezi bloky je zachováno pouze 8 slov (256 nebo 512 bitů).
Používá tabulku 16 konstantních slov (úvodních 512 nebo 1024 bitů zlomkové části π ) a tabulka 10 permutací 16 prvků:
σ [0] = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15σ [1] = 14 10 4 8 9 15 13 6 1 12 0 2 11 7 5 3σ [2] = 11 8 12 0 5 2 15 13 10 14 3 6 7 1 9 4σ [3] = 7 9 3 1 13 12 11 14 2 6 5 10 4 0 15 8σ [4] = 9 0 5 7 2 4 10 15 14 1 11 12 6 8 3 13σ [5] = 2 12 6 10 0 11 8 3 4 13 7 5 15 14 1 9σ [6] = 12 5 1 15 14 13 4 10 0 7 6 3 9 2 8 11σ [7] = 13 11 7 14 12 1 3 9 5 0 15 4 8 6 2 10σ [8] = 6 15 14 9 11 3 0 8 12 2 13 7 1 4 10 5σ [9] = 10 2 8 4 7 6 1 5 15 11 9 14 3 12 13 0
Jádrová operace, ekvivalentní ChaCha čtvrtletí, funguje na čtyřslovém sloupci nebo úhlopříčce abeceda
, který je kombinován se 2 slovy zprávy m []
a dvě konstantní slova n []
. Provádí se 8krát za celé kolo:
j ← σ [r% 10] [2 × i] // Výpočty indexůk ← σ [r% 10] [2 × i + 1] a ← a + b + (m [j] ⊕ n [k]) // Krok 1 (se vstupem)d ← (d ⊕ a) >>> 16c ← c + d // Krok 2 (bez zadání)b ← (b ⊕ c) >>> 12a ← a + b + (m [k] ⊕ n [j]) // Krok 3 (se vstupem)d ← (d ⊕ a) >>> 8c ← c + d // Krok 4 (bez zadání)b ← (b ⊕ c) >>> 7
Ve výše uvedeném r
je číslo kola (0–13) a i
se pohybuje od 0 do 7.
Rozdíly od čtvrtkruhové funkce ChaCha jsou:
- Bylo přidáno přidání slov zprávy.
- Směr otáčení byl obrácen.
64bitová verze (která v ChaCha neexistuje) je identická, ale počet rotací je 32, 25, 16 a 11 a počet kol se zvýšil na 16.
Vylepšení
V průběhu soutěže o hashovací funkci NIST je účastníkům povoleno „vylepšovat“ jejich algoritmy tak, aby řešily objevené problémy. Změny, které byly v BLAKE provedeny, jsou: počet kol byl zvýšen z 10/14 na 14/16. To má být konzervativnější, pokud jde o bezpečnost, a přitom být rychlý.
Příklad trávení
Hodnoty hash prázdného řetězce:
BLAKE-224 ("") = 7dc5313b1c04512a174bd6503b89607aecbee0903d40a8a569c94eedBLAKE-256 ("") = 716f6e863f744b9ac22c97ec7b76ea5f5908bc5b2f67c61510bfc4751384ea7aBLAKE-384 ("") = c6cbd89c926ab525c242e6621f2f5fa73aa4afe3d9e24aed727faaadd6af38b620bdb623dd2b4788b1c8086984af8706BLAKE-512 ("") = a8cfbbd73726062df0c6864dda65defe58ef0cc52a5625090fa17601e1eecd1b628e94f396ae402a00acc9eab77b4d4c2e852aaaaa25a636d80af3fc7913ef5b8
Změna jednoho bitu způsobí změnu každého bitu na výstupu s 50% pravděpodobností, což ukazuje lavinový efekt:
BLAKE-512 („Rychlá hnědá liška skáče přes líného psa“) = 1f7e26f63b6ad25a0896fd978fd050a1766391d2fd0471a77afb975e5034b7ad2d9ccf8dfb47abbbe656e1b82fbc634ba42ce186e8dc5e1ce09a885d41f43451BLAKE-512 („Rychlá hnědá liška přeskočí línou věcF") = a701c2a1f9baabd8b1db6b75aee096900276f0b86dc15d247ecc03937b370324a16a4ffc0c3a85cd63229cfa15c15f4ba6d46ae2e849ed6335e9ff43b764198a
BLAKE2
Všeobecné | |
---|---|
Návrháři | Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O'Hearn, Christian Winnerlein |
Odvozený od | BLAKE |
Detail | |
Velikosti trávení | až 64 bytů (BLAKE2b); až 32 bajtů (BLAKE2s); libovolný (BLAKE2X) |
Kola | 10 nebo 12 |
Rychlost | 3.5 cpb na Jádro i5 (Ivy Bridge) pro BLAKE2b[1] |
BLAKE2 je kryptografická hashovací funkce založená na BLAKE, kterou vytvořil Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O'Hearn a Christian Winnerlein. Cílem designu bylo nahradit široce používané, ale rozbité, MD5 a SHA-1 algoritmy v aplikacích vyžadujících vysoký výkon softwaru. BLAKE2 byl oznámen 21. prosince 2012.[2] A referenční implementace je k dispozici pod CC0, Licence OpenSSL a Veřejná licence Apache 2.0.[3][4]
BLAKE2b je rychlejší než MD5, SHA-1, SHA-2 a SHA-3 na 64bitových architekturách x86-64 a ARM.[3] BLAKE2 poskytuje lepší zabezpečení než SHA-2 a podobné jako u SHA-3: odolnost vůči prodloužení délky, lhostejnost vůči náhodnému věštci atd.[5]
BLAKE2 odstraní přidání konstant ke slovům zprávy z kulaté funkce BLAKE, změní dvě konstanty rotace, zjednoduší odsazení, přidá blok parametrů, který je XOR'ed s inicializačními vektory, a sníží počet kol ze 16 na 12 pro BLAKE2b (nástupce BLAKE-512) a od 14 do 10 pro BLAKE2s (nástupce BLAKE-256).
BLAKE2 podporuje režimy klíčování, solení, personalizace a hash stromu a pro BLAKE2b může odesílat digesty od 1 do 64 bajtů, u BLAKE2s až do 32 bajtů. Existují také paralelní verze určené ke zvýšení výkonu na vícejádrové procesory; BLAKE2bp (Čtyřcestný paralelně) a BLAKE2sp (8směrný paralelní).
BLAKE2X je rodina funkcí rozšiřitelného výstupu (XOF). Zatímco BLAKE2 je omezen na 64bytové digesce, BLAKE2X umožňuje digesce až 256 GiB. BLAKE2X sám o sobě není instancí funkce hash a musí být založen na skutečné instanci BLAKE2. Příkladem instance BLAKE2X může být BLAKE2Xb16MiB, což by byla verze BLAKE2X založená na BLAKE2b produkující 16 777 216 bajtových digestů (nebo přesně 16 MiB, odtud název takové instance).[6]
BLAKE2b a BLAKE2s jsou specifikovány v RFC 7693. Volitelné funkce využívající blok parametrů (solení, osobní hash, hašování stromů atd.) Nejsou specifikovány, a tudíž ani podpora pro BLAKE2bp, BLAKE2sp nebo BLAKE2X.[7]
Inicializační vektor
BLAKE2b používá inicializační vektor, který je stejný jako IV používá SHA-512. Tyto hodnoty jsou transparentně získané převzetím prvních 64 bitů zlomkových částí kladných odmocnin prvních osmi prvočísel.
IV0 = 0x6a09e667f3bcc908 // Frac (sqrt (2))IV1 = 0xbb67ae8584caa73b // Frac (sqrt (3))IV2 = 0x3c6ef372fe94f82b // Frac (sqrt (5))IV3 = 0xa54ff53a5f1d36f1 // Frac (sqrt (7))IV4 = 0x510e527fade682d1 // Frac (sqrt (11))IV5 = 0x9b05688c2b3e6c1f // Frac (sqrt (13))IV6 = 0x1f83d9abfb41bd6b // Frac (sqrt (17))IV7 = 0x5be0cd19137e2179 // Frac (sqrt (19))
Algoritmus BLAKE2b
Pseudo kód pro algoritmus BLAKE2b. Algoritmus BLAKE2b používá 8bajtová slova (UInt64) a 128bajtové bloky.
Algoritmus BLAKE2b Vstup: M Zpráva k hašování cbMessageLen: Number, (0..2128) Délka zprávy v bajtech Klíč Volitelný klíč 0..64 bajtů cbKeyLen: Number, (0..64) Délka volitelného klíče v bajtech cbHashLen: Number, (1..64) Požadovaná délka hash v bajtech Výstup: Hash Hash bajtů cbHashLen Inicializovat stavový vektor h s IV h0..7 ← IV0..7 Smíchejte velikost klíče (cbKeyLen) a požadovanou délku hash (cbHashLen) do h0 h0 ← h0 xor 0x0101kknn kde kk je délka klíče (v bajtech) nn je požadovaná délka hash (v bajtech) Pokaždé, když komprimujeme, zaznamenáváme, kolik bytů bylo komprimováno cBytesCompressed ← 0 cBytesRemaining ← cbMessageLen Pokud byl dodán klíč (tj. CbKeyLen> 0) pak pad s koncovými nulami, aby to bylo 128 bajtů (tj. 16 slov) a předložit jej do zprávy M -li (cbKeyLen> 0) pak M ← Pad (klíč, 128) || M cBytesRemaining ← cBytesRemaining + 128 skončit, pokud Komprimujte celé 128bajtové bloky zprávy, kromě posledního bloku zatímco (cBytesRemaining> 128) dělat chunk ← získat dalších 128 bajtů zprávy M cBytesCompressed ← cBytesCompressed + 128 zvýšit počet bytů, které byly komprimovány cBytesRemaining ← cBytesRemaining - 128 snížit počet bytů v M zbývá zpracovat h ← Komprese (h, chunk, cBytesCompressed, false) false ⇒ toto není poslední blok skončit chvíli Zkomprimujte poslední bajty z M chunk ← získat dalších 128 bajtů zprávy M Dostaneme cBytesRemaining bajtů (tj. 0..128 bajtů) cBytesCompressed ← cBytesCompressed + cBytesRemaining Skutečný počet zbývajících bajtů v M chunk ← Pad (chunk, 128) Li M byl prázdný, pak budeme stále komprimovat poslední část nul h ← Komprese (h, chunk, cBytesCompressed, true) true ⇒ toto je poslední blok Výsledek ← první bajty cbHashLen malého vektoru stavu endian hKonec algoritmu BLAKE2b
Komprimovat
The Komprimovat funkce vezme celý 128bajtový blok vstupní zprávy a smíchá ji do pole probíhajícího stavu:
Funkce Komprimovat Vstup: h Vektor trvalého stavu kus 128bajtový (16 dvou slov) kus zprávy, který se má komprimovat t: Number, 0..2128 Počet bajtů, které byly vloženy do komprese IsLastBlock: Boolean Označuje, zda se jedná o poslední kolo komprese Výstup: h Aktualizovaný vektor trvalého stavu Nastavit vektor lokální práce V PROTI0..7 ← h0..7 Prvních osm položek je zkopírováno z vektoru trvalého stavu h PROTI8..15 ← IV0..7 Zbývajících osm položek je inicializováno z IV Smíchejte 128bitové počítadlo t do V12:PROTI13 PROTI12 ← V12 xor Lo (t) Lo 64 bitů UInt128 t PROTI13 ← V13 xor Udeřil) Ahoj 64 bitů UInt128 t Pokud je to poslední blok, obraťte všechny bity ve V14 -li IsLastBlock pak PROTI14 ← V14 xor 0xFFFFFFFFFFFFFFFF Zpracovat každou 128bajtovou zprávu kus jako šestnáct 8bajtových (64bitových) slov m m0..15 ← kus Dvanáct kol míchání kryptografických zpráv pro i z 0 na 11 dělat Vyberte plán míchání zpráv pro toto kolo. BLAKE2b používá 12 kol, zatímco SIGMA má pouze 10 záznamů. S0..15 ← SIGMA [i mod 10] Kolo 10 a 11 používají SIGMA [0] a SIGMA [1] Mix (V0, V4, V8, V12, slečna0], slečna1]) Mix (V1, V5, V9, V13, slečna2], slečna3]) Mix (V2, V6, V10, V14, slečna4], slečna5]) Mix (V3, V7, V11, V15, slečna6], slečna7]) Mix (V0, V5, V10, V15, slečna8], slečna9]) Mix (V1, V6, V11, V12, slečna10], slečna11]) Mix (V2, V7, V8, V13, slečna12], slečna13]) Mix (V3, V4, V9, V14, slečna14], slečna15]) konec pro Smíchejte horní a dolní polovinu V do pokračujícího vektoru stavu h h0..7 ← h0..7 xor PROTI0..7 h0..7 ← h0..7 xor PROTI8..15 Výsledek ← hUkončit funkci Komprimovat
Směs
The Směs funkce je volána Komprimovat funkce a smíchá dvě 8bajtová slova ze zprávy do hash stavu. Ve většině implementací by tato funkce byla zapsána inline nebo jako inline funkce.
Funkce Směs Vstupy: PROTIA, Vb, VC, Vd čtyři 8bajtové položky slova z pracovního vektoru V x, y dva 8bajtové vstupy slov z polstrované zprávy m Výstup: PROTIA, Vb, VC, Vd upravené verze VA, Vb, VC, Vd PROTIA ← VA + Vb + x se vstupem PROTId ← (V.d xor PROTIA) rotateright 32 VC ← VC + Vd žádný vstup PROTIb ← (V.b xor PROTIC) rotateright 24 VA ← VA + Vb + y se vstupem PROTId ← (V.d xor PROTIA) rotateright 16 VC ← VC + Vd žádný vstup PROTIb ← (V.b xor PROTIC) rotateright 63 Výsledek ← VA, Vb, VC, VdUkončit funkci Směs
Příklad trávení
Hodnoty hash prázdného řetězce:
BLAKE2s-224 ("") = 1fa1291e65248b37b3433475b2a0dd63d54a11ecc4e3e034e7bc1ef4BLAKE2s-256 ("") = 69217a3079908094e11121d042354a7c1f55b6482ca1a51e1b250dfd1ed0eef9BLAKE2b-384 ("") = b32811423377f52d7862286ee1a72ee540524380fda1724a6f25d7978c6fd3244a6caf0498812673c5e05ef583825100BLAKE2b-512 ("") = 786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce
Změna jednoho bitu způsobí změnu každého bitu na výstupu s 50% pravděpodobností, což ukazuje lavinový efekt:
BLAKE2b-512 ("Rychlá hnědá liška skáče přes líného psa") = a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918BLAKE2b-512 („Rychlá hnědá liška skáče přes línéF") = ab6b007747d8068c02e25a6008db8a77c218d94f3b40d2291a7dc8a62090a744c082ea27af01521a102e42f480a31e9844053f456b4b41e8aa78bbe5c12957bb
Uživatelé BLAKE2
- Argon2, vítěz soutěže Soutěž o hašování hesel používá BLAKE2b
- Šéfkuchař Systém nasazení Habitat používá pro podepisování balíků BLAKE2b[8]
- Porty FreeBSD nástroj pro správu balíků používá BLAKE2b
- GNU Core Utilities implementuje BLAKE2b do svého příkazu b2sum[9]
- IPFS umožňuje použití BLAKE2b pro hašování stromů
- librsync používá BLAKE2b[10]
- Hluk (kryptografický protokol), který se používá v WhatsApp zahrnuje BLAKE2 jako volitelnou možnost.[11][Citace je zapotřebí ]
- RAR formát archivu souborů verze 5 podporuje volitelný 256bitový kontrolní součet souboru BLAKE2sp namísto výchozích 32bitů CRC32; bylo implementováno v WinRAR v5 +[12]
- rmlint používá BLAKE2b pro detekci duplicitních souborů[13]
- WireGuard používá BLAKE2s k hašování[14]
- Zcash, kryptoměna, používá BLAKE2b v Equihash doklad o práci, a jako funkce odvození klíče
- NANO, kryptoměna, používá BLAKE2b v dokladu o práci, pro hašování digitálních podpisů a jako funkce odvození klíče[15] [16] [17]
Implementace
Kromě referenční implementace[4] následující kryptografické knihovny poskytují implementace BLAKE2:
BLAKE3
Všeobecné | |
---|---|
Návrháři | Jack O'Connor, Samuel Neves, Jean-Philippe Aumasson, Zooko Wilcox-O'Hearn |
Nejprve publikováno | 9. ledna 2020 |
Odvozený od | Bao, BLAKE2 |
Detail | |
Velikosti trávení | 256 bitů, libovolně rozšiřitelné |
Struktura | Merkle strom |
Kola | 7 |
Rychlost | 0.49 cpb na Cascade Lake-SP s AVX-512[18] |
BLAKE3 je kryptografická hashovací funkce založená na Bao a BLAKE2, kterou vytvořili Jack O'Connor, Jean-Philippe Aumasson, Samuel Neves a Zooko Wilcox-O'Hearn. Bylo oznámeno 9. ledna 2020 v Skutečné kryptoměny.[19]
BLAKE3 je jediný algoritmus s mnoha žádoucími funkcemi (paralelismus, XOF, KDF, PRF a MAC), na rozdíl od BLAKE a BLAKE2, což jsou rodiny algoritmů s více variantami. BLAKE3 je Merkle strom, takže podporuje prakticky neomezený stupeň paralelismu (SIMD i multithreading). Oficiální Rez a C implementace[20] jsou s dvojí licencí jako veřejná doména (CC0 ) a Licence Apache.[21]
BLAKE3 je navržen tak, aby byl co nejrychlejší. Je trvale několikrát rychlejší než BLAKE2. Funkce komprese BLAKE3 je úzce založena na funkci BLAKE2s, přičemž největší rozdíl spočívá v tom, že počet kol je snížen z 10 na 7, což je změna založená na předpokladu, že současná kryptografie je příliš konzervativní.[22] Kromě zajištění paralelismu umožňuje formát stromu Merkle také ověřené streamování (ověřování on-the-fly) a přírůstkové aktualizace.[20]
Reference
- ^ „BLAKE2 - alternativa k MD5 / SHA-1“.
- ^ O'Whielacronx, Zooko (21. prosince 2012). „představujeme BLAKE2 - alternativu k SHA-3, SHA-2 a MD5“.
- ^ A b „BLAKE2“. blake2.net.
- ^ A b „Oficiální implementace BLAKE2“. Citováno 7. července 2019.
- ^ Aumasson, Jean-Philippe; Neves, Samuel; Wilcox-O’Hearn, Zooko; Winnerlein, Christian (2013). „BLAKE2: jednodušší, menší, rychlý jako MD5“ (PDF). Archiv kryptologie ePrint. IACR.
- ^ „BLAKE2X“ (PDF).
- ^ Saarinen, M-J; Aumasson, JP (listopad 2015). Kryptografický hash a ověřovací kód zprávy (BLAKE2). IETF. doi:10.17487 / RFC7693. RFC 7693. Citováno 4. prosince 2015.
- ^ Interní stanoviště: kryptografie
- ^ „coreutils / src / blake2 /“. github.com.
- ^ „librsync / src / blake2 /“. github.com.
- ^ „Whitepaper o zabezpečení WhatsApp“ (PDF).
- ^ „WinRAR archivátor, výkonný nástroj pro zpracování souborů RAR a ZIP“. rarsoft.com.
- ^ "rmlint - dokumentace rmlint".
- ^ "WireGuard: Tunelový síťový tunel jádra nové generace" (PDF).
- ^ "práce". docs.nano.org.
- ^ "podpisy". docs.nano.org.
- ^ "odvození klíče". docs.nano.org.
- ^ „BLAKE3 - jedna funkce, všude rychlá“ (PDF).
- ^ „Dřívější verze Bao specifikovala svůj vlastní vlastní režim stromu, který nakonec přerostl v BLAKE3“.
- ^ A b „Oficiální implementace BLAKE3“. Citováno 12. ledna 2020.
- ^ „Tato práce je uvolněna do veřejné sféry s CC0 1.0. Alternativně je licencována pod licencí Apache 2.0“.
- ^ Aumasson, Jean-Philippe. „Too Much Crypto“ (PDF).
externí odkazy
- Webové stránky BLAKE
- Webové stránky BLAKE2
- Webové stránky BLAKE3
- VHDL implementace BLAKE, vyvinutý výzkumnou skupinou pro kryptografické inženýrství (CERG) v Univerzita George Masona