BLAKE (función hash)


BLAKE es una función hash criptográfica basada en el cifrado de flujo ChaCha de Daniel J. Bernstein , pero se agrega una copia permutada del bloque de entrada, XORed con constantes de ronda, antes de cada ronda de ChaCha. Al igual que SHA-2 , existen dos variantes que difieren en el tamaño de la palabra . ChaCha opera en una matriz de palabras de 4×4. BLAKE combina repetidamente un valor hash de 8 palabras con 16 palabras de mensaje, truncando el resultado de ChaCha para obtener el siguiente valor hash. BLAKE-256 y BLAKE-224 usan palabras de 32 bits y producen tamaños de resumen de 256 bits y 224 bits, respectivamente, mientras que BLAKE-512 y BLAKE-384 use palabras de 64 bits y produzca tamaños de resumen de 512 bits y 384 bits, respectivamente.

La función hash BLAKE2 , basada en BLAKE, se anunció en 2012. La función hash BLAKE3 , basada en BLAKE2, se anunció en 2020.

BLAKE fue presentado al concurso de función hash del NIST por Jean-Philippe Aumasson, Luca Henzen, Willi Meier y Raphael C.-W. Fan. En 2008, hubo 51 entradas. BLAKE llegó a la ronda final que constaba de cinco candidatos, pero perdió ante Keccak en 2012, que fue seleccionado por el algoritmo SHA-3 .

Al igual que SHA-2 , BLAKE viene en dos variantes: una que usa palabras de 32 bits, usadas para calcular hashes de hasta 256 bits de longitud, y otra que usa palabras de 64 bits, usadas para calcular hashes de hasta 512 bits de longitud. La transformación de bloque central combina 16 palabras de entrada con 16 variables de trabajo, pero solo se conservan 8 palabras (256 o 512 bits) entre bloques.

Utiliza una tabla de 16 palabras constantes (los 512 o 1024 bits principales de la parte fraccionaria de π ) y una tabla de 10 permutaciones de 16 elementos:

La operación central, equivalente al cuarto de ronda de ChaCha, opera en una columna o diagonal de 4 palabras a b c d, que se combina con 2 palabras de mensaje m[]y dos palabras constantes n[]. Se realiza 8 veces por ronda completa: