Die Referenzimplementierung der kryptografischen Hash-Funktion BLAKE3 1.0 wurde veröffentlicht, die sich durch eine außergewöhnlich hohe Hash-Berechnungsleistung bei gleichzeitigem Niveau der Zuverlässigkeit von SHA-3 auszeichnet. 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 deutliche Vorteil bleibt auch bei der Verarbeitung sehr großer Datenmengen erhalten, so war BLAKE3 beispielsweise im Vergleich zu SHA-256 um das 8-Fache schneller bei der Berechnung des Hashs für 1 GB zufälliger Daten. Der Code der Referenzimplementierung von BLAKE3 ist in C und Rust verfügbar und wird unter einer doppelten Lizenz vertrieben – Public Domain (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 Generierung von Daten für kryptografische digitale Signaturen ausgelegt. BLAKE3 ist nicht für das Hashing von Passwörtern gedacht, da sie auf eine maximale Geschwindigkeit bei der Hash-Berechnung abzielt (für Passwörter sollten langsame Hash-Funktionen wie yescrypt, bcrypt, scrypt oder Argon2 verwendet werden). Die betrachtete Hash-Funktion ist unempfindlich gegenüber der Größe der zu hashenden Daten und schützt vor Kollisionserkennung und dem Finden von Vorbildern.
Der Algorithmus wurde von renommierten Kryptographen (Jack O’Connor, Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O’Hearn) entwickelt und setzt die Entwicklung des Algorithmus BLAKE2 fort und verwendet für das Kodieren des Blöcke-Kettenbaums den Bao-Mechanismus. Im Gegensatz zu BLAKE2 (BLAKE2b, BLAKE2s) bietet BLAKE3 einen einheitlichen Algorithmus für alle Plattformen, der nicht an die Bitbreite und die Größe des Hashs gebunden ist.
Die Leistungssteigerung konnte durch die Reduzierung der Rundenanzahl von 10 auf 7 und das getrennte Hashing von Blöcken in 1-KB-Stücke erreicht werden. Laut den Entwicklern haben sie einen überzeugenden mathematischen Beweis gefunden, dass 7 Runden anstelle von 10 ausreichend sind, um das gleiche Maß an Zuverlässigkeit zu gewährleisten (als anschauliches Beispiel kann man das Mischen von Früchten in einem Mixer nehmen – nach 7 Sekunden sind die Früchte bereits vollständig vermischt, und zusätzliche 3 Sekunden haben keinen Einfluss auf die Konsistenz des Mischs). Einige Forscher äußern jedoch Bedenken, da sie der Meinung sind, dass selbst wenn 7 Runden derzeit ausreichend sind, um allen bekannten Angriffen auf Hashes zu widerstehen, die zusätzlichen 3 Runden in Zukunft nützlich sein könnten, falls neue Angriffe entdeckt werden.
Was die Blockteilung betrifft, wird der BLAKE3-Stream in 1-KB-Stücke zerlegt und jedes Stück wird unabhängig gehasht. Auf Basis der Hashes der Stücke wird mithilfe eines Merkle-Baums ein großer Hash generiert. Diese Teilung ermöglicht die Lösung des Problems der parallelisierten Datenverarbeitung beim Berechnen des Hashs – beispielsweise können 4-Thread-SIMD-Anweisungen verwendet werden, um die Hashes von 4 Blöcken gleichzeitig zu berechnen. Traditionelle Hash-Funktionen wie SHA-* verarbeiten Daten nacheinander.
Eigenschaften 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 Nachrichtenverlängerungsangriffe, denen SHA-2 ausgesetzt ist.
- Es sind Varianten in Rust verfügbar, die für die Verwendung von SSE2-, SSE4.1-, AVX2-, AVX-512- und NEON-Anweisungen optimiert sind.
- Gewährleistung der Parallelisierung von Berechnungen über beliebig viele Threads und SIMD-Kanäle.
- Möglichkeit der inkrementellen Aktualisierung und verifizierten Verarbeitung von Streams;
- Anwendung in den Modi PRF, MAC, KDF, XOF und 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.
- Reduzierung der Rundenanzahl von 10 auf 7.
- Drei Betriebsmodi: Hashing, Hashing mit Schlüssel (HMAC) und Schlüsselgenerierung (KDF).
- Fehlende zusätzliche Overheads beim Hashing mit Schlüssel durch die Nutzung des Bereichs, der zuvor vom Parameterblock des Schlüssels belegt war.
- Integrierter Mechanismus zur Funktion als Extendable Output Function (XOF), die Parallelisierung und Positionierung (Seek) ermöglicht.
Quelle: opennet.ru
