In referinsje ymplemintaasje fan 'e kryptografyske hashfunksje BLAKE3 1.0 waard frijlitten, opmerklik foar syn heul hege prestaasjes foar hashberekkening, wylst se betrouberens op it SHA-3-nivo garandearje. Yn 'e hash-generaasjetest foar in 16 KB-bestân prestearret BLAKE3 mei in 256-bit kaai 3 kear SHA256-17, 256 kear SHA-14, 512 kear SHA-9, 1 kear SHA-6, en BLAKE2b - 5 kear. In wichtige gat bliuwt by it ferwurkjen fan heul grutte hoemannichten gegevens, bygelyks BLAKE3 die bliken 256 kear flugger as SHA-8 by it berekkenjen fan in hash foar 1GB fan willekeurige gegevens. De BLAKE3 referinsje ymplemintaasjekoade is beskikber yn C- en Rust-ferzjes ûnder in dûbele publike domein (CC0) en Apache 2.0-lisinsje.

De hash-funksje is ûntworpen foar applikaasjes lykas kontrolearjen fan bestânintegriteit, berjochtferifikaasje en it generearjen fan gegevens foar kryptografyske digitale hantekeningen. BLAKE3 is net bedoeld foar it hashen fan wachtwurden, om't it as doel hat om hashes sa rap mooglik te berekkenjen (foar wachtwurden is it oan te rieden om de trage hashfunksjes yescrypt, bcrypt, scrypt of Argon2 te brûken). De hash-funksje dy't beskôge wurdt is ûngefoelich foar de grutte fan 'e hashed gegevens en is beskerme tsjin oanfallen op botsingseleksje en preimage-fining.
It algoritme is ûntwikkele troch bekende kryptografy-eksperts (Jack O'Connor, Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O'Hearn) en bliuwt de ûntwikkeling fan it BLAKE2-algoritme en brûkt it Bao-meganisme om de blokketenbeam te kodearjen . Oars as BLAKE2 (BLAKE2b, BLAKE2s), biedt BLAKE3 in inkele algoritme foar alle platfoarms, net bûn oan de bit djipte en hash grutte.
Ferhege prestaasje waard berikt troch it ferminderjen fan it oantal rondes fan 10 nei 7 en hashing blokken apart yn 1 KB stikken. Neffens de makkers hawwe se oertsjûgjend wiskundich bewiis fûn dat it mooglik is om te kommen mei 7 rûnten ynstee fan 10, wylst itselde nivo fan betrouberens behâlde (foar dúdlikens kinne wy in foarbyld jaan mei it mingjen fan fruit yn in mixer - nei 7 sekonden de frucht is al folslein mingd, en in ekstra 3 sekonden sil gjin ynfloed hawwe op de gearhing fan it mingsel). Guon ûndersikers sprekke lykwols twifels út, en leauwe dat sels as 7 rondes op it stuit genôch binne om alle bekende oanfallen op hashes tsjin te gean, dan kinne ekstra 3 rûnen nuttich wêze as nije oanfallen yn 'e takomst identifisearre wurde.
As foar dielen yn blokken, yn BLAKE3 is de stream ferdield yn 1 KB stikken en elk stik wurdt ûnôfhinklik hashed. Op grûn fan de hashes fan de stikken wurdt ien grutte hash foarme op basis fan de binêre Merkle-beam. Dizze divyzje lit ús it probleem oplosse fan parallelisearjen fan gegevensferwurking by it berekkenjen fan hashes - jo kinne bygelyks 4-threaded SIMD-ynstruksjes brûke om tagelyk hashes fan 4 blokken te berekkenjen. Tradysjonele SHA-*-hashfunksjes ferwurkje gegevens sequentieel.
Funksjes fan BLAKE3:
- Hege prestaasjes, BLAKE3 is signifikant flugger as MD5, SHA-1, SHA-2, SHA-3 en BLAKE2.
- Feiligens, ynklusyf ferset tsjin oanfallen fan berjochtferlinging dêr't SHA-2 gefoelich foar is;
- Beskikber yn Rust, optimalisearre foar SSE2, SSE4.1, AVX2, AVX-512, en NEON ynstruksjes.
- It garandearjen fan parallelisaasje fan berekkeningen op elk oantal triedden en SIMD-kanalen.
- Mooglikheid fan inkrementele fernijing en ferifiearre ferwurking fan streamen;
- Brûk yn PRF, MAC, KDF, XOF modus en as in gewoane hash;
- In inkeld algoritme foar alle arsjitektueren, fluch op sawol x86-64-systemen as 32-bit ARM-prosessoren.
De wichtichste ferskillen tusken BLAKE3 en BLAKE2:
- Gebrûk fan in binêre beamstruktuer dy't ûnbeheinde parallellisme mooglik makket yn hashberekkeningen.
- It oantal rondes ferminderje fan 10 nei 7.
- Trije wurkwizen: hashing, hashing mei in kaai (HMAC) en kaai generaasje (KDF).
- Gjin ekstra overhead by hashing mei in kaai fanwegen it gebrûk fan it gebiet dat earder beset waard troch it kaaiparameterblok.
- Ynboude bestjoeringssysteem meganisme yn 'e foarm fan in funksje mei in útwreide resultaat (XOF, Extendable Output Funksje), wêrtroch parallelization en posysjonearring (sykje).
Boarne: opennet.ru
