SHAKE Stirs-up Crypto

Cuando enseño criptografía, normalmente defino los métodos hash (MD5, SHA-1, SHA-256, etc.), los métodos de clave simétrica (AES , 3DES, ChaCha20, etc.) y métodos de clave asimétrica (ECC, RSA, ElGamal, etc.). Y entonces incluyo SHA-3 como método hash, de la misma manera que hablo de MD5, SHA-1 y SHA-256. Introducimos algunos datos y aparece una firma hash de longitud fija.

Pero si separa SHA-3 de su salida de longitud fija, obtiene una Función de salida extensible (XOF). Esto ahora tiene el potencial de producir un conjunto casi infinito de salidas, y donde podríamos tomar un solo byte y producir una salida de mil millones de bytes, o incluso tomar mil millones de bytes de entrada y producir una salida de un solo byte. En esencia, es un generador de estados , y con entradas dadas, podemos alcanzar un estado bien definido. Podemos exponer el estado a cualquiera, ya que no conocerá los secretos que nos permiten llevarnos al estado anterior y al siguiente.

Una función hash: SHA-3

NIST organizó un concurso para obtener una función hash para reemplazar SHA-1 y SHA-2, y seleccionar a Keccak como ganador. Desde entonces se ha definido como SHA-3. Los siguientes son vectores de prueba para “abc” [Vectores de prueba] [Muestra]:

y para “” es [Prueba]:

AGITAR

Lo interesante de SHA-3 es que almacena un valor de estado y, por lo tanto, podemos usarlo para sincronizar mensajes (y donde cada lado tiene el mismo estado, dados los valores de inicialización secretos). Este estado (S) se define con una matriz de 5 × 5 de palabras de w bits (con w = 64). Esto da b = 5 × 5 × w = 5 × 5 × 64 = 1600 bits en total. Entonces, si bien SHA-3 es excelente para crear funciones hash, podemos extenderlo con SHAKE-128 ( SHA y KE ccak) y SHAKE-256 para dar una salida que tiene una longitud de salida arbitraria.

Esto extiende el uso del método hacia el cifrado de clave simétrica (y donde un valor de entrada y una sal, nos da un valor de estado dado). Por tanto, SHAKE se define como funciones de salida ampliables (XOF).

La siguiente es una ejecución de prueba de ocho bytes [Prueba]:

Pero podemos seleccionar para un byte [Prueba]:

O 32 bytes [Prueba]:

El siguiente es un resumen del código:

El poder de esto es asombroso. Ahora podemos tomar una palabra de “hola” y agregar una clave secreta de cualquier longitud, y producir una permutación de la entrada. Por tanto, podemos variar el nivel de seguridad de la salida en función de nuestros requisitos. Si tenemos un dispositivo de procesamiento limitado, podríamos usar una salida hash de 2 bytes (16 bits), pero con una más potente, podríamos generar una salida de 32 bytes (256 bits).

Las principales ventajas del método SHAKE son:

Incluso hay una versión personalizable para SHAKE (y llamada cSHAKE), y que requiere una cadena de personalización:

Si desea ver cómo se usa, intente aquí:

El siguiente es un resumen del código en Go [aquí]:

Conclusiones

SHAKE y SHA-3 se definen como FIPS 202. Tenga en cuenta que SHAKE no es un buen método de hash de contraseñas, ya que es extremadamente rápido. Los métodos mejorados son Bcrypt y PBKDF2. Para los dispositivos de IoT, SHAKE proporciona un recurso excelente, ya que se puede aplicar en un entorno de criptografía liviana y es eficiente con el consumo de energía, ya que no requiere una gran huella física y lógica. Pero SHAKE hace muchas otras cosas, y se verá cada vez más en el núcleo de muchos sistemas de seguridad, y no solo para producir hashes.