La función hash GOST , definida en las normas GOST R 34.11-94 y GOST 34.311-95, es una función hash criptográfica de 256 bits . Fue definida inicialmente en la norma nacional rusa GOST R 34.11-94 Tecnología de la información – Seguridad de la información criptográfica – Función hash . La norma equivalente utilizada por otros estados miembros de la CEI es GOST 34.311-95.
Esta función no debe confundirse con una función hash de Streebog diferente , que se define en la nueva revisión de la norma GOST R 34.11-2012 . [2]
GOST procesa un mensaje de longitud variable y lo convierte en una salida de longitud fija de 256 bits. El mensaje de entrada se divide en fragmentos de bloques de 256 bits (ocho enteros little endian de 32 bits); el mensaje se rellena añadiendo tantos ceros como sean necesarios para que la longitud del mensaje alcance los 256 bits. Los bits restantes se completan con una suma aritmética de enteros de 256 bits de todos los bloques previamente codificados y, a continuación, un entero de 256 bits que representa la longitud del mensaje original, en bits.
Notación básica
Las descripciones del algoritmo utilizan la siguiente notación:
— bloque j-bit lleno de ceros.
— longitud del bloque M en bits módulo 2 256 .
— concatenación de dos bloques.
— suma aritmética de dos bloques módulo 2 256 .
— xor lógico de dos bloques.
Además, consideramos que el bit de orden pequeño se ubica a la izquierda de un bloque y el bit de orden alto a la derecha.
Descripción
El mensaje de entrada se divide en bloques de 256 bits . En caso de que el último bloque contenga menos de 256 bits, se antepone a la izquierda un bit cero para lograr la longitud deseada.
Cada bloque es procesado por la función hash escalonada , donde , , son bloques de 256 bits.
Cada bloque de mensaje, comenzando por el primero, es procesado por la función hash escalonada para calcular el valor hash intermedio.
El valor puede elegirse arbitrariamente y normalmente es .
Luego de calculado, el valor hash final se obtiene de la siguiente manera
, donde L — es la longitud del mensaje M en bits módulo
, donde K es la suma de control de 256 bits de M:
El es el valor deseado de la función hash del mensaje M.
Entonces el algoritmo funciona de la siguiente manera.
Inicialización:
— Valor inicial de 256 bits de la función hash, determinado por el usuario.
— Suma de control
— Longitud del mensaje
Función de compresión de iteraciones internas: para i = 1 … n — 1 haga lo siguiente (while ):
– aplicar función hash escalonada
– recalcular la longitud del mensaje
– calcular la suma de control
Función de compresión de la iteración final:
– calcula la longitud completa del mensaje en bits
– rellena el último mensaje con ceros
– actualizar suma de control
– procesar el último bloque de mensajes
– MD – Fortalecimiento mediante hash de la longitud del mensaje
– suma de control de hash
El valor de salida es .
Función hash escalonada
La función hash de paso asigna dos bloques de 256 bits en uno: .
Consta de tres partes:
Generación de claves
Transformación de cifrado mediante claves
Transformación aleatoria
Generación de claves
El algoritmo de generación de claves utiliza:
Dos transformaciones de bloques de 256 bits:
Transformación , donde son subbloques de 64 bits de Y.
Transformación , donde , y son subbloques de 8 bits de Y .
Después de la generación de claves, el cifrado de se realiza utilizando GOST 28147-89 en el modo de sustitución simple en claves . Denotemos la transformación de cifrado como E (cifrado de datos de 64 bits utilizando una clave de 256 bits). Para el cifrado, el se divide en cuatro bloques de 64 bits: , y cada uno de estos bloques se cifra como:
Después de esto, los bloques de resultados se concatenan en un bloque de 256 bits: .
Aunque la norma GOST R 34.11 94 en sí no especifica el valor inicial del algoritmo y el S-box de la transformación de cifrado , pero utiliza los siguientes "parámetros de prueba" en las secciones de muestras. [3]
Cuadro S "Parámetros de prueba"
RFC 5831 especifica sólo estos parámetros, pero RFC 4357 los denomina "parámetros de prueba" y no recomienda su uso en aplicaciones de producción.
Caja S de CryptoPro
La S-box de CryptoPro proviene del conjunto de parámetros "listo para producción" desarrollado por la compañía CryptoPro, también se especifica como parte de RFC 4357, sección 11.2.
Criptoanálisis
En 2008 se publicó un ataque que rompe la función hash GOST de ronda completa. El artículo presenta un ataque de colisión en 2 105 veces, y ataques de primera y segunda preimagen en 2 192 veces (2 n veces se refiere al número aproximado de veces que se calculó el algoritmo en el ataque). [1]
Vectores de prueba hash GOST
Hashes para "parámetros de prueba"
Los hashes GOST de 256 bits (32 bytes) normalmente se representan como números hexadecimales de 64 dígitos.
Aquí se muestran los vectores de prueba para el hash GOST con "parámetros de prueba"
GOST("El rápido zorro marrón salta sobre el perro perezoso " ) = 77b7fa410c9ac58a25f49bca7d0468c9296529315eaca76bd1a10f376d1f4294
Incluso un pequeño cambio en el mensaje tendrá como resultado, con una probabilidad abrumadora, un hash completamente diferente debido al efecto avalancha . Por ejemplo, cambiar d por c :
GOST("El rápido zorro marrón salta sobre el perezoso engranaje ") = a3ebc4daaab78b0be131dab5737a7f67e602670d543521319150d2e14eeec445
Dos muestras procedentes de la norma GOST R 34.11-94: [3]
GOST("Este es un mensaje, longitud=32 bytes") = b1c466d37519b82e8319819ff32595e047a28cb6f83eff1c6916a815a637fffaGOST("Supongamos que el mensaje original tiene una longitud de 50 bytes") = 471aba57a60a770d3a76130635c1fbea4ef14de51f78b4ae57dd893b62f55208
Más vectores de prueba:
GOST("") = ce85b99cc46752fffee35cab9a7b0278abb4c2d2055cff685af4912c49490f8dGOST("a") = d42c539e367c66e9c88a801f6649349c21871b4344c6a573f849fdce62f314ddGOST("resumen del mensaje") = ad4434ecb18f2c99b60cbe59ec3d2469582b65273f48de72db2fde16a4889a4dGOST(128 caracteres de 'U') = 53a3a3ed25180cef0c1d85a074273e551c25660a87062a52d926a9e8fe5733a4GOST(1000000 caracteres de 'a') = 5c00ccc2734cdd3332d3d4749576e3c1a7dbaf0e7ea74e9fa602413c90a129fa
Hashes para los parámetros de CryptoPro
El algoritmo GOST con CryptoPro S-box genera diferentes conjuntos de valores hash.
GOST("") = 981e5f3ca30c841487830f84fb433e13ac1101569b9c13584ac483234cd656c0GOST("a") = e74c52dd282183bf37af0079c9f78055715a103f17e3133ceff1aacf2f403011GOST("abc") = b285056dbf18d7392d7677369524dd14747459ed8143997e163b2986f92fd42cGOST("resumen del mensaje") = bc6041dd2aa401ebfa6e9886734174febdb4729aa972d60f549ac39b29721ba0GOST("El rápido zorro marrón salta sobre el perro perezoso") = 9004294a361a508c586fe53d1f1b02746765e71b765472786e4770d565830a76GOST("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = 73b70a39497de53a6e08c67b6d4db853540f03e9389299d9b0156ef7e85d0f61GOST("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = 6bc7b38989b28cf93ae8842bf9d752905910a7528a61e5bce0782de43e610c90GOST("Este es un mensaje, longitud=32 bytes") = 2cefc2f7b7bdc514e18ea57fa74ff357e7fa17d652c75f69cb1be7893ede48ebGOST("Supongamos que el mensaje original tiene una longitud de 50 bytes") = c3730c5cbccacf915ac292676f21e8bd4ef75331d9405e5f1a61dc3130a65011GOST(128 de "U") = 1c4ac7614691bbf427fa2316216be8f10d92edfd37cd1027514c1008f649c4e8GOST(1000000 de "a") = 8693287aa62f9478f7cb312ec0866b6c4e4a0f11160441e8f4ffcd2715dd554f
^ ab Mendel, Florian; Pramstaller, Norbert; Rechberger, Christian; Kontak, Marcin; Szmidt, Janusz (2008). "Criptoanálisis de la función hash GOST". En Wagner, David (ed.). Avances en criptología – CRYPTO 2008. Apuntes de clase en informática. Vol. 5157. Alemania : Springer Berlin Heidelberg . págs. 162–178. doi :10.1007/978-3-540-85174-5_10. ISBN 978-3-540-85173-8.
^ GOST R 34.11-2012: Función hash de Streebog
^ ab "Norma GOST R 34.11-94. Tecnología de la información. Seguridad de datos criptográficos. Función hash. Adición A." 1994.{{cite journal}}: Requiere citar revista |journal=( ayuda )
Lectura adicional
Dolmatov, V. (marzo de 2010). Dolmatov, V (ed.). "GOST R 34.11-94: Algoritmo de función hash". IETF. doi : 10.17487/RFC5831 . {{cite journal}}: Requiere citar revista |journal=( ayuda )
"Tecnología de la información. Seguridad de datos criptográficos. Función hash". 20 de febrero de 2010.El texto completo de la norma GOST R 34.11-94 (en ruso).
Enlaces externos
Implementación en C y vectores de prueba para la función hash GOST de Markku-Juhani Saarinen. También contiene traducciones preliminares al inglés de las normas GOST 28147-89 y GOST R 34.11-94. Versión con errores corregidos, consulte [1].