Vrystelling van die verwysingsimplementering van die kriptografiese hash-funksie BLAKE3 1.0

'n Verwysingsimplementering van die kriptografiese hash-funksie BLAKE3 1.0 is vrygestel, opvallend vir sy baie hoë hash-berekeningsprestasie terwyl dit betroubaarheid op die SHA-3-vlak verseker. In die hash-generasietoets vir 'n 16 KB-lêer presteer BLAKE3 met 'n 256-bis-sleutel SHA3-256 met 17 keer, SHA-256 met 14 keer, SHA-512 met 9 keer, SHA-1 met 6 keer, en BLAKE2b - 5 keer. 'n Beduidende gaping bly oor wanneer baie groot hoeveelhede data verwerk word, byvoorbeeld, BLAKE3 het 256 keer vinniger geblyk as SHA-8 te wees wanneer 'n hash vir 1GB se ewekansige data bereken word. Die BLAKE3-verwysingsimplementeringskode is beskikbaar in C- en Rust-weergawes onder 'n dubbele publieke domein (CC0) en Apache 2.0-lisensie.

Vrystelling van die verwysingsimplementering van die kriptografiese hash-funksie BLAKE3 1.0

Die hash-funksie is ontwerp vir toepassings soos lêerintegriteitkontrolering, boodskapverifikasie en die generering van data vir kriptografiese digitale handtekeninge. BLAKE3 is nie bedoel om wagwoorde te hash nie, aangesien dit daarop gemik is om hashes so vinnig as moontlik te bereken (vir wagwoorde word dit aanbeveel om die stadige hash-funksies yescrypt, bcrypt, scrypt of Argon2 te gebruik). Die hash-funksie wat oorweeg word, is onsensitief vir die grootte van die hash-data en word beskerm teen aanvalle op botsing-seleksie en preimage-bevinding.

Die algoritme is ontwikkel deur bekende kriptografie-kundiges (Jack O'Connor, Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O'Hearn) en gaan voort met die ontwikkeling van die BLAKE2-algoritme en gebruik die Bao-meganisme om die blokkettingboom te enkodeer . Anders as BLAKE2 (BLAKE2b, BLAKE2s), bied BLAKE3 'n enkele algoritme vir alle platforms, nie gekoppel aan die bietjie diepte en hash-grootte nie.

Verhoogde prestasie is behaal deur die aantal rondtes van 10 na 7 te verminder en blokke afsonderlik in 1 KB-stukke te verhaas. Volgens die skeppers het hulle oortuigende wiskundige bewys gevind dat dit moontlik is om met 7 rondtes in plaas van 10 oor die weg te kom terwyl dieselfde vlak van betroubaarheid gehandhaaf word (vir duidelikheid kan ons 'n voorbeeld gee met die meng van vrugte in 'n menger - na 7 sekondes die vrugte is reeds heeltemal gemeng, en 'n bykomende 3 sekondes sal nie die konsekwentheid van die mengsel beïnvloed nie). Sommige navorsers spreek egter twyfel uit en glo dat selfs al is 7 rondtes tans voldoende om alle bekende aanvalle op hashes teë te werk, bykomende 3 rondes nuttig kan wees as nuwe aanvalle in die toekoms geïdentifiseer word.

Wat die verdeling in blokke betref, in BLAKE3 word die stroom in 1 KB-stukke verdeel en elke stuk word onafhanklik gehash. Gebaseer op die hashes van die stukke, word een groot hash gevorm gebaseer op die binêre Merkle-boom. Hierdie verdeling stel ons in staat om die probleem van parallellisering van dataverwerking op te los wanneer hashes bereken word - jy kan byvoorbeeld 4-draad SIMD-instruksies gebruik om gelyktydig hashes van 4 blokke te bereken. Tradisionele SHA-* hash-funksies verwerk data opeenvolgend.

Kenmerke van BLAKE3:

  • Hoë werkverrigting, BLAKE3 is aansienlik vinniger as MD5, SHA-1, SHA-2, SHA-3 en BLAKE2.
  • Sekuriteit, insluitend weerstand teen boodskapverlengingsaanvalle waarvoor SHA-2 vatbaar is;
  • Beskikbaar in Rust, geoptimaliseer vir SSE2-, SSE4.1-, AVX2-, AVX-512- en NEON-instruksies.
  • Verseker parallellisering van berekeninge op enige aantal drade en SIMD-kanale.
  • Moontlikheid van inkrementele opdatering en geverifieerde verwerking van strome;
  • Gebruik in PRF-, MAC-, KDF-, XOF-modusse en as 'n gereelde hash;
  • 'n Enkele algoritme vir alle argitekture, vinnig op beide x86-64-stelsels en 32-bis ARM-verwerkers.

Die belangrikste verskille tussen BLAKE3 en BLAKE2:

  • Gebruik van 'n binêre boomstruktuur wat onbeperkte parallellisme in hash-berekeninge toelaat.
  • Verminder die aantal rondtes van 10 na 7.
  • Drie maniere van werking: hashing, hashing met 'n sleutel (HMAC) en sleutelgenerering (KDF).
  • Geen bykomende bokoste wanneer jy met 'n sleutel hash nie as gevolg van die gebruik van die area wat voorheen deur die sleutelparameterblok beset is.
  • Ingeboude bedryfsmeganisme in die vorm van 'n funksie met 'n uitgebreide resultaat (XOF, Extendable Output Function), wat parallelisering en posisionering (soek) moontlik maak.

Bron: opennet.ru

Voeg 'n opmerking