Es wurde eine Referenzimplementierung der kryptografischen Hash-Funktion BLAKE3 1.0 veröffentlicht, die sich durch eine sehr hohe Hash-Berechnungsleistung bei gleichzeitiger Gewährleistung der Zuverlässigkeit auf SHA-3-Ebene auszeichnet. Im Hash-Generierungstest für eine 16-KB-Datei ü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 - 5 mal. Bei der Verarbeitung sehr großer Datenmengen bleibt eine erhebliche Lücke bestehen. Beispielsweise erwies sich BLAKE3 bei der Berechnung eines Hashs für 256 GB Zufallsdaten als achtmal schneller als SHA-8. Der BLAKE1-Referenzimplementierungscode ist in C- und Rust-Versionen unter einer dualen Public Domain- (CC3) und Apache 0-Lizenz verfügbar.
![Veröffentlichung der Referenzimplementierung der kryptografischen Hash-Funktion BLAKE3 1.0](https://prohoster.info/wp-content/plugins/wp-fastest-cache-premium/pro/images/blank.gif)
Die Hash-Funktion ist für Anwendungen wie die Überprüfung der Dateiintegrität, die Nachrichtenauthentifizierung und die Generierung von Daten für kryptografische digitale Signaturen konzipiert. BLAKE3 ist nicht für das Hashing von Passwörtern gedacht, da es darauf abzielt, Hashes möglichst schnell zu berechnen (für Passwörter empfiehlt sich die Verwendung der langsamen Hash-Funktionen yescrypt, bcrypt, scrypt oder Argon2). Die betrachtete Hash-Funktion ist unempfindlich gegenüber der Größe der gehashten Daten und ist vor Angriffen auf Kollisionsauswahl und Vorbildsuche geschützt.
Der Algorithmus wurde von bekannten Kryptographie-Experten (Jack O'Connor, Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O'Hearn) entwickelt und setzt die Entwicklung des BLAKE2-Algorithmus fort und nutzt den Bao-Mechanismus zur Codierung des Blockchain-Baums . Im Gegensatz zu BLAKE2 (BLAKE2b, BLAKE2s) bietet BLAKE3 einen einzigen Algorithmus für alle Plattformen, der nicht an die Bittiefe und Hash-Größe gebunden ist.
Eine höhere Leistung wurde erreicht, indem die Anzahl der Runden von 10 auf 7 reduziert und Blöcke separat in 1-KB-Stücken gehasht wurden. Nach Angaben der Macher haben sie überzeugende mathematische Beweise dafür gefunden, dass es möglich ist, mit 7 statt 10 Runden auszukommen und dabei das gleiche Maß an Zuverlässigkeit beizubehalten (zur Verdeutlichung können wir ein Beispiel mit dem Mischen von Früchten in einem Mixer geben – nach 7 Sekunden). Die Frucht ist bereits vollständig vermischt und weitere 3 Sekunden haben keinen Einfluss auf die Konsistenz der Mischung. Einige Forscher äußern jedoch Zweifel und sind der Ansicht, dass, selbst wenn derzeit sieben Runden ausreichen, um alle bekannten Angriffe auf Hashes abzuwehren, zusätzliche drei Runden nützlich sein könnten, wenn in Zukunft neue Angriffe identifiziert werden.
Was die Aufteilung in Blöcke betrifft, wird der Stream in BLAKE3 in 1-KB-Stücke aufgeteilt und jedes Stück wird unabhängig gehasht. Basierend auf den Hashes der Stücke wird ein großer Hash basierend auf dem binären Merkle-Baum gebildet. Diese Aufteilung ermöglicht es uns, das Problem der Parallelisierung der Datenverarbeitung bei der Berechnung von Hashes zu lösen – Sie können beispielsweise 4-Thread-SIMD-Anweisungen verwenden, um gleichzeitig Hashes von 4 Blöcken zu berechnen. Herkömmliche SHA-*-Hash-Funktionen verarbeiten Daten sequentiell.
Merkmale von BLAKE3:
- Hohe Leistung, BLAKE3 ist deutlich schneller als MD5, SHA-1, SHA-2, SHA-3 und BLAKE2.
- Sicherheit, einschließlich Widerstand gegen Nachrichtenverlängerungsangriffe, für die SHA-2 anfällig ist;
- Verfügbar in Rust, optimiert für SSE2-, SSE4.1-, AVX2-, AVX-512- und NEON-Anweisungen.
- Sicherstellung der Parallelisierung von Berechnungen auf beliebig vielen Threads und SIMD-Kanälen.
- Möglichkeit der inkrementellen Aktualisierung und verifizierten Verarbeitung von Streams;
- Verwendung in den Modi PRF, MAC, KDF, XOF und als normaler Hash;
- Ein einziger 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 Hash-Berechnungen ermöglicht.
- Reduzierung der Rundenzahl von 10 auf 7.
- Drei Betriebsarten: Hashing, Hashing mit einem Schlüssel (HMAC) und Schlüsselgenerierung (KDF).
- Kein zusätzlicher Overhead beim Hashing mit einem Schlüssel, da der zuvor vom Schlüsselparameterblock belegte Bereich verwendet wird.
- Eingebauter Betriebsmechanismus in Form einer Funktion mit erweitertem Ergebnis (XOF, Extendable Output Function), die Parallelisierung und Positionierung (Seek) ermöglicht.
Source: opennet.ru