BLAKE är en kryptografisk hashfunktion utvecklad av Jean-Philippe Aumasson, Luca Henzen, Willi Meier, Raphael C.-W. Phan.
Det finns två varianter av hash-funktionen: BLAKE-256 och BLAKE-512.
För första gången presenterades BLAKE vid tävlingen för kryptografiska algoritmer, som hölls av National Institute of Standards and Technology i USA ( NIST hash function competition , Russian SHA-3 (competition) ). BLAKE blev en av de fem finalisterna i tävlingen ( engelska finalister ).
BLAKE hash-funktionen är byggd av tre tidigare inlärda komponenter:
Prestanda på två olika processorer:
CPU | Hastighet (cykler/byte) | |
---|---|---|
BLAKE-256 | BLAKE-512 | |
Intel Core i5-2400M (Sandy Bridge) | 7,49 | 5,64 |
AMD FX-8120 (Bulldozer) | 11,83 | 6,88 |
Möjlighet att implementera på olika mikrokontroller:
mikrokontroller | BLAKE-256 | BLAKE-512 | ||
---|---|---|---|---|
RAM(byte) | ROM(byte) | RAM(byte) | ROM(byte) | |
Cortex-M3-baserad mikrokontroller (32-bitars processor) | 280 | 1320 | 516 | 1776 |
ATmega1284P mikrokontroller (8-bitars processor) | 267 | 3434 | 525 | 6350 |
Prestanda på FPGA ( eng. FPGA ):
På Xilinx Virtex 5 FPGA är BLAKE-256 implementerad på 56 celler och kan uppnå en genomströmning på mer än 160 Mbps, och BLAKE-512 är implementerad på 108 celler och i hastigheter upp till 270 Mbps.
ASIC prestanda :
Vid 180nm ASIC kan BLAKE-256 implementeras vid 13,5 kGE. På en 90nm ASIC är BLAKE-256 implementerad vid 38 kGE och kan uppnå 10 Gb/s prestanda, medan BLAKE-512 implementeras vid 79 kGE och vid 15 Gb/s [2] .
Som nämnts tidigare är BLAKE-hashfunktionen byggd av de tre tidigare inlärda komponenterna:
Tänk på BLAKE-256-algoritmen [3]
BLAKE-256 arbetar på 32-bitars ord och returnerar en 32-byte hash.
Det finns initiala konstanter, de så kallade. URSPRUNGLIGA VÄRDEN (IV):
IV0 = 6A09E667 IV1 = BB67AE85 IV2 = 3C6EF372 IV3 = A54FF53A IV4 = 510E527F IV5 = 9B05688C IV6 = 1F83D9AB IV7 = 5BE0CD1916 konstanter (första siffrorna i pi):
c 0 = 243F6A88 c 1 = 85A308D3 c 2 = 13198A2E c 3 = 03707344 c 4 = A4093822 c 5 = 299F31D0c6 = 082EFA98 c7 = EC4E6C89 c 8 = 452821E6 c 9 = 38D01377 c 10 = BE5466CF c 11 = 34E90C6C c 12 = C0AC29B7 c 13 = C97C50DD c 14 = 3F84D5B5 c 15 = B5470917permutationer {0,…,15} (används i alla BLAKE-funktioner):
σ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 0BLAKE-256-algoritmens komprimeringsfunktion tar som indata:
Således tar den emot 30 ord som inmatning (8+16+4+2=30, 30*4 = 120 byte = 960 bitar). Komprimeringsfunktionen returnerar endast det nya värdet för kedjevariablerna: h' = h' 0 ,…,h' 7 . I det följande kommer vi att beteckna h'=compress(h, m, s, t).
16 variabler, v 0 ,…,v 15 , som beskriver det aktuella tillståndet för v , initieras med initiala värden beroende på indata och presenteras som en 4×4 -matris :
←
Efter att tillståndet v har initierats startas en serie på 14 omgångar. En runda är en tillståndsoperation som utför beräkningar uppdelade i följande block:
G 0 (v 0 , v 4 , v 8 , v 12 ) G 1 (v 1 , v 5 , v 9 , v 13 ) G 2 (v 2 , v 6 , v 10 , v 14 ) G 3 (v 3 , v 7 , v 11 , v 15 ) G 4 (v 0 , v 5 , v 10 , v 15 ) G 5 (v 1 , v 6 , v 11 , v 12 ) G 6 (v 2 , v 7 , v 8 , v 13 ) G 7 (v 3 , v 4 , v 9 , v 14 )på den fjärde omgången fungerar beräkningsblocket enligt följande:
j ← σ r%10 [2×i] k ← σ r%10 [2×i+1] a ← a + b + (m j ⊕ c k ) d ← (d ⊕ a) >>> 16 c ← c + d b ← (b ⊕ c) >>> 12 a ← a + b + (m k ⊕ c j ) d ← (d ⊕ a) >>> 8 c ← c + d b ← (b ⊕ c) >>> 7De första fyra blocken G 0 ,..., G 3 kan beräknas parallellt, eftersom vart och ett ändrar sin egen specifika kolumn av tillståndsmatrisvariabler. Låt oss kalla beräkningsproceduren G 0 ,...,G 3 kolumnsteg . På liknande sätt kan G 4 ,..., G 7 beräknas parallellt , men de ändrar i sin tur varje diagonal i tillståndsmatrisen v . Därför kallar vi beräkningsproceduren G 4 ,...,G 7 diagonalsteg . Möjligheten till parallell beräkning av Gi presenteras grafiskt.
På omgångar med siffror r större än 9 används permutationen σ r%10 , till exempel på den 13:e omgången används σ 3 .
Efter alla omgångar beräknas det nya värdet av kedjevariablerna h' 0 ,…,h' 7 från tillståndsmatrisvariablerna, ingångsvariablerna och från saltet :
h' 0 ← h 0 ⊕ s 0 ⊕ v 8 h' 1 ← h 1 ⊕ s 1 ⊕ v 9 h' 2 ← h 2 ⊕ s 2 ⊕ v 10 h' 3 ← h 3 ⊕ 1 h s 4 ← h 4 ⊕ s 4 ⊕ v 12 h' 5 ← h 5 ⊕ s 5 ⊕ v 13 h' 6 ← h 6 ⊕ s 6 ⊕ v 14 h' 7 ← h 7 ⊕ ⊕ sLåt oss beskriva processen att hasha ett meddelande m med längden l<2^64 bitar. Först utfylls meddelandet med data för en multipel av 512 bitar (64 byte) av utfyllnadsfunktionen , sedan, block för block, bearbetas det av komprimeringsfunktionen .
I utfyllnadsfunktionen utfylls meddelandet först med bitar så att dess längd modulo 512 är lika med 447: först läggs 1 till, sedan det erforderliga antalet nollor. Därefter adderas ytterligare en 1- och 64-bitars representation av meddelandelängden l från den mest signifikanta biten till den minst signifikanta. Således blir meddelandelängden en multipel av 512 [Komm. 1] . Utfyllnad säkerställer att meddelandelängden blir en multipel av 512 bitar.
För att beräkna hashen för meddelandet delas resultatet av utfyllnadsfunktionen in i block med 16 ord m 0 ,...,m N-1 . Låt L i vara antalet bitar av det ursprungliga meddelandet i block m 0 ,…,m i , det vill säga exklusive de bitar som lades till i utfyllnadsproceduren. Till exempel, om meddelandet har en längd på 600 bitar, kommer det efter utfyllnadsproceduren att ha en längd på 1024 bitar och kommer att delas upp i två block: m 0 och m 1 . Dessutom är Lo = 512, L1 = 600. I vissa fall innehåller det sista blocket inte en bit av det ursprungliga meddelandet. Till exempel, om det ursprungliga meddelandet har 1020 bitar, kommer det, som ett resultat av utfyllnadsproceduren, att ha en längd på 1536 bitar och m 0 kommer att ha 512 bitar av det ursprungliga meddelandet, m 1 - 508 och m 2 - 0 Set Lo = 512, L1 = 1020 och L2 = 0 . Det vill säga, regeln är som följer: om det inte finns några bitar av det ursprungliga meddelandet i det sista blocket, sätt sedan räknaren LN -1 till 0. Detta garanterar att om i ≠ j , så L i ≠ Lj . Saltvärdet är användardefinierat eller satt till 0 om det inte ska användas ( s 0 =s 1 =s 2 =s 3 =0 ). Meddelandets hash beräknas på detta sätt:
h 0 ← IV för i=0,...,N-1 h i+1 ← komprimera(h i ,m i ,s,l i ) returnera h N .Hashingprocessen presenteras visuellt i flödesschemat:
Algoritmen för 64-bitarsversionen av funktionen är identisk: skiftvärdena är 32, 25, 16 respektive 11, antalet omgångar ökas till 16.
BLAKE2 ( BLAKE2- webbplats ) är en förbättrad version av BLAKE, en av de fem finalisterna i hash-funktionstävlingen SHA-3 (främst förbättrad prestanda), som introducerades den 21 december 2012. Utvecklare: Jean-Philippe Aumasson , Samuel Neves , Zooko Wilcox-O'Hearn och Christian Winnerlein . Det skapades som ett alternativ till MD5 och SHA-1 , som användes flitigt tidigare, där sårbarheter hittades.
I BLAKE2, till skillnad från BLAKE, finns det ingen addition av konstanter i den runda funktionen. Skiftkonstanterna har också ändrats, tillägget har förenklats, ett block med parametrar har lagts till som läggs till initialiseringsvektorerna. Dessutom har antalet omgångar minskat från 16 till 12 för BLAKE2b-funktionen (analogt med BLAKE-512) och från 14 till 10 för BLAKE2:or (analogt med BLAKE-256). Som ett resultat reducerades antalet cykler per bit från 7,49 för BLAKE-256 och 5,64 för BLAKE-512 till 5,34 och 3,32 för Blake2s respektive Blake2b.
Eli Biham och Orr Dunkelman. Ett ramverk för iterativa hashfunktioner - HAIFA . - ePrint, 2007. - 207 sid.
Hash-funktioner | |
---|---|
generell mening | |
Kryptografisk | |
Nyckelgenereringsfunktioner | |
Kontrollnummer ( jämförelse ) | |
Hashes |
|