Rilascio dell'implementazione di riferimento della funzione hash crittografica BLAKE3 1.0

È stata rilasciata un'implementazione di riferimento della funzione hash crittografica BLAKE3 1.0, notevole per le sue prestazioni di calcolo dell'hash molto elevate garantendo allo stesso tempo affidabilità a livello SHA-3. Nel test di generazione dell'hash per un file da 16 KB, BLAKE3 con una 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 - 5 volte. Rimane un divario significativo durante l'elaborazione di quantità di dati molto grandi, ad esempio BLAKE3 si è rivelato 256 volte più veloce di SHA-8 nel calcolo di un hash per 1 GB di dati casuali. Il codice di implementazione di riferimento BLAKE3 è disponibile nelle versioni C e Rust con doppia licenza di dominio pubblico (CC0) e Apache 2.0.

Rilascio dell'implementazione di riferimento della funzione hash crittografica BLAKE3 1.0

La funzione hash è progettata per applicazioni quali il controllo dell'integrità dei file, l'autenticazione dei messaggi e la generazione di dati per le firme digitali crittografiche. BLAKE3 non è destinato all'hashing delle password, poiché mira a calcolare gli hash il più rapidamente possibile (per le password, si consiglia di utilizzare le funzioni di hash lente yescrypt, bcrypt, scrypt o Argon2). La funzione hash in questione è insensibile alla dimensione dei dati sottoposti ad hashing ed è protetta dagli attacchi alla selezione delle collisioni e alla ricerca della preimmagine.

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 e utilizza il meccanismo Bao per codificare l'albero della catena di blocchi . A differenza di BLAKE2 (BLAKE2b, BLAKE2s), BLAKE3 offre un unico algoritmo per tutte le piattaforme, non legato alla profondità di bit e alla dimensione dell'hash.

L'aumento delle prestazioni è stato ottenuto riducendo il numero di cicli da 10 a 7 e eseguendo l'hashing dei blocchi separatamente in pezzi da 1 KB. Secondo gli ideatori, hanno trovato una prova matematica convincente che è possibile cavarsela con 7 giri invece di 10 mantenendo lo stesso livello di affidabilità (per chiarezza, possiamo fare un esempio mescolando la frutta in un mixer - dopo 7 secondi la frutta è già completamente amalgamata, ulteriori 3 secondi non influiranno sulla consistenza del composto). Tuttavia, alcuni ricercatori esprimono dubbi, ritenendo che anche se 7 round siano attualmente sufficienti per contrastare tutti gli attacchi noti agli hash, altri 3 round potrebbero essere utili se in futuro verranno identificati nuovi attacchi.

Per quanto riguarda la divisione in blocchi, in BLAKE3 lo stream è diviso in pezzi da 1 KB e ogni pezzo viene sottoposto ad hashing in modo indipendente. Sulla base degli hash dei pezzi, viene formato un grande hash basato sull'albero binario Merkle. Questa divisione ci consente di risolvere il problema della parallelizzazione dell'elaborazione dei dati durante il calcolo degli hash: ad esempio, è possibile utilizzare istruzioni SIMD a 4 thread per calcolare contemporaneamente hash di 4 blocchi. Le tradizionali funzioni hash SHA-* elaborano i dati in sequenza.

Caratteristiche di BLAKE3:

  • Ad alte prestazioni, BLAKE3 è significativamente più veloce di MD5, SHA-1, SHA-2, SHA-3 e BLAKE2.
  • Sicurezza, inclusa la resistenza agli attacchi di allungamento dei messaggi a cui SHA-2 è suscettibile;
  • Sono disponibili varianti Rust, ottimizzate per le istruzioni SSE2, SSE4.1, AVX2, AVX-512 e NEON.
  • Garantire la parallelizzazione dei calcoli su qualsiasi numero di thread e canali SIMD.
  • Possibilità di aggiornamento incrementale ed elaborazione verificata dei flussi;
  • Utilizzare in modalità PRF, MAC, KDF, XOF e come hash normale;
  • Un unico algoritmo per tutte le architetture, veloce sia su sistemi x86-64 che su processori ARM a 32 bit.

Le principali differenze tra BLAKE3 e BLAKE2:

  • Utilizzo di una struttura ad albero binario che consente un parallelismo illimitato nei calcoli dell'hash.
  • Ridurre il numero di round da 10 a 7.
  • Tre modalità di funzionamento: hashing, hashing con chiave (HMAC) e generazione di chiavi (KDF).
  • Nessun sovraccarico aggiuntivo durante l'hashing con una chiave dovuto all'utilizzo dell'area precedentemente occupata dal blocco dei parametri chiave.
  • Meccanismo operativo integrato sotto forma di funzione con risultato esteso (XOF, Extendable Output Function), che consente la parallelizzazione e il posizionamento (ricerca).

Fonte: opennet.ru

Aggiungi un commento