È stata rilasciata la versione di riferimento della funzione hash crittografica BLAKE3 1.0, notevole per l'elevata performance nel calcolo dell'hash mantenendo l'affidabilità a livello di SHA-3. In un test di generazione dell'hash per un file di 16 KB, BLAKE3 con chiave a 256 bit supera SHA3-256 di 17 volte, SHA-256 di 14 volte, SHA-512 di 9 volte, SHA-1 di 6 volte e BLAKE2b di 5 volte. Un significativo distacco è mantenuto anche nel trattamento di volumi molto grandi di dati; ad esempio, BLAKE3 si è rivelato più veloce di SHA-256 di 8 volte nel calcolo dell'hash per 1GB di dati casuali. Il codice della versione di riferimento di BLAKE3 è fornito in versioni nei linguaggi C e Rust sotto doppia licenza: pubblico dominio (CC0) e Apache 2.0.

La funzione hash è progettata per applicazioni come la verifica dell'integrità dei file, l'autenticazione dei messaggi e la generazione di dati per firme digitali crittografiche. BLAKE3 non è destinata all'hashing delle password, poiché è focalizzata sul calcolo degli hash il più rapidamente possibile (per le password si consiglia di utilizzare funzioni hash lente come yescrypt, bcrypt, scrypt o Argon2). La funzione hash considerata è insensibile alla dimensione dei dati hashati ed è protetta dagli attacchi di collisione e dalla ricerca delle preimmagini.
L'algoritmo è stato sviluppato da noti esperti di crittografia (Jack O’Connor, Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O’Hearn) e continua lo sviluppo dell'algoritmo BLAKE2, impiegando per la codifica dell'albero delle catene di blocchi il meccanismo Bao. A differenza di BLAKE2 (BLAKE2b, BLAKE2s), in BLAKE3 è proposto un algoritmo unico per tutte le piattaforme, non legato alla dimensione e alla larghezza dell'hash.
L'aumento delle prestazioni è stato ottenuto grazie alla riduzione del numero di round da 10 a 7 e all'hashing separato dei blocchi in pezzi da 1 KB. Secondo quanto dichiarato dai creatori, hanno trovato una convincente prova matematica che 7 round sono sufficienti invece di 10 mantenendo lo stesso livello di affidabilità (per chiarezza, si può fare un esempio di miscelazione della frutta in un frullatore: dopo 7 secondi la frutta è già completamente mescolata, e ulteriori 3 secondi non influiscono sulla consistenza della miscela). Tuttavia, alcuni ricercatori esprimono dubbi, ritenendo che, anche se attualmente 7 round sono sufficienti per fronteggiare tutti i tipi di attacchi noti agli hash, ulteriori 3 round potrebbero rivelarsi utili in caso di nuove scoperte di attacchi in futuro.
Per quanto riguarda la suddivisione in blocchi, in BLAKE3 il flusso viene suddiviso in pezzi da 1 KB e ogni pezzo viene hashato indipendentemente. Sulla base degli hash dei pezzi, viene formata una grande hash utilizzando un albero binario di Merkle. Questa suddivisione permette di risolvere il problema del parallelismo nell'elaborazione dei dati durante il calcolo dell'hash: ad esempio, è possibile utilizzare istruzioni SIMD a 4 thread per calcolare simultaneamente gli hash di 4 blocchi. Le tradizionali funzioni hash SHA-* elaborano i dati in modo sequenziale.
Caratteristiche di BLAKE3:
- Alta performance, BLAKE3 è significativamente più veloce di MD5, SHA-1, SHA-2, SHA-3 e BLAKE2.
- Sicurezza, inclusa la resilienza contro l'attacco di estensione del messaggio, che colpisce SHA-2;
- Sono disponibili versioni in Rust, ottimizzate per l'uso delle istruzioni SSE2, SSE4.1, AVX2, AVX-512 e NEON.
- Assicurazione del parallelismo dei calcoli su qualsiasi numero di thread e canali SIMD.
- Possibilità di aggiornamento incrementale e di elaborazione verificata dei flussi;
- Applicazione in modalità PRF, MAC, KDF, XOF e come hash normale;
- Unico algoritmo per tutte le architetture, rapido sia su sistemi x86-64 che su processori ARM a 32 bit.
Principali differenze tra BLAKE3 e BLAKE2:
- Uso di una struttura ad albero binario, che consente di ottenere un parallelismo illimitato nel calcolo dell'hash.
- Riduzione del numero di round da 10 a 7.
- Tre modalità di funzionamento: hashing, hashing con chiave (HMAC) e generazione di chiavi (KDF).
- L'assenza di costi indiretti durante l'hashing con chiave grazie all'uso dell'area precedentemente occupata dal blocco dei parametri della chiave.
- Meccanismo integrato di funzionamento in forma di funzione con risultato estensibile (XOF, Extendable Output Function), che consente la parallelizzazione e il posizionamento (seek).
Fonte: opennet.ru
