Tiger es una función hash criptográfica desarrollada por Ros Anderson y Eli Biham en 1995.
Tiger fue diseñado para ejecutarse particularmente rápido en computadoras de 64 bits. Tiger no tiene restricciones de patente, se puede usar libremente tanto con la implementación de referencia como con sus modificaciones. El tamaño del valor hash es de 192 bits (Tiger/192), aunque también existen versiones más cortas por compatibilidad con SHA-1 (Tiger/160) y con MD4 , MD5 , RIPEMD, Snefru (Tiger/128). Velocidad de funcionamiento: 132 Mbps (probado en un procesador Alpha 7000, modelo 660). En los procesadores modernos es mucho más rápido (incluso cuando se prueba en un AMD Sempron 3000+ de 32 bits, la velocidad es de unos 225 Mbps).
Tiger2 es una versión de Tiger que difiere de la principal solo en un algoritmo de adición de bits diferente, similar a MD5 / SHA-1 . Los vectores de prueba están disponibles para Tiger2.
El algoritmo fue desarrollado en 1995 por Ross Anderson y Eli Biham. Esa época se caracterizó por el hecho de que ya se encontraban colisiones para las populares funciones hash MD4 y Snefru . Estos últimos, según los autores, pusieron en duda la fiabilidad de sus derivados, como MD5 y Snefru-8 . Los principales objetivos en el desarrollo de Tiger fueron:
El número de S-boxes utilizados es 4. S-box convierte 8 bits a 64 bits. Es decir, cada uno de ellos tiene 256 palabras de 64 bits y la cantidad total de memoria requerida para almacenar S-boxes es 4*256*8 = 8192 = 8 KB. Para ello basta con la memoria caché de la mayoría de los procesadores, aunque puede ser difícil de implementar en microcontroladores.
Al igual que con la familia MD4 , se agrega un bit "1" al mensaje seguido de ceros. Los datos de entrada se dividen en n bloques de 512 bits.
Seleccione el primer bloque de 512 bits. Este bloque se divide en ocho palabras de 64 bits x0, x1, ..., x7. El orden de los bytes es little-endian .
Se toman tres registros de 64 bits con valores iniciales (valor hash ):
a = 0x0123456789ABCDEF b=0xFEDCBA9876543210 c = 0xF096A5B4C3B2E187Ahora, para pasar de valor a valor , se realizan las siguientes operaciones:
Aquí save_abc guarda el valor :
aa = un bb = segundo cc=cpass(a, b, c, mul) significa:
ronda(a,b,c,x0,mul) redondo (b, c, a, x1, mul) ronda(c,a,b,x2,mul) ronda(a,b,c,x3,mul) redondo (b, c, a, x4, mul) ronda(c,a,b,x5,mul) ronda(a,b,c,x6,mul) redondo (b, c, a, x7, mul)donde ronda (a, b, c, x, mul) :
c ^ = x a -= t1[c_0] ^ t2[c_2] ^ t3[c_4] ^ t4[c_6] b += t4[c_1] ^ t3[c_3] ^ t2[c_5] ^ t1[c_7] b *= mulc_i — i-ésimo byte c (0 <= i <= 7);
^ - operación XOR;
ti - i-ésima caja S
key_schedule - generación de claves, una función reversible que es responsable de cambiar una pequeña cantidad de bits del mensaje x para hacer que cambie una gran cantidad de bits en la siguiente ejecución de pass :
x0 -= x7^0xA5A5A5A5A5A5A5A5 x1 ^= x0 x2 += x1 x3 -= x2 ^ ((~x1)<<19) x4 ^= x3 x5 += x4 x6 -= x5 ^ ((~x4)>>23) x7 ^= x6 x0 += x7 x1 -= x0 ^ ((~x7)<<19) x2 ^= x1 x3 += x2 x4 -= x3 ^ ((~x2)>>23) x5 ^= x4 x6 += x5 x7 -= x6^0x0123456789ABCDEFdonde <<y >> son desplazamientos lógicos a izquierda y derecha, ~ es la inversión
realimentación - retroalimentación:
un ^ = aa b -= bb c += ccEs decir, obtenemos 24 rondas en total. La concatenación de los valores recibidos a , b , c da un valor hash intermedio , que se utiliza como valor inicial para el siguiente bloque de datos de 512 bits. Un valor intermedio en el último bloque da un valor Tiger/192 de 192 bits.
Ejemplos de valores hash obtenidos con el programa testtiger de la página del autor [1] .
Hash("") = 24F0130C63AC9332 16166E76B1BB925F F373DE2D49584E7A Hash("Tigre") = 9F00F599072300DD 276ABB38C8EB6DEC 37790C116F9D2BDFAspectos clave de seguridad del Tiger:
Un ataque de clave vinculada es un ataque en el que un criptoanalista puede calcular un hash para varios valores diferentes de vectores de inicialización que no conoce, pero conoce alguna relación entre ellos (por ejemplo, que difieren en un bit o que alguna parte de todos los vectores es uno y el mismo). Debido a este tipo de ataque, el cifrado WEP tuvo que cambiarse a WPA .
Un ataque de cumpleaños intermedio es un ataque de cumpleaños aplicado en rondas intermedias para lograr los valores hash deseados. Aunque, según los autores, es poco probable que los ataques de este tipo conduzcan a una menor complejidad (de acuerdo con la paradoja del cumpleaños ).
Sea h(x, m) una función hash , donde x es un vector de inicialización, m es un bloque de mensaje. ^ es la operación XOR, w{} es el peso de Hamming (el número de componentes distintos de cero del número binario ). Después:
Idealmente, de acuerdo con la paradoja del cumpleaños , encontrar una colisión de una función hash de N bits requeriría al menos operaciones.
En 2006, John Kelsey y Stefan Lax introdujeron una colisión Tiger-16 (con 16 rondas en lugar de 24) con dificultad y una casi pseudo-colisión para Tiger-20 con dificultad . Más tarde ese año, Florian Mendel et al., mostraron cómo aplicar la técnica de ataque de John Kelsey y Stefan Lax para conseguir una colisión del Tiger-19, y también propusieron dos técnicas diferentes para conseguir esta colisión con y .
Número de rondas | Tipo de | Complejidad | Descripción |
Tigre-16 | colisión | [Articulo 1] | |
tigre-19 | colisión | y | [Artículo 2] |
tigre-19 | pseudocolisión | [Artículo 2] | |
Tigre-21 | pseudocolisión | [Artículo 2] | |
Tigre-23/128 | pseudocolisión | [Artículo 2] | |
Tigre-23 | pseudocolisión | [artículo 3] | |
Tigre-20 | casi pseudo-colisión | [Articulo 1] | |
Tigre-21 | casi pseudo-colisión | [Artículo 2] | |
tigre-22 | casi pseudo-colisión | [Artículo 2] | |
Tigre-24 | casi pseudo-colisión | [artículo 3] |
Expliquemos la idea de encontrar una colisión para Tiger-16, es decir, para un Tiger con 16 rondas, descrita por John Kelsey y Stefan Laks [artículo 1] .
Consideramos palabras de 64 bits. Estaremos tratando con una diferencia entre dos tipos de palabras: la diferencia xor y la diferencia aditiva . El primero de ellos es el resultado del módulo de diferencia habitual , y el segundo es el resultado de la operación XOR. Por lo general, la transformación de un tipo de diferencia en otro es una cuestión de azar. Pero hay un caso en el que dos tipos de diferencias son iguales entre sí con probabilidad 1. Es decir, cuando la diferencia , es válida en este caso, las palabras simplemente difieren entre sí por el bit más significativo. También notamos la propiedad de diferencia: no cambia si la palabra se multiplica por un número impar (lo cual es muy conveniente, ya que el algoritmo usa impar mul = 5, 7, 9).
deja _ bajo conjunto
(I0, I1, I2, I3, I4, I5, I6, I7)queremos decir que la diferencia entre las j-ésimas (j = 0, 1, ..., 7) palabras de 64 bits de las claves es igual (no importa de qué tipo, ya que solo consideraremos diferencias y 0) . Es decir, = xj ^ xj'.
John Kelsey y Stefan Laks propusieron tomar dos bloques (512 bits cada uno) con un vector de diferencia . Si sigue el algoritmo, teniendo en cuenta las propiedades de las diferencias, puede mostrar que después del primer paso (después de las rondas 0, 1, ..., 7) y key_schedule habrá un vector . Después de las rondas 8-9 obtenemos , y las rondas 10-15 no afectan la diferencia. Por lo tanto, obtenemos la técnica de mantener diferencias entre claves con una probabilidad de 1.
Al mismo tiempo, con la ayuda de modificaciones de mensajes a través de ataques intermedios de cumpleaños , se resuelve el problema de mantener la diferencia en los valores hash a, b, c, de modo que después de la ronda 6 había un vector de diferencia , y después de las rondas 7-9 - . La técnica de modificación de mensajes es la que más tiempo consume, que es donde se obtiene la complejidad resultante . Las rondas 10-15 no harán ninguna diferencia (de hecho, las claves de este paso ya son las mismas).
Es decir, después de 16 rondas, los valores hash coincidirán.
Tiger se utiliza en la tecnología TTH , donde el hash se calcula en forma de árbol. TTH , a su vez, se utiliza en los protocolos de intercambio de archivos Gnutella , Gnutella2 , Direct Connect , así como en el alojamiento de archivos Phex, BearShare, LimeWire , Shareaza , DC++ y Valknut .
Funciones hash | |
---|---|
propósito general | |
Criptográfico | |
Funciones de generación de claves | |
Número de cheque ( comparación ) | |
Hachís |
|