Se lanzó la implementación de referencia de la función hash criptográfica BLAKE3 1.0, notable por su altísima velocidad de cálculo de hash mientras mantiene la fiabilidad al nivel de SHA-3. En una prueba de generación de hash para un archivo de 16 KB, BLAKE3 con una clave de 256 bits supera a SHA3-256 en 17 veces, a SHA-256 en 14 veces, a SHA-512 en 9 veces, a SHA-1 en 6 veces, y a BLAKE2b en 5 veces. Esta ventaja se mantiene incluso al procesar grandes volúmenes de datos, por ejemplo, BLAKE3 resultó ser 8 veces más rápido que SHA-256 al calcular el hash para 1 GB de datos aleatorios. El código de la implementación de referencia de BLAKE3 está disponible en versiones en C y Rust bajo una doble licencia: dominio público (CC0) y Apache 2.0.

La función hash está diseñada para aplicaciones como verificación de integridad de archivos, autenticación de mensajes y generación de datos para firmas digitales criptográficas. BLAKE3 no está destinada a la hash de contraseñas, ya que se enfoca en calcular hashes lo más rápido posible (para contraseñas, se recomienda usar funciones hash más lentas como yescrypt, bcrypt, scrypt o Argon2). La función hash en cuestión no es sensible al tamaño de los datos hashados y está protegida contra ataques de colisión y búsqueda de preimágenes.
El algoritmo fue desarrollado por conocidos expertos en criptografía (Jack O’Connor, Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O’Hearn) y sigue la evolución del algoritmo BLAKE2, aplicando el mecanismo Bao para codificar el árbol de cadenas de bloques. A diferencia de BLAKE2 (BLAKE2b, BLAKE2s), BLAKE3 propuso un algoritmo único para todas las plataformas, no vinculado a la arquitectura ni al tamaño del hash.
Se logró mejorar el rendimiento al reducir el número de rondas de 10 a 7 y al hash por bloques de 1 KB de manera independiente. Según los creadores, encontraron una prueba matemática convincente de que se pueden usar 7 rondas en lugar de 10 manteniendo el mismo nivel de fiabilidad (para ilustrarlo, se puede dar el ejemplo de mezclar frutas en una licuadora: después de 7 segundos, las frutas ya están completamente mezcladas, y 3 segundos adicionales no afectan la consistencia de la mezcla). Sin embargo, algunos investigadores expresan dudas, considerando que aunque actualmente 7 rondas son suficientes para resistir todos los ataques conocidos a los hashes, las 3 rondas adicionales podrían ser útiles en caso de que se descubran nuevos ataques en el futuro.
En lo que respecta a la división en bloques, en BLAKE3 el flujo se divide en trozos de 1 KB y cada trozo se hash de manera independiente. A partir de los hashes de los trozos, se forma un gran hash basado en un árbol binario de Merkle. Esta división permite abordar el problema del paralelismo en el procesamiento de datos al calcular el hash; por ejemplo, se pueden usar instrucciones SIMD de 4 hilos para calcular simultáneamente los hashes de 4 bloques. Las funciones de hash tradicionales SHA-* procesan los datos de manera secuencial.
Características de BLAKE3:
- Alto rendimiento; BLAKE3 es significativamente más rápido que MD5, SHA-1, SHA-2, SHA-3 y BLAKE2.
- Seguridad, incluyendo resistencia a ataques de extensión de mensaje, a la que está expuesto SHA-2;
- Están disponibles versiones en Rust, optimizadas para el uso de instrucciones SSE2, SSE4.1, AVX2, AVX-512 y NEON.
- Facilita el paralelismo en los cálculos para cualquier número de hilos y canales SIMD.
- Posibilidad de actualización incremental y procesamiento verificado de flujos;
- Aplicación en modos PRF, MAC, KDF, XOF y como hash normal;
- Un único algoritmo para todas las arquitecturas, rápido tanto en sistemas x86-64 como en procesadores ARM de 32 bits.
Principales diferencias entre BLAKE3 y BLAKE2:
- Uso de una estructura de árbol binario que permite lograr paralelismo ilimitado al calcular el hash.
- Reducción del número de rondas de 10 a 7.
- Tres modos de operación: hash, hash con clave (HMAC) y generación de clave (KDF).
- La ausencia de gastos adicionales en el hashing con clave gracias al uso de un área anteriormente ocupada por el bloque de parámetros de la clave.
- Un mecanismo integrado que trabaja en forma de función con un resultado extensible (XOF, Extendable Output Function), que permite la paralelización y el posicionamiento (seek).
Fuente: opennet.ru
