HAVAL | |
---|---|
Desarrolladores | Yuliang Zheng , Josef Pieprzyk , Jennifer Seberry |
Creado | 1992 |
publicado | 1992 |
tamaño de hash | 128, 160, 192, 224, 256 bits |
Número de rondas | 96, 128, 160 |
Tipo de | función hash |
HAVAL es una función hash criptográfica desarrollada por Yuliang Zheng , Josef Pieprzyk y Jennifer Seberry en 1992 .
Dado un mensaje de entrada arbitrario, la función genera un valor hash denominado resumen del mensaje , que puede tener una longitud de 128, 160, 192, 224 o 256 bits. El número de iteraciones es variable, de 3 a 5. El número de rondas en cada iteración es 32. Es una modificación de MD5 .
Definamos funciones booleanas que se utilizan para realizar operaciones bit a bit en palabras.
1.ª iteración
2.ª iteración
3.ª iteración
4.ª iteración
5.ª iteración
El algoritmo recibe un flujo de datos de entrada, cuyo hash debe encontrarse. Este flujo se divide en bloques, cada uno de 1024 bits de longitud. Los siguientes son los 3 pasos del algoritmo.
Primero, el mensaje se expande para que su longitud en bits sea igual a 944 módulo 1024. Para hacer esto, se escribe un bit al final del mensaje y luego el número requerido de bits cero. Los 80 bits restantes se agregan con una representación de 64 bits del número de bits del mensaje antes de la alineación (campo MSGLENG), una representación de 10 bits de la longitud del resumen del mensaje (campo DGSTLENG), una representación de 3 bits del número de iteraciones (campo PASS), y una representación de 3 bits de la versión HAVAL (campo VERSION).
Escribamos un mensaje extendido en la forma:
, donde es un bloque de 1024 bits y n es el número de bloques en un mensaje extendido.
A continuación, para i de 0 a n-1, realizamos el siguiente cálculo: , donde H es la función de compresión que se describe a continuación y es una constante de 256 bits.
H procesa el bloque de mensajes en 3, 4 o 5 iteraciones (según el valor del campo PASS). Denotemos las funciones de compresión utilizadas en las iteraciones por y . Sea una constante de 256 bits y sea la salida de 256 bits de la función H . Entonces H se puede describir de la siguiente manera (ver figura):
(Nota: una operación de tipo es una operación de la forma: , donde palabras de 32 bits.
Denotemos el número de iteración por j (j =1,…,5). El número de iteración j corresponde a la función de compresión . La entrada de cada función es y , donde es un bloque de mensaje de 1024 bits que consta de 32 palabras , a consta de 8 palabras . Entonces se puede escribir de la siguiente manera:
1 . Dejar 2 . Repita los siguientes pasos para i de 0 a 31: , donde son constantes de 32 bits 3 . Sea y sea una salida de 256 bits .Notación: - composición de dos funciones (la primera se ejecuta ),
Nota: no se utilizan constantes en la primera iteración (es decir, ).
A diferencia de la iteración 1, en la iteración 2 y posteriores , no se procesa en el orden de las palabras, sino en el orden especificado en la Tabla 1.
( ) | 0 | una | 2 | 3 | cuatro | 5 | 6 | 7 | ocho | 9 | diez | once | 12 | 13 | catorce | quince | dieciséis | 17 | Dieciocho | 19 | veinte | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | treinta | 31 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
( ) | 5 | catorce | 26 | Dieciocho | once | 28 | 7 | dieciséis | 0 | 23 | veinte | 22 | una | diez | cuatro | ocho | treinta | 3 | 21 | 9 | 17 | 24 | 29 | 6 | 19 | 12 | quince | 13 | 2 | 25 | 31 | 27 |
( ) | 19 | 9 | cuatro | veinte | 28 | 17 | ocho | 22 | 29 | catorce | 25 | 12 | 24 | treinta | dieciséis | 26 | 31 | quince | 7 | 3 | una | 0 | Dieciocho | 27 | 13 | 6 | 21 | diez | 23 | once | 5 | 2 |
( ) | 24 | cuatro | 0 | catorce | 2 | 7 | 28 | 23 | 26 | 6 | treinta | veinte | Dieciocho | 25 | 19 | 3 | 22 | once | 31 | 21 | ocho | 27 | 12 | 9 | una | 29 | 5 | quince | 17 | diez | dieciséis | 13 |
( ) | 27 | 3 | 21 | 26 | 17 | once | veinte | 29 | 19 | 0 | 12 | 7 | 13 | ocho | 31 | diez | 5 | 9 | catorce | treinta | Dieciocho | 6 | 28 | 24 | 2 | 23 | dieciséis | 22 | cuatro | una | 25 | quince |
|
|
|
|
|
|
| |
|
|||||||
---|---|---|---|---|---|---|---|
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
Este paso usa la longitud de 256 bits obtenida en el paso 2. Si el tamaño de hash requerido es de 256 bits, entonces hay un resumen de mensaje. Consideremos los otros 4 casos.
1. Tamaño de hash: 128 bits
Pongámoslo de la siguiente forma:
(el superíndice indica la longitud de X en bits)Luego, el resumen del mensaje es de 128 bits , donde
2. Tamaño de hash: 160 bits
Pongámoslo de la siguiente forma:
Luego, el resumen del mensaje es de 160 bits , donde
3. Tamaño de hash: 192 bits
Pongámoslo de la siguiente forma:
Dejar
- resumen del mensaje.
4. Tamaño de hash - 224 bits
Vamos a presentarlo de la siguiente forma:
Luego, el resumen del mensaje es de 224 bits , donde
Este algoritmo utiliza 136 constantes de 32 bits. Vamos a escribirlos en el siguiente orden:
una. 2. 3. cuatro 5.243F6A88 85A308D3 13198A2E 03707344 A4093822 299F31D0 082EFA98 EC4E6C89
452821E6 38D01377 BE5466CF 34E90C6C C0AC29B7 C97C50DD 3F84D5B5 B5470917 9216D5D9 8979FB1B
D1310BA6 98DFB5AC 2FFD72DB D01ADFB7 B8E1AFED 6A267E96 BA7C9045 F12C7F99 24A19947
B3916CF7 0801F2E2 858EFC16 636920D8 71574E69 A458FEA3
F4933D7E 0D95748F 728EB658 718BCD58 82154AEE 7B54A41D C25A59B5
9C30D539 2AF26013 C5D1B023 286085F0 CA417918 B8DB38EF 8E79DCB0 603A180E 6C9E0E8B B01E8A3E
D71577C1 BD314B27 78AF2FDA 55605C60 E65525F3 AA55AB94 57489862 63E81440 55CA396A
2AAB10B6 B4CC5C34 1141E8CE A15486AF 7C72E993 B3EE1411
636FBC2A 2BA9C55D 741831F6 CE5C3E16 9B87931E AFD6BA33 6C24CF5C
7A325381 28958677 3B8F4898 6B4BB9AF C4BFE81B 66282193 61D809CC FB21A991 487CAC60 5DEC8032
EF845D5D E98575B1 DC262302 EB651B88 23893E81 D396ACC5 0F6D6FF3 83F44239 2E0B4482
A4842004 69C8F04A 9E1F9B5E 21C66842 F6E96C9A 670C9C61
ABD388F0 6A51A0D2 D8542F68 960FA728 AB5133A3 6EEF0B6C 137A3BE4
BA3BF050 7EFB2A98 A1F1651D 39AF0176 66CA593E 82430E88 8CEE8619 456F9FB4 7D84A5C3 3B8B5EBE
E06F75D8 85C12073 401A449F 56C16AA6 4ED3AA62 363F7706 1BFEDF72 429B023D 37D0D724
D00A1248 DB0FEAD3 49F1C09B 075372C9 80991B7B 25D479D8
F6E8DEF7 E3FE501A B6794C3B 976CE0BD 04C006BA C1A94FB6 409F60C4
Las primeras 8 constantes representan los primeros 256 bits de la parte fraccionaria del número . Las constantes corresponden a los siguientes 1024 bits de la parte fraccionaria , y así sucesivamente.
Las funciones booleanas , , y , utilizadas en el algoritmo, tienen una serie de propiedades útiles en el caso de la permutación preliminar de sus argumentos:
Los hashes HAVAL generalmente se representan como una secuencia de 32, 40, 48, 56 o 64 números hexadecimales.
Algunos ejemplos de hash (tamaño - 256 bits, número de iteraciones - 5):
Incluso un pequeño cambio en el mensaje de entrada (en nuestro caso, por un carácter: el carácter "d" se reemplaza por el carácter "c") conduce a un cambio completo en el hash.
HAVAL("El veloz zorro marrón salta sobre el engranaje perezoso") = 60983bb8c8f49ad3bea29899b78cd741f4c96e911bbc272e5550a4f195a4077eUn ejemplo de un hash HAVAL para una cadena "nula":
HAVAL("") = be417bb4dd5cfb76c7126f4f8eeb1553a449039307b1a3cd451dbfdc0fbbe330A diferencia de la función hash MD5, que tiene un tamaño fijo del resumen y el número de iteraciones, HAVAL proporciona 15 variantes de algoritmo diferentes al combinar la longitud del resumen y el número de iteraciones. Esto proporciona más flexibilidad y, por lo tanto, hace que la función hash sea más adecuada para aplicaciones que requieren diferentes longitudes de hash de mensajes y diferentes niveles de seguridad.
Los experimentos han demostrado que HAVAL es un 60 % más rápido que MD5 en 3 iteraciones, un 15 % más rápido en 4 iteraciones e igual de rápido en cinco iteraciones.
Una colisión hash obtiene el mismo valor de función para diferentes mensajes.
En 2003, Bart Van Rompay, Alex Biryukov , Bart Prenel y Joos Vandewalle descubrieron una colisión para HAVAL de 3 iteraciones. [2] Encontrar esta colisión requirió aproximadamente ejecuciones de la función de contracción H .
En 2004, los investigadores chinos Wang Xiaoyun , Feng Dengguo , Lai Xuejia y Yu Hongbo anunciaron una vulnerabilidad que habían descubierto en el HAVAL-128 de 3 iteraciones que permite encontrar colisiones mediante cálculos HAVAL. [3]
En 2006, un grupo de científicos chinos liderados por Wang Xiaoyun y Yu Hongbo llevaron a cabo dos ataques contra HAVAL de 4 iteraciones, que también requirieron operaciones de hashing, respectivamente. También propusieron el primer ataque teórico en HAVAL de 5 iteraciones con el número de operaciones hash aproximadamente igual a . [cuatro]
Funciones hash | |
---|---|
propósito general | |
Criptográfico | |
Funciones de generación de claves | |
Número de cheque ( comparación ) | |
Hachís |
|