Whirlpool (función hash) - Whirlpool (hash function)
General | |
---|---|
Diseñadores | Vincent Rijmen , Paulo SLM Barreto |
Publicado por primera vez | 2000, 2001, 2003 |
Derivado de | Cuadrado , AES |
Certificación | NESSIE |
Detalle | |
Tamaños de resumen | 512 bits |
Reclamaciones de seguridad | Tamaño grande de hashsum |
Estructura | Miyaguchi-Preneel |
Rondas | 10 |
Mejor criptoanálisis público | |
En 2009, se anunció un ataque de rebote que presenta colisiones completas contra 4.5 rondas de Whirlpool en 2120 operaciones, colisiones de inicio semi-libre contra 5.5 rondas en 2120 tiempos y casi colisiones de inicio semi-libre contra 7.5 rondas en 2128 hora. |
En informática y criptografía , Whirlpool (a veces llamado WHIRLPOOL ) es una función hash criptográfica . Fue diseñado por Vincent Rijmen (co-creador del Estándar de cifrado avanzado ) y Paulo SLM Barreto , quien lo describió por primera vez en 2000.
El hash ha sido recomendado por el proyecto NESSIE . También ha sido adoptado por la Organización Internacional de Normalización (ISO) y la Comisión Electrotécnica Internacional (IEC) como parte del estándar internacional conjunto ISO / IEC 10118-3 .
Caracteristicas de diseño
Whirlpool es un hash diseñado según el cifrado de bloques Square y se considera que pertenece a esa familia de funciones de cifrado de bloques.
Whirlpool es una construcción de Miyaguchi-Preneel basada en un Estándar de cifrado avanzado (AES) sustancialmente modificado .
Whirlpool toma un mensaje de cualquier longitud menor a 2 256 bits y devuelve un resumen de mensaje de 512 bits .
Los autores han declarado que
- "WHIRLPOOL no está (y nunca lo estará) patentado. Puede usarse sin cargo para cualquier propósito".
Cambios de versión
El Whirlpool original se llamará Whirlpool-0 , la primera revisión de Whirlpool se llamará Whirlpool-T y la última versión se llamará Whirlpool en los siguientes vectores de prueba.
- En la primera revisión en 2001, el S-box se cambió de uno generado aleatoriamente con buenas propiedades criptográficas a uno que tiene mejores propiedades criptográficas y es más fácil de implementar en hardware.
- En la segunda revisión (2003), se encontró una falla en la matriz de difusión que redujo la seguridad estimada del algoritmo por debajo de su potencial. Cambiar las constantes de matriz giratoria 8x8 de (1, 1, 3, 1, 5, 8, 9, 5) a (1, 1, 4, 1, 8, 5, 2, 9) resolvió este problema.
Estructura interna
La función hash de Whirlpool es una construcción de Merkle-Damgård basada en un cifrado de bloque tipo AES W en el modo Miyaguchi-Preneel .
El cifrado de bloque W consta de una matriz de bytes de 8 × 8 estados , para un total de 512 bits.
El proceso de cifrado consiste en actualizar el estado con cuatro funciones de ronda en 10 rondas. Las cuatro funciones redondas son SubBytes (SB), ShiftColumns (SC), MixRows (MR) y AddRoundKey (AK). Durante cada ronda, el nuevo estado se calcula como .
SubBytes
La operación SubBytes aplica una permutación no lineal (la caja S) a cada byte del estado de forma independiente. La caja S de 8 bits se compone de 3 cajas S más pequeñas de 4 bits.
ShiftColumns
La operación ShiftColumns desplaza cíclicamente cada byte en cada columna del estado. La columna j tiene sus bytes desplazados hacia abajo en j posiciones.
MixRows
La operación MixRows es una multiplicación a la derecha de cada fila por una matriz de 8 × 8 . La matriz se elige de manera que el número de rama (una propiedad importante cuando se mira la resistencia al criptoanálisis diferencial ) sea 9, que es el máximo.
AddRoundKey
La operación AddRoundKey usa xor bit a bit para agregar una clave calculada por la programación de claves al estado actual. El programa de claves es idéntico al cifrado en sí, excepto que la función AddRoundKey se reemplaza por una función AddRoundConstant que agrega una constante predeterminada en cada ronda.
Hashes de hidromasaje
El algoritmo Whirlpool ha sido objeto de dos revisiones desde su especificación original de 2000.
Las personas que incorporan Whirlpool probablemente utilizarán la revisión más reciente de Whirlpool; Si bien no hay debilidades de seguridad conocidas en versiones anteriores de Whirlpool, la revisión más reciente tiene mejores características de eficiencia de implementación de hardware y también es probable que sea más segura. Como se mencionó anteriormente, también es la versión adoptada en el estándar internacional ISO / IEC 10118-3 .
Los hashes Whirlpool de 512 bits (64 bytes) (también denominados resúmenes de mensajes ) se representan normalmente como números hexadecimales de 128 dígitos .
A continuación, se muestra una entrada ASCII de 43 bytes (sin incluir las comillas) y los hash correspondientes de Whirlpool:
Versión | Cadena de entrada | Hash calculado |
---|---|---|
Hidromasaje-0 | " El rápido zorro marrón salta sobre el perro perezoso " |
4F8F5CB531E3D49A61CF417CD133792CCFA501FD8DA53EE368FED20E5FE0248C 3A0B64F98A6533CEE1DA614C3A8DDEC791FF05FEE6D971D57C1348320F4EB42D |
Hidromasaje-T | " El rápido zorro marrón salta sobre el perro perezoso " |
3CCF8252D8BBB258460D9AA999C06EE38E67CB546CFFCF48E91F700F6FC7C183 AC8CC3D3096DD30A35B01F4620A1E3A20D79CD5168544D9E1B7CDF49970E87F1 |
Torbellino | " El rápido zorro marrón salta sobre el perro perezoso " |
B97DE512E91E3828B40D2B0FDCE9CEB3C4A71F9BEA8D88E75C4FA854DF36725F D2B52EB6544EDCACD6F8BEDDFEA403CB55AE31F03AD62A5EF54E42EE82C3FB35 |
Incluso un pequeño cambio en el mensaje (con una probabilidad extremadamente alta de ) dará como resultado un hash diferente, que generalmente se verá completamente diferente al igual que lo hacen dos números aleatorios no relacionados. A continuación se muestra el resultado de cambiar la entrada anterior por una sola letra (un solo bit, par, en codificaciones compatibles con ASCII), reemplazando d por e :
Versión | Cadena de entrada | Hash calculado |
---|---|---|
Hidromasaje-0 | " El veloz zorro marrón salta sobre el perezoso eog " |
228FBF76B2A93469D4B25929836A12B7D7F2A0803E43DABA0C7FC38BC11C8F2A 9416BBCF8AB8392EB2AB7BCB565A64AC50C26179164B26084A253CAF2E012676 |
Hidromasaje-T | " El veloz zorro marrón salta sobre el perezoso eog " |
C8C15D2A0E0DE6E6885E8A7D9B8A9139746DA299AD50158F5FA9EECDDEF744F9 1B8B83C617080D77CB4247B1E964C2959C507AB2DB0F1F3BF3E3B299CA00CAE3 |
Torbellino | " El veloz zorro marrón salta sobre el perezoso eog " |
C27BA124205F72E6847F3E19834F925CC666D0974167AF915BB462420ED40CC5 0900D85A1F923219D832357750492D5C143011A76988344C2635E69D06F2D38C |
El hash de una cadena de longitud cero es:
Versión | Cadena de entrada | Hash calculado |
---|---|---|
Hidromasaje-0 | "" |
B3E1AB6EAF640A34F784593F2074416ACCD3B8E62C620175FCA0997B1BA23473 39AA0D79E754C308209EA36811DFA40C1C32F1A2B9004725D987D3635165D3C8 |
Hidromasaje-T | "" |
470F0409ABAA446E49667D4EBE12A14387CEDBD10DD17B8243CAD550A089DC0F EEA7AA40F6C2AAAB71C6EBD076E43C7CFCA0AD32567897DCB5969861049A0F5A |
Torbellino | "" |
19FA61D75522A4669B44E39C1D2E1726C530232130D407F89AFEE0964997F7A7 3E83BE698B288FEBCF88E3E03C4F0757EA8964E59B63D93708B138CC42A66EB3 |
Implementaciones
Los autores proporcionan implementaciones de referencia del algoritmo Whirlpool, incluida una versión escrita en C y una versión escrita en Java . Estas implementaciones de referencia se han lanzado al dominio público.
Adopción
Dos de los primeros programas criptográficos convencionales ampliamente utilizados que comenzaron a usar Whirlpool fueron FreeOTFE , seguido de TrueCrypt en 2005.
VeraCrypt (una bifurcación de TrueCrypt ) incluyó Whirlpool (la versión final) como uno de sus algoritmos hash compatibles.
Ver también
Referencias
enlaces externos
- La función de hash de WHIRLPOOL en Wayback Machine (archivado el 29 de noviembre de 2017)
- Jacksum en SourceForge.net , una implementación de Java de las tres revisiones de Whirlpool
- whirlpool en GitHub : una implementación Go de código abierto de la última revisión de Whirlpool
- Una implementación de Matlab de la función de hash de Whirlpool
- RHash , una herramienta de línea de comandos de código abierto que puede calcular y verificar el hash de Whirlpool.
- Módulo Perl Whirlpool en CPAN
- Módulo de resumen que implementa el algoritmo de hash Whirlpool en Ruby
- Blinde un paquete de criptografía Common Lisp que contiene una implementación de Whirlpool
- El estándar ISO / IEC 10118-3: 2004
- Vectores de prueba para el hash Whirlpool del proyecto NESSIE
- Implementación administrada de C #
- Módulo Python Whirlpool