Torbellino | |
---|---|
Desarrolladores |
Vincent Barreto _ |
Publicado por primera vez | noviembre de 2000 |
Estándares | Portafolio NESSIE ( 2003 ), ISO/IEC 10118-3:2004 ( 2004 ) |
tamaño de hash | 512 bits |
Número de rondas | diez |
Tipo de | función hash |
Whirlpool es una función hash criptográfica desarrollada por Vincent Rayman y Paulo Barreto . Publicado en noviembre de 2000 . Hashes el mensaje de entrada hasta bits de largo. El valor de salida de la función hash de Whirlpool , llamada hash , es de 512 bits.
La función hash Whirlpool lleva el nombre de Whirlpool Galaxy (M51) en la constelación Canis Hounds , la primera galaxia con una estructura espiral observable.
Desde su creación en 2000, Whirlpool se ha modificado dos veces.
La primera versión, Whirlpool-0, se presenta como candidata en el proyecto NESSIE ( ing. New European Schemes for Signatures, Integrity and Encryption , nuevos proyectos europeos sobre firma digital , integridad y cifrado).
Una modificación de Whirlpool-0, llamada Whirlpool-T, se agregó a la lista NESSIE de funciones criptográficas recomendadas en 2003 . Los cambios se referían al bloque de sustitución ( S-box ) de Whirlpool: en la primera versión, la estructura S-box no estaba descrita y se generaba de forma arbitraria, lo que creaba ciertos problemas en la implementación hardware de Whirlpool. En la versión Whirlpool-T, el S-box "adquirió" una estructura clara.
Posteriormente se corrigió un defecto en las matrices difusas Whirlpool-T descubierto por Taizō Shirai y Kyoji Shibutani [1] , y la versión final (tercera), llamada simplemente Whirlpool para abreviar, fue adoptada por ISO en ISO/IEC 10118-3: 2004 en 2004.
La versión principal, funciones hash, es la tercera; a diferencia de la primera versión, el S-box se define y la matriz difusa se reemplaza por una nueva después del informe de Shirai y Shibutani [1] .
Whirlpool consiste en volver a aplicar la función de compresión , que se basa en un cifrado de bloque especial de 512 bits con una clave de 512 bits.
El algoritmo utiliza operaciones en el campo de Galois módulo un polinomio irreducible .
Los polinomios se escriben en hexadecimal por brevedad. Por ejemplo, la entrada significa .
Whirlpool se basa en un cifrado de bloque especial que funciona con datos de 512 bits.
En las transformaciones, el resultado intermedio de un cálculo hash se denomina estado hash, o simplemente estado . En computación, un estado generalmente se representa mediante una matriz de estado . Para Whirlpool, esta es una matriz en formato . Por lo tanto, los bloques de datos de 512 bits deben convertirse a este formato antes de realizar más cálculos. Esto se logra introduciendo la función :
En pocas palabras, la matriz de estado se llena de datos línea por línea. En este caso, cada byte de la matriz es el polinomio correspondiente en .
La función consiste en aplicar una caja de sustitución ( S-box ) en paralelo a todos los bytes de la matriz de estado:
El bloque de sustitución se describe en la siguiente tabla de sustitución:
|
||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
La permutación rota cada columna de la matriz de estado para que la columna baje posiciones:
La tarea de esta transformación es mezclar los bytes de las filas de la matriz de estado entre sí.
Difusión linealLa difusión lineal es una transformación lineal cuya matriz es la matriz MDS , es decir:
En otras palabras, la matriz de estado se multiplica desde la derecha por la matriz . Recuérdese que las operaciones de suma y multiplicación de elementos de matriz se realizan en .
Una matriz MDS es una matriz sobre un campo finito que si la tomamos como una matriz de una transformación lineal de espacioa espacio, entonces dos vectores cualquiera delvistatendrán al menosdiferencias en los componentes. Es decir, un conjunto de vectores de vistaforma un código que tiene la propiedad de espaciamiento máximo ( inglés. Maximum Distance Separable code ). Tal código es, por ejemplo, el código Reed-Solomon .
En Whirlpool, la propiedad de máxima diversidad de una matriz MDS significa que el número total de bytes cambiantes del vector y el vector es al menos . En otras palabras, cualquier cambio en un solo byte da como resultado un cambio en los 8 bytes . Este es el problema de la difusión lineal .
Como se mencionó anteriormente, la matriz MDS en la última (tercera) versión de Whirlpool se modificó gracias a un artículo de Taizo Shirai y Kyoji Shibutani[1] . Analizaron la matriz MDS de la segunda versión de Whirlpool y señalaron la posibilidad de mejorar la resistencia de Whirlpool al criptoanálisis diferencial . También propusieron 224 candidatos para la nueva matriz MDS. De esta lista, los autores de Whirlpool eligieron la opción más fácil de implementar en hardware.
Agregar una claveLa función de suma de claves es una suma bit a bit ( XOR ) de las matrices de estado y clave :
Constantes redondasCada ronda utiliza una matriz de constantes tal que:
Esto demuestra que la primera fila de la matriz es el resultado de aplicar un bloque de sustitución a los números de byte .
Las 7 líneas restantes son cero.
Función redondaPara cada ronda , la función de ronda es una transformación compuesta cuyo parámetro es la matriz clave . La función de ronda se describe de la siguiente manera:
Se requiere una clave de cifrado de 512 bits para cada ronda . Para resolver este problema, muchos algoritmos introducen el llamado procedimiento de expansión de claves . En Whirlpool , la expansión clave se implementa de la siguiente manera:
Así, a partir de la clave conocida , se produce la secuencia requerida de claves para cada ronda del cifrado de bloques .
Un cifrado de bloque especial de 512 bits utiliza una clave de 512 bits como parámetro y realiza la siguiente secuencia de transformaciones:
donde las claves se generan mediante el procedimiento de expansión de claves descrito anteriormente . En la función hash de Whirlpool, el número de rondas es .
Whirlpool, como cualquier otra función hash , debe codificar un mensaje de longitud arbitraria. Dado que el bloque de cifrado interno funciona con mensajes de entrada de 512 bits, el mensaje original debe dividirse en bloques de 512 bits. En este caso, el último bloque, que contiene el final del mensaje, puede estar incompleto.
Para resolver este problema, Whirlpool utiliza el algoritmo de aumento de mensajes de entrada Merkle-Damgor . El resultado de completar el mensaje es un mensaje cuya longitud es un múltiplo de 512. Sea la longitud del mensaje original. Luego resulta en varios pasos:
El mensaje suplementado está escrito como
y se divide en bloques de 512 bits para su posterior procesamiento.
Whirlpool utiliza el esquema -Preneel
los bloques del mensaje rellenado se cifran secuencialmente con un cifrado de bloque :
donde ( ing. vector de inicialización, vector de inicialización ) es una cadena de 512 bits rellena con "0".
El resumen del mensaje es el valor de salida de la función de compresión, convertido de nuevo a una cadena de 512 bits:
Se dice que una función hash es criptográficamente segura si cumple los tres requisitos básicos en los que se basan la mayoría de las aplicaciones de las funciones hash en criptografía : irreversibilidad , resistencia a colisiones de tipo 1 y resistencia a colisiones de tipo 2 .
Sea una subcadena arbitraria de bits de un hash de Whirlpool de 512 bits. Los autores de Whirlpool afirman que la función hash que crearon cumple los siguientes requisitos de solidez criptográfica :
Los autores de Whirlpool agregaron una nota a esta declaración:
Estas declaraciones se derivan de un margen significativo de seguridad contra todos los ataques conocidos. Sin embargo, entendemos que es imposible hacer afirmaciones no especulativas sobre cosas desconocidas.
Hasta la fecha, WHIRLPOOL es resistente a todo tipo de criptoanálisis . Durante los 8 años de existencia de Whirlpool, no se ha registrado ni un solo ataque.
Sin embargo, en 2009 se publicó un nuevo método para atacar las funciones hash : el ataque de rebote [2] [3] . Los primeros "conejillos de indias" del nuevo ataque fueron las funciones hash Whirlpool y Grøstl . Los resultados del criptoanálisis realizado se muestran en la tabla.
función hash | Número de rondas | Complejidad | Cantidad de memoria necesaria | Tipo de colisión |
---|---|---|---|---|
Torbellino | colisión | |||
colisión semi-libre | ||||
semi-libre casi colisión | ||||
Grostl-256 | colisión semi-libre |
Los autores del estudio utilizaron los siguientes conceptos y términos:
Tipos de colisión :
Como se puede ver en la tabla, logramos generar una colisión para Whirlpool solo para su versión "reducida" de 4.5 rondas. Además, la complejidad de los cálculos necesarios es bastante alta.
Whirlpool es una función hash disponible gratuitamente . Por lo tanto, es muy utilizado en software de código abierto . Estos son algunos ejemplos del uso de Whirlpool:
Por conveniencia, los 512 bits (64 bytes) del hash de Whirlpool a menudo se representan como un número hexadecimal de 128 dígitos.
Como se mencionó anteriormente, el algoritmo ha sufrido dos cambios desde su lanzamiento en 2000. A continuación, se muestran ejemplos de hashes calculados a partir del texto ASCII de The quick brown fox jumps over the lazy dog pangram para las tres versiones de Whirlpool:
Whirlpool-0("El veloz zorro marrón salta sobre el perro perezoso") = 4F8F5CB531E3D49A61CF417CD133792CCFA501FD8DA53EE368FED20E5FE0248C 3A0B64F98A6533CEE1DA614C3A8DDEC791FF05FEE6D971D57C1348320F4EB42D Whirlpool-T("El veloz zorro marrón salta sobre el perro perezoso") = 3CCF8252D8BBB258460D9AA999C06EE38E67CB546CFFCF48E91F700F6FC7C183 AC8CC3D3096DD30A35B01F4620A1E3A20D79CD5168544D9E1B7CDF49970E87F1 Remolino("El veloz zorro marrón salta sobre el perro perezoso") = B97DE512E91E3828B40D2B0FDCE9CEB3C4A71F9BEA8D88E75C4FA854DF36725F D2B52EB6544EDCACD6F8BEDDFEA403CB55AE31F03AD62A5EF54E42EE82C3FB35Incluso un pequeño cambio en el texto original del mensaje (en este caso, se reemplaza una letra: el carácter "d" se reemplaza con el carácter "e") conduce a un cambio completo en el hash :
Whirlpool-0("El veloz zorro marrón salta sobre el eog perezoso") = 228FBF76B2A93469D4B25929836A12B7D7F2A0803E43DABA0C7FC38BC11C8F2A 9416BBCF8AB8392EB2AB7BCB565A64AC50C26179164B26084A253CAF2E012676 Whirlpool-T("El veloz zorro marrón salta sobre el eog perezoso") = C8C15D2A0E0DE6E6885E8A7D9B8A9139746DA299AD50158F5FA9EECDDEF744F9 1B8B83C617080D77CB4247B1E964C2959C507AB2DB0F1F3BF3E3B299CA00CAE3 Whirlpool("El veloz zorro marrón salta sobre el eog perezoso") = C27BA124205F72E6847F3E19834F925CC666D0974167AF915BB462420ED40CC5 0900D85A1F923219D832357750492D5C143011A76988344C2635E69D06F2D38CLa adición de caracteres a una cadena, la concatenación de cadenas y otros cambios también afectan el resultado.
Ejemplos de hash para la cadena "nula":
Bañera de hidromasaje-0("") = B3E1AB6EAF640A34F784593F2074416ACCD3B8E62C620175FCA0997B1BA23473 39AA0D79E754C308209EA36811DFA40C1C32F1A2B9004725D987D3635165D3C8 Bañera de hidromasaje-T("") = 470F0409ABAA446E49667D4EBE12A14387CEBDD10DD17B8243CAD550A089DC0F EEA7AA40F6C2AAAB71C6EBD076E43C7CFCA0AD32567897DCB5969861049A0F5A Bañera de hidromasaje("") = 19FA61D75522A4669B44E39C1D2E1726C530232130D407F89AFEE0964997F7A7 3E83BE698B288FEBCF88E3E03C4F0757EA8964E59B63D93708B138CC42A66EB3tiempo de ejecución | El código | Resultado |
---|---|---|
PHP 5.0 | echo hash('remolino', 'prueba'); | b913d5bbb8e461c2c5961cbe0edcdadfd29f068225ceb37da6defcf89849368f 8c6c2eb6a4c4ac75775d032a0ecfdfe8550573062b653fe92fc7b8fb3b7be8d6 |
rubí | pone Whirlpool.calc_hex('prueba') | b913d5bbb8e461c2c5961cbe0edcdadfd29f068225ceb37da6defcf89849368f 8c6c2eb6a4c4ac75775d032a0ecfdfe8550573062b653fe92fc7b8fb3b7be8d6 |
Funciones hash | |
---|---|
propósito general | |
Criptográfico | |
Funciones de generación de claves | |
Número de cheque ( comparación ) | |
Hachís |
|