SIMD | |
---|---|
Creado | 2008 |
publicado | octubre de 2008 |
tamaño de hash | 256 o 512 bits |
Número de rondas | cuatro |
Tipo de | función hash |
SIMD es una función hash criptográfica iterativa desarrollada por Gaëtan Leurent, Charles Bouillaguet, Pierre-Alain Fouque. Fue nominada como candidata a la competencia estándar SHA-3 realizada por el Instituto Nacional de Estándares y Tecnología (EE. UU.) , donde pasó a la segunda ronda [1] .
Hay dos versiones de la función hash, SIMD-256 y SIMD-512, que convierten un mensaje de longitud arbitraria en un valor hash de 256 o 512 bits, también llamado resumen de mensaje . Además, es posible definir las funciones hash SIMD-n como truncamientos de las funciones SIMD-256 y SIMD-512 para n<256 y 256<n<512 respectivamente [2] .
Según los creadores, la característica principal de la función hash es una expansión significativa del mensaje, lo que le permite protegerse del criptoanálisis diferencial [3] .
La parte principal de la función hash h es la función de compresión . Para calcular h(M) , el mensaje M se divide en k partes de m bits cada una. La función de compresión : se aplica iterativamente a las partes del mensaje . El estado inicial o vector de inicialización se designa y fija para cada función de la familia SIMD. El resultado final de la función hash se obtiene aplicando la función de finalización a .
La función de compresión C en el modo Davis-Meier generalmente se construye utilizando la función de cifrado de bloque : , sin embargo, se utilizan varias mejoras para la función hash SIMD.
La familia SIMD de funciones hash utiliza los siguientes parámetros:
Tamaño de hash, n | Tamaño del bloque de mensajes, m | Tamaño del estado interno ( ), p | |
---|---|---|---|
SIMD-256 | 256 | 512 | 512 |
SIMD-512 | 512 | 1024 | 1024 |
El estado interno está representado por una matriz de 4x4 de palabras de 32 bits para SIMD-256 y 8x4 para SIMD-512.
La función de compresión SIMD se basa en el diseño de Davis-Meyer con algunas modificaciones.
Primero, en lugar de la función de compresión , el .
En segundo lugar, en lugar de la operación XOR para y en SIMD, se utilizan varias rondas de Feistel adicionales con h como clave de entrada. Esta acción es realizada por la función .
Por lo tanto, la función de compresión se define como . Según los autores de la función hash SIMD, estas modificaciones proporcionan el mismo nivel de seguridad que el diseño original de Davis-Meyer, pero al mismo tiempo evitan algunos tipos de ataques multibloque [4] .
La expansión de mensajes de la función hash SIMD-256 (resp. SIMD-512) convierte un bloque de mensajes de 512 bits (resp. 1024 bits) en un mensaje extendido de 4096 bits (resp. 8192 bits) con una distancia mínima de 520 ( respectivamente .1032).
El uso de la estructura Feistel por la función hash SIMD se construye de manera similar a la familia de funciones hash MD/SHA:
o en un formato más conveniente:
para SIMD-256
para SIMD-512
donde es una función lógica, es la adición de módulo y es un desplazamiento cíclico a la izquierda por bit.
Se utilizan 4 celdas Feistel paralelas para SIMD-256 (resp. 8 para SIMD-512), que interactúan entre sí debido a permutaciones . Las permutaciones se eligen para asegurar una buena mezcla.
Para SIMD-256 se define:
En consecuencia para SIMD-512:
En general, la función de compresión funciona en 4 rondas, cada una de las cuales consta de 8 pasos (pasos), más una ronda final adicional.
Una vez que se han comprimido todos los bloques del mensaje, se realiza otra llamada adicional a la función de compresión con el tamaño del mensaje como entrada. En este caso, la longitud del mensaje se calcula en módulo de bits si es necesario.
Para la función de compresión final, se utiliza un método de expansión de mensajes ligeramente modificado:
para SIMD-256 se utiliza en lugar de .
En consecuencia, para SIMD-512, en lugar de usar
Por lo tanto, el rango de mensajes extendidos para la etapa final es diferente del rango de mensajes extendidos de los bloques del cuerpo del mensaje.
Después de aplicar la función de compresión final, la salida es la siguiente representación de cadena:
para SIMD-256
para SIMD-512
En el caso de SIMD-n, se emiten los primeros n bits de SIMD-256 (n < 256) o SIMD 512 (256 < n < 512). Por ejemplo, para SIMD-384 la salida será
Cada función hash de la familia SIMD utiliza su propio IV para evitar enlaces entre las salidas de diferentes funciones SIMD-n. El IV para la función SIMD-n se define de la siguiente manera:
IV = SIMD-Compress(0, "SIMD-(i)" v1.0, 0) donde la cadena está en ASCII rellenada con ceros e (i) es la representación decimal de n.
Valores IV para varias funciones hash de la familia SIMD:
2 partes del algoritmo han sufrido cambios: permutaciones y cambios cíclicos (rotaciones) [5] .
Al elegir nuevas permutaciones, los autores de la función hash se guiaron por los siguientes criterios:
SIMD-256. Permutaciones iniciales:
Nuevas permutaciones:
donde _ Así, el número de permutaciones aumentó de 2 a 3.
SIMD-512. Permutaciones iniciales:
Nuevas permutaciones:
donde _ Así, el número de permutaciones aumentó de 4 a 7.
Mensaje M | SIMD-256(M) |
---|---|
mensaje vacio | 8029e81e7320e13ed9001dc3d8021fec695b7a25cd43ad805260181c35fcaea8 |
0x00; 0x01; 0x02; … 0x3f | 5bebdb816cd3e6c8c2b5a42867a6f41570c4b917f1d3b15aabc17f24679e6acd |
Mensaje M | SIMD-512 (M) |
---|---|
mensaje vacio | 51a5af7e243cd9a5989f7792c880c4c3168c3d60c4518725fe5757d1f7a69c63 66977eaba7905ce2da5d7cfd07773725f0935b55f3efb954996689a49b6d29e0 |
0x00; 0x01; 0x02; … 0x3f | 8851ad0a57426b4af57af3294706c0448fa6accf24683fc239871be58ca913fb ee53e35c1dedd88016ebd131f2eb0761e97a3048de6e696787fd5f54981d6f2c |
Las pruebas de rendimiento independientes del algoritmo SIMD, realizadas con el banco de pruebas eBASH , mostraron los siguientes resultados (la velocidad se indica en ciclos por byte ( cpb )) [8] [3] :
UPC | Núcleo i5 | Núcleo 2 (45nm) | Núcleo 2 (65nm) |
---|---|---|---|
SIMD-256 | 7.51 cpb | 9,18 cpb | 11,34 cb |
SIMD-512 | 8,63 cpb | 10.02 cbp | 12.05 cpb |
Al mismo tiempo, aproximadamente la mitad del tiempo de la función hash se dedica a la operación de expansión del mensaje: la Transformación teórica de números (NTT) es la parte más costosa del algoritmo en términos de rendimiento.
La función de compresión SIMD tiene una arquitectura parcialmente paralela, lo que le permite crear implementaciones eficientes del algoritmo utilizando instrucciones vectoriales ( SIMD ). Estas instrucciones están disponibles en muchas arquitecturas conocidas: SSE en x86 , AltiVec en PowerPC , IwMMXt en ARM .
En términos de requisitos de RAM, la función hash SIMD necesita memoria para almacenar el estado interno (64 bytes para SIMD-256 y 128 bytes para SIMD-512) y memoria para valores de salida NTT (4*64 = 256 bytes para SIMD-256 y 4*128 = 512 bytes para SIMD-512).
La función hash SIMD no fue seleccionada como finalista en el concurso SHA-3.
Los expertos del concurso señalaron que aunque la función hash SIMD repite en gran medida los algoritmos de las familias MD/SH, las mejoras realizadas por los autores realmente permitieron proteger SIMD de muchos tipos de ataques (por ejemplo, un ataque de colisión ). Además, los cambios realizados para la segunda ronda pudieron proteger la función hash SIMD del ataque de criptoanálisis diferencial realizado por Mendel y Nad, al que SIMD estuvo expuesto en su implementación original [9] .
Sin embargo, los altos requisitos de RAM y la disponibilidad de instrucciones SIMD para un buen rendimiento hacen que la función hash sea un mal candidato para la implementación de FPGA [10] . Principalmente por esta razón, la función hash SIMD no llegó a la etapa final de la competencia.
Funciones hash | |
---|---|
propósito general | |
Criptográfico | |
Funciones de generación de claves | |
Número de cheque ( comparación ) | |
Hachís |
|