Whirlpool (función hash)

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 25 de febrero de 2022; las comprobaciones requieren 2 ediciones .
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.

Historia

Título

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.

Modificaciones

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.

Descripción

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 .

El símbolo se utiliza para designar la composición de una secuencia de funciones : o simplemente

Formato de datos

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 .

Transformaciones

Transformación no lineal (S-box)

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:

Tabla 1. Bloque de sustitución

Permutación cíclica

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 lineal

La difusión lineal  es una transformación lineal cuya matriz es la matriz MDS , es decir:


asi que

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 clave

La función de suma de claves es una suma bit a bit ( XOR ) de las matrices de estado y clave :

Constantes redondas

Cada 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 redonda

Para 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:

Extensión clave

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 .

Bloque de cifrado

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 .

Complementando el mensaje de entrada

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:

  1. Al final del mensaje, agregue un bit "1".
  2. Asigne bits "0" para que la longitud de la cadena recibida sea un múltiplo de un número impar de veces.
  3. Finalmente, asigne una representación numérica de 256 bits a .

El mensaje suplementado está escrito como

y se divide en bloques de 512 bits para su posterior procesamiento.

Función de compresión

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".  

Cálculo de hash

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:

Seguridad

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 :

  • La generación de colisiones requiere una orden de cálculo de hash WHIRLPOOL ( resistencia de colisión de segundo tipo ).
  • Para una búsqueda determinada de un mensaje de este tipo, se requerirá una orden de cálculo de hash WHIRLPOOL ( irreversibilidad ).
  • Para un mensaje dado , encontrar otro mensaje para el cual , requeriría una orden de cálculo de hash WHIRLPOOL ( resistencia de colisión de primer tipo ).
  • Es imposible detectar correlaciones sistemáticas entre cualquier combinación lineal de bits de entrada y cualquier combinación lineal de bits hash , o predecir qué bits hash cambiarán su valor cuando cambien ciertos bits de entrada (resistencia al criptoanálisis lineal y criptoanálisis diferencial ).

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.

Criptoanálisis

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.

Tabla 2. Resultados del criptoanálisis de las funciones hash de Whirlpool y Grøstl usando el método The Rebound Attack [2] [3]
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 :

  • colisión :
    •  - fijado
  • casi una colisión :
    •  - fijado
    • una pequeña cantidad de bits hash y son diferentes
  • colisión semi-libre :
  • colisión libre :


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.

Aplicación

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:

  • Jacksum  es una utilidad gratuita de suma de comprobación.
  • Crypto ++  es una biblioteca de clases C ++ distribuida libremente para primitivas criptográficas.
  • TrueCrypt  es un software gratuito de encriptación sobre la marcha.
  • FreeOTFE  es un programa gratuito y de código abierto diseñado para el cifrado sobre la marcha .
  • DarkCrypt  es una utilidad criptográfica y esteganográfica gratuita como complemento para Total Commander

Ejemplos de hashes

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 D2B52EB6544EDCACD6F8BEDDFEA403CB55AE31F03AD62A5EF54E42EE82C3FB35

Incluso 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 0900D85A1F923219D832357750492D5C143011A76988344C2635E69D06F2D38C

La 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 3E83BE698B288FEBCF88E3E03C4F0757EA8964E59B63D93708B138CC42A66EB3

Ejemplos en programación

tiempo de ejecución El código Resultado
PHP 5.0 echo hash('remolino', 'prueba'); b913d5bbb8e461c2c5961cbe0edcdadfd29f068225ceb37da6defcf89849368f 8c6c2eb6a4c4ac75775d032a0ecfdfe8550573062b653fe92fc7b8fb3b7be8d6
rubí pone Whirlpool.calc_hex('prueba') b913d5bbb8e461c2c5961cbe0edcdadfd29f068225ceb37da6defcf89849368f 8c6c2eb6a4c4ac75775d032a0ecfdfe8550573062b653fe92fc7b8fb3b7be8d6

Notas

  1. 1 2 3 Kyoji, Shibutani; Shirai, Taizo. Sobre la matriz de difusión empleada en la función hash de Whirlpool  : diario . - 2003. - 11 de marzo.  
  2. 1 2 Florian Mendel, Christian Rechberger, Martin Schläffer, Søren S. Thomsen. The Rebound Attack: Cryptoanalysis of Reduced Whirlpool and Grøstl  ( 24 de febrero de 2009). — presentación de un nuevo método de criptoanálisis y su aplicación para el criptoanálisis de las funciones hash de Whirlpool y Grøstl . Consultado el 25 de junio de 2019. Archivado desde el original el 28 de septiembre de 2011.
  3. 1 2 Florian Mendel, Christian Rechberger, Martin Schläffer, Søren S. Thomsen. El ataque de rebote: Criptoanálisis de Whirlpool reducido y Grøstl  (inglés) (2009). — un artículo sobre un nuevo método de criptoanálisis y su aplicación para el criptoanálisis de las funciones hash de Whirlpool y Grøstl . Consultado el 25 de junio de 2019. Archivado desde el original el 18 de noviembre de 2018.

Enlaces

  •  Página de inicio de Whirlpool . - Página de inicio de Whirlpool. Consultado el 25 de junio de 2019. Archivado desde el original el 29 de noviembre de 2017.

Estándares

  •  El estándar ISO/IEC 10118-3 : 2004 . — Norma ISO/IEC 10118-3:2004. Fecha de acceso: 25 de junio de 2019.
  • NESSIE  (inglés) . - Inglés.  Nuevos Esquemas Europeos de Firma, Integridad y Cifrado , nuevos proyectos europeos sobre firma digital, integridad y cifrado. Fecha de acceso: 25 de junio de 2019.
  •  Portafolio de primitivas criptográficas recomendadas . — una lista de funciones criptográficas NESSIE recomendadas para su uso. Fecha de acceso: 25 de junio de 2019.

Implementaciones de software

Implementaciones de hardware

  •  Arquitectura eficiente e implementación de hardware de la función hash de Whirlpool . - Implementación eficiente de hardware de Whirlpool. Artículo Transacciones IEEE sobre productos electrónicos de consumo . Consultado el 18 de noviembre de 2009. Archivado desde el original el 29 de febrero de 2012.
  •  Arquitectura Paralela de Alta Velocidad de la Función Hash Whirlpool . - Arquitectura paralela de alta velocidad Whirlpool. Artículo en International Journal of Advanced Science and Technology , número 7, junio de 2009. Consultado el 18 de noviembre de 2009. Archivado desde el original el 29 de febrero de 2012.