Die Referenzimplementierung der kryptografischen Hash-Funktion BLAKE3 1.0 wurde veröffentlicht und zeichnet sich durch eine bemerkenswert hohe Hash-Berechnungsleistung aus, während sie eine Zuverlässigkeit auf dem Niveau von SHA-3 bietet. Im Test zur Hash-Generierung für eine Datei mit einer Größe von 16 KB übertrifft BLAKE3 mit einem 256-Bit-Schlüssel SHA3-256 um das 17-fache, SHA-256 um das 14-fache, SHA-512 um das 9-fache, SHA-1 um das 6-fache und BLAKE2b um das 5-fache. Der signifikante Vorsprung bleibt auch bei der Verarbeitung sehr großer Datenmengen bestehen; BLAKE3 war beispielsweise 8-mal schneller als SHA-256 bei der Hash-Berechnung für 1 GB zufälliger Daten. Der Code der Referenzimplementierung von BLAKE3 ist in den Programmiersprachen C und Rust unter einer doppelten Lizenz verfügbar – gemeinfrei (CC0) und Apache 2.0.

Die Hash-Funktion ist für Anwendungen wie die Überprüfung der Integrität von Dateien, die Authentifizierung von Nachrichten und die Erstellung von Daten für kryptografische digitale Signaturen konzipiert. BLAKE3 ist nicht für die Hashierung von Passwörtern geeignet, da sie auf die schnellstmögliche Berechnung von Hashes abzielt (für Passwörter werden langsame Hash-Funktionen wie yescrypt, bcrypt, scrypt oder Argon2 empfohlen). Die betrachtete Hash-Funktion ist nicht empfindlich gegenüber der Größe der zu hashierenden Daten und bietet Schutz gegen Kollisionsangriffe und das Finden von Urbildern.
Der Algorithmus wurde von bekannten Krypto-Experten (Jack O’Connor, Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O’Hearn) entwickelt und baut auf dem BLAKE2-Algorithmus auf, wobei zur Kodierung der Blockchain-Bäume der Bao-Mechanismus verwendet wird. Im Gegensatz zu BLAKE2 (BLAKE2b, BLAKE2s) bietet BLAKE3 für alle Plattformen einen einheitlichen Algorithmus, der unabhängig von der Bitbreite und der Hash-Größe ist.
Die Leistungssteigerung wurde durch die Reduzierung der Rundenanzahl von 10 auf 7 und die getrennte Hash-Berechnung der Blöcke in Stücke von 1 KB erreicht. Laut den Entwicklern haben sie einen überzeugenden mathematischen Beweis gefunden, dass 7 Runden anstelle von 10 ausreichen, um das gleiche Niveau an Zuverlässigkeit zu gewährleisten (zum Beispiel kann man mit dem Mischen von Früchten in einem Mixer vergleichen – nach 7 Sekunden sind die Früchte bereits vollständig vermischt, und weitere 3 Sekunden haben keinen Einfluss auf die Konsistenz der Mischung). Dennoch äußern einige Forscher Bedenken, da sie der Meinung sind, dass selbst wenn derzeit 7 Runden ausreichend sind, um sich gegen alle bekannten Angriffe auf Hashes zu verteidigen, zusätzliche 3 Runden hilfreich sein könnten, falls in Zukunft neue Angriffe entdeckt werden.
Im Hinblick auf die Blockaufteilung wird der BLAKE3-Stream in Stücke von 1 KB unterteilt, wobei jedes Stück unabhängig gehasht wird. Auf Basis der Hashes der Stücke wird ein großer Hash über eine binäre Merkle-Baumstruktur gebildet. Diese Unterteilung ermöglicht eine parallele Datenverarbeitung beim Berechnen des Hashs – beispielsweise können 4-Thread-SIMD-Instruktionen verwendet werden, um gleichzeitig die Hashes von 4 Blöcken zu berechnen. Traditionelle Hash-Funktionen wie SHA-* verarbeiten Daten sequenziell.
Merkmale von BLAKE3:
- Hohe Leistung; BLAKE3 ist deutlich schneller als MD5, SHA-1, SHA-2, SHA-3 und BLAKE2.
- Sicherheit, einschließlich der Widerstandsfähigkeit gegen die Verlängerungsangriffe, denen SHA-2 ausgesetzt ist.
- Es sind Versionen in Rust verfügbar, die für die Nutzung der Instruktionen SSE2, SSE4.1, AVX2, AVX-512 und NEON optimiert sind.
- Sicherstellung der Parallelisierung der Berechnungen über beliebig viele Threads und SIMD-Kanäle.
- Möglichkeit zur inkrementellen Aktualisierung und verifiziertem Verarbeiten von Datenströmen;
- Anwendung in den Modi PRF, MAC, KDF, XOF sowie als gewöhnlicher Hash.
- Ein einheitlicher Algorithmus für alle Architekturen, schnell sowohl auf x86-64-Systemen als auch auf 32-Bit ARM-Prozessoren.
Die Hauptunterschiede zwischen BLAKE3 und BLAKE2:
- Verwendung einer binären Baumstruktur, die unbegrenzte Parallelität bei der Berechnung des Hashs ermöglicht.
- Verringerung der Rundenanzahl von 10 auf 7.
- Drei Betriebsmodi: Hashing, Hashing mit Schlüssel (HMAC) und Schlüsselableitung (KDF).
- Keine zusätzlichen Overheads beim Hashing mit Schlüssel durch die Verwendung des zuvor vom Parameterblock eingenommenen Bereichs.
- Integrierter Betrieb als Funktion mit erweiterbarem Ergebnis (XOF, Extendable Output Function), die Parallelisierung und Positionierung (Seek) ermöglicht.
Quelle: opennet.ru
