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 de Tiger es de 192 bits. Se pueden utilizar versiones truncadas (conocidas como Tiger/128 y Tiger/160) para lograr compatibilidad con protocolos que asumen 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 completo de Tiger/192.
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. Por lo demás, las dos variantes son idénticas.
Tiger se basa en la construcción de Merkle-Damgård . La función de compresión unidireccional opera con palabras de 64 bits, mantiene 3 palabras de estado y procesa 8 palabras de datos. Hay 24 rondas, que utilizan una combinación de operación mezclada con XOR y suma/resta, rotaciones y búsquedas de S-box , y un algoritmo de programación de claves bastante complejo para derivar 24 claves de ronda a partir de las 8 palabras de entrada.
Aunque son rápidas en software, las grandes S-boxes de Tiger (cuatro S-boxes, cada una con 256 entradas de 64 bits con un total de 8 KiB ) dificultan las implementaciones en hardware o microcontroladores . [ cita necesaria ]
Tiger se utiliza con frecuencia en forma de árbol de hash Merkle , donde se le conoce como TTH ( Tiger Tree Hash ). Muchos clientes utilizan TTH en las redes de intercambio de archivos Direct Connect y Gnutella y, opcionalmente, se puede incluir en el metarchivo 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 enumeran a TIGER como si tuviera 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 se debe imprimir su salida, solo define el resultado como tres enteros ordenados de 64 bits. El programa "testtiger" en la página de inicio del autor tenía como objetivo permitir una prueba sencilla del código fuente de prueba, en lugar de definir un orden de impresión en 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 siguiente ejemplo, 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 veloz zorro marrón salta sobre el perro perezoso " ) =6d12a41e72e644f017b6f0e2f7b44c6285f06dd5d2c5b075Tiger2("El veloz 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, cambiando 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 del MD5 o SHA-0/1, no se conocen ataques efectivos contra el Tiger de 24 balas [9], excepto por una pseudo-casi colisión. [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, reforzado adicionalmente por grandes S- búsquedas de cajas.
John Kelsey y Stefan Lucks han encontrado un ataque de búsqueda de colisiones en Tiger de 16 rondas con una complejidad temporal equivalente a aproximadamente 244 invocaciones de función de compresión y otro ataque que encuentra pseudo-casi colisiones en Tiger de 20 rondas con un trabajo menor que el de 2 48 invocaciones de funciones de compresión. [9] Florián Mendel et al. han mejorado estos ataques describiendo un ataque de colisión que abarca 19 rondas de Tiger y un ataque de pseudo-casi-colisión 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 Tiger, respectivamente. [11]