En criptografía , Tiger [1] es una función hash criptográfica diseñada por Ross Anderson y Eli Biham en 1995 para lograr eficiencia en plataformas de 64 bits . El tamaño de un valor hash Tiger es de 192 bits. Se pueden utilizar versiones truncadas (conocidas como Tiger/128 y Tiger/160) para lograr compatibilidad con protocolos que supongan un tamaño de hash particular. A diferencia de la familia SHA-2 , no se definen valores de inicialización distintivos; son simplemente prefijos del valor hash Tiger/192 completo.
Tiger2 [2] es una variante en la que el mensaje se rellena añadiendo primero un byte con el valor hexadecimal de 0x80 como en MD4 , MD5 y SHA , en lugar de con el valor hexadecimal de 0x01 como en el caso de Tiger. Las dos variantes son idénticas en lo demás.
Tiger se basa en la construcción de Merkle–Damgård . La función de compresión unidireccional opera en palabras de 64 bits, manteniendo 3 palabras de estado y procesando 8 palabras de datos. Hay 24 rondas, utilizando una combinación de mezcla de operaciones con XOR y suma/resta, rotaciones y búsquedas de S-box , y un algoritmo de programación de claves bastante intrincado para derivar 24 claves de ronda a partir de las 8 palabras de entrada.
Aunque son rápidos en software, las grandes S-boxes de Tiger (cuatro S-boxes, cada una con 256 entradas de 64 bits que suman un total de 8 KiB ) dificultan las implementaciones en hardware o microcontroladores . [ cita requerida ]
Tiger se utiliza con frecuencia en forma de árbol hash de Merkle , donde se lo conoce como TTH ( Tiger Tree Hash ). TTH es utilizado por muchos clientes en las redes de intercambio de archivos Direct Connect y Gnutella , y puede incluirse opcionalmente en el metarchivo de BitTorrent [3] para una mejor disponibilidad del contenido.
Se consideró la inclusión de Tiger en el estándar OpenPGP , pero se abandonó en favor de RIPEMD -160. [4] [5]
RFC 2440 se refiere a TIGER como si no tuviera OID , mientras que los estándares de codificación GNU indican que TIGER tiene OID 1.3.6.1.4.1.11591.12.2
. [6] En el subárbol IPSEC , a HMAC-TIGER se le asigna OID 1.3.6.1.5.5.8.1.3
. [7] Aún no se ha anunciado ningún OID para TTH.
La especificación de Tiger no define la forma en que debe imprimirse su salida, sino que solo define que el resultado sea tres enteros ordenados de 64 bits. El programa "testtiger" en la página de inicio del autor fue pensado para permitir una fácil prueba del código fuente de prueba, en lugar de definir un orden de impresión particular. Los protocolos Direct Connect y ADC , así como el programa, tthsum
utilizan el orden de bytes little-endian, que también es el preferido por uno de los autores. [8]
En el ejemplo siguiente, los hashes Tiger de 192 bits (24 bytes) se representan como 48 dígitos hexadecimales en orden de bytes little-endian . A continuación, se muestra una entrada ASCII de 43 bytes y los hashes Tiger correspondientes:
Tigre("El rápido zorro marrón salta sobre el perro perezoso ") =6d12a41e72e644f017b6f0e2f7b44c6285f06dd5d2c5b075Tiger2("El rápido zorro marrón salta sobre el perro perezoso " ) =976abff8062a2e9dcea3a1ace966ed9c19cb85558b4976d8
Incluso un pequeño cambio en el mensaje dará como resultado (con una probabilidad muy alta) un hash completamente diferente, por ejemplo, cambiar d por c :
Tigre ("El rápido zorro marrón salta sobre el perezoso engranaje ") =a8f04b0f7201a0d728101c9d26525b31764a3493fcd8458fTiger2("El rápido zorro marrón salta sobre el perezoso engranaje ") =09c11330283a27efb51930aa7dc1ec624ff738a8d9bdd3df
El hash de la cadena de longitud cero es:
Tigre("") =3293ac630c13f0245f92bbb1766e16167a4e58492dde73f3Tigre2("") =4441be75f6018773c206c22745374b924aa8313fef919f41
A diferencia de MD5 o SHA-0/1, no se conocen ataques efectivos en el Tiger completo de 24 rondas [9] excepto por una pseudocolisión cercana. [10] Mientras que MD5 procesa su estado con 64 operaciones simples de 32 bits por bloque de 512 bits y SHA-1 con 80, Tiger actualiza su estado con un total de 144 operaciones de este tipo por bloque de 512 bits, reforzadas adicionalmente por grandes búsquedas de S-box.
John Kelsey y Stefan Lucks han descubierto un ataque de búsqueda de colisiones en un Tiger de 16 rondas con una complejidad temporal equivalente a aproximadamente 2,44 invocaciones de la función de compresión y otro ataque que encuentra pseudocolisiones cercanas en un Tiger de 20 rondas con un trabajo menor que el de 2,48 invocaciones de la función de compresión. [9] Florian Mendel et al. han mejorado estos ataques al describir un ataque de colisión que abarca 19 rondas de Tiger y un ataque de pseudocolisión cercana de 22 rondas. Estos ataques requieren un esfuerzo de trabajo equivalente a aproximadamente 2,62 y 2,44 evaluaciones de la función de compresión de Tiger, respectivamente. [11]