GOST 28147-89 | |
---|---|
Creador |
KGB , octava dirección (un grupo de criptógrafos) - Zabotin Ivan Alexandrovich (jefe), Lopatin Vyacheslav Alexandrovich, Lopatkin Alexei Vasilievich, Afanasiev Alexander Alexandrovich, Fedyukin Mijaíl Vladímirovich |
Creado | 1978 |
publicado | 1989 |
Estándares | GOST 34,12-2018 , GOST R 34,12-2015 , GOST 28147-89, RFC 5830 , RFC 8891 |
Tamaño de clave | 256 bits |
Tamaño de bloque | 64 bits |
Número de rondas | 32\16 |
Tipo de | Red Feistel |
GOST 28147-89 “ Sistemas de procesamiento de información. Protección criptográfica. Algoritmo de conversión criptográfica "- estándar estatal obsoleto (ver cronología de uso ) de la URSS (y más tarde el estándar interestatal de la CEI ), que describe el algoritmo de cifrado de bloques simétricos y sus modos de operación .
Es un ejemplo de criptosistemas similares a DES creados según el esquema iterativo clásico de Feistel .
La historia de la creación del cifrado y los criterios de los desarrolladores fueron presentados públicamente por primera vez en 2014 por el jefe del grupo de desarrolladores del algoritmo Zabotin Ivan Alexandrovich en una conferencia dedicada al 25 aniversario de la adopción del estándar ruso para cifrado simétrico [1] [2] .
El trabajo en el algoritmo, que luego constituyó la base del estándar, comenzó como parte del tema Magma (protección de la información por métodos criptográficos en computadoras de la serie Sistema Unificado ) en nombre del Consejo Científico y Técnico de la Octava Dirección Principal de la KGB de la URSS (ahora en la estructura del FSB ), en marzo de 1978 tras un extenso estudio preliminar del estándar DES publicado en 1976 . De hecho, el trabajo sobre la creación de un algoritmo (o grupo de algoritmos) similar al algoritmo DES comenzó ya en 1976 .
Inicialmente, las obras fueron etiquetadas como " Top Secret ". Luego fueron degradados al sello " Secreto ". En 1983, el algoritmo fue degradado a " Restringido ". Fue con la última marca que se preparó el algoritmo para su publicación en 1989 . El 9 de marzo de 1987, un grupo de criptógrafos (solicitante - unidad militar 43753) recibió un certificado de derechos de autor con el número de prioridad 333297 por una invención para un dispositivo de cifrado que utiliza el algoritmo Magma-2 [3] .
Aprobado por el Decreto de la Norma Estatal de la URSS No. 1409 del 2 de junio de 1989 , puesto en vigor el 1 de julio de 1990 [4] .
El 31 de marzo de 1996 fue reeditado y puesto en vigencia como norma interestatal del CIS [5] .
Por el Decreto de la Norma Estatal de la República de Bielorrusia No. 3 del 17 de diciembre de 1992, entró en vigor como norma estatal de la República de Bielorrusia . Reeditado en marzo de 2011 [6] .
Por orden de las Normas Estatales de Consumo de Ucrania No. 495 del 22 de enero de 2008, GOST 28147-89 se volvió a emitir en el territorio de Ucrania y entró en vigor el 1 de febrero de 2009 con el nombre DSTU GOST 28147:2009 [ 7] . Según las órdenes actuales, DSTU GOST 28147:2009 será válido hasta el 1 de enero de 2022 [8] . Hay un reemplazo gradual con DSTU 7624:2014 ( código "Kalina").
El estándar ha sido cancelado en el territorio de Rusia y la CEI desde el 31 de mayo de 2019 debido a la adopción de nuevos estándares interestatales que lo reemplazan por completo GOST 34.12-2018 (describe los cifrados Magma y Grasshopper ) y GOST 34.13-2018 (describe el modos operativos de cifrados de bloque ).
De acuerdo con el aviso del FSB sobre el procedimiento para usar el algoritmo de cifrado de bloques GOST 28147-89, las herramientas de protección de información criptográfica diseñadas para proteger información que no contenga información que constituya un secreto de estado , incluidas aquellas que implementan el algoritmo GOST 28147-89 , no deben ser desarrollado después del 1 de junio de 2019 , excepto cuando el algoritmo GOST 28147-89 en dichas herramientas está diseñado para garantizar la compatibilidad con las herramientas existentes que implementan este algoritmo [9] .
En 2015, junto con el nuevo algoritmo " Grasshopper ", se publicó una variante del algoritmo GOST 28147-89 con el nombre " Magma " como parte del estándar GOST R 34.12-2015 , y posteriormente como parte del GOST 34.12-2018. estándar En 2020, el algoritmo Magma se publicó como RFC 8891 .
Peculiaridades:
GOST 28147-89 es un cifrado de bloque con una clave de 256 bits y 32 rondas (llamadas rondas) de transformación, que opera en bloques de 64 bits. La base del algoritmo de cifrado es la red de Feistel .
Hay cuatro modos de operación GOST 28147-89:
Para cifrar en este modo, un bloque de texto sin formato de 64 bits se divide primero en dos mitades: T o = ( A 0 , B 0 ) [10] . En el i -ésimo ciclo, se utiliza la subclave X i :
( = binario " exclusivo o "),Para generar subclaves, la clave original de 256 bits se divide en ocho números de 32 bits: K 0 ... K 7 .
Las subclaves X 0 ... X 23 son la repetición cíclica de K 0 ... K 7 . Los enchufes X 24 ... X 31 son K 7 ... K 0 .
El resultado de las 32 rondas del algoritmo es un bloque de texto cifrado de 64 bits : T w = ( A 32 , B 32 ) .
El descifrado se lleva a cabo de acuerdo con el mismo algoritmo que el cifrado, con la diferencia de que se invierte el orden de las subclaves: X 0 ... X 7 son K 7 ... K 0 , y X 8 ... X 31 son repetición cíclica de K 7 ... K 0 .
En los datos de entrada y salida, los números de 32 bits se representan en orden desde el bit menos significativo hasta el más significativo ( little endian ).
La función se calcula así:
A i y X i se suman módulo 2 32 .
El resultado se divide en ocho subsecuencias de 4 bits, cada una de las cuales se alimenta a la entrada de su nodo de tabla de sustitución (en orden ascendente de precedencia de bit), denominado S-box a continuación . El número total de S-boxes en el estándar es ocho, que es el mismo que el número de subsecuencias. Cada S-box es una permutación de números del 0 al 15 (la forma específica de S-box no está definida en el estándar). La primera subsecuencia de 4 bits es la entrada del primer S-box, la segunda es la entrada del segundo y así sucesivamente.
Si el nodo S-box se ve así:
1, 15, 13, 0, 5, 7, 10, 4, 9, 2, 3, 14, 6, 11, 8, 12
y la entrada del S-box es 0, entonces la salida será 1; si la entrada es 4, entonces la salida será 5; si la entrada es 12, entonces la salida es 6, etc.
Las salidas de las ocho cajas S se combinan en una palabra de 32 bits, luego la palabra completa se gira a la izquierda (orden superior) en 11 bits.
El modo de reemplazo simple tiene las siguientes desventajas:
Por lo tanto, el uso de GOST 28147-89 en el modo de reemplazo simple es deseable solo para el cifrado de datos clave [11] .
Cuando GOST 28147-89 funciona en el modo gamma , se forma una gamma criptográfica de la manera descrita anteriormente, que luego se agrega poco a poco módulo 2 con el texto sin formato original para obtener un texto cifrado . El cifrado en modo gamma carece de las desventajas inherentes al modo de reemplazo simple [11] . Por lo tanto, incluso los bloques idénticos del texto de origen dan un texto cifrado diferente, y para los textos con una longitud que no es un múltiplo de 64 bits, los bits gamma "extra" se descartan. Además, la gamma se puede generar por adelantado, lo que corresponde a la operación del cifrado en un modo de transmisión.
La gamma se genera en función de la clave y el llamado mensaje de sincronización, que establece el estado inicial del generador. El algoritmo de generación es el siguiente:
Para descifrarlo, debe calcular el mismo gamma y luego agregarlo poco a poco módulo 2 con el texto cifrado. Obviamente, para esto necesita usar el mismo mensaje de sincronización que para el cifrado. En este caso, según los requisitos de la unicidad de gamma, es imposible usar un mensaje de sincronización para cifrar varias matrices de datos. Por regla general, el mensaje de sincronización se transmite de una forma u otra junto con el texto cifrado.
Una característica de GOST 28147-89 en el modo gamma es que cuando cambia un bit del texto cifrado, solo cambia un bit del texto descifrado. Por un lado, esto puede tener un efecto positivo en la inmunidad al ruido; por otro lado, un atacante puede realizar algunos cambios en el texto sin siquiera descifrarlo [11] .
El algoritmo de cifrado es similar al modo gamma, pero el gamma se basa en el bloque anterior de datos cifrados, por lo que el resultado del cifrado del bloque actual también depende de los bloques anteriores. Por esta razón, este modo de operación también se conoce como escalado entrelazado.
El algoritmo de cifrado es el siguiente:
Al cambiar un bit del texto cifrado obtenido mediante el algoritmo gamma de retroalimentación, solo se cambia un bit en el bloque correspondiente de texto descifrado, y el siguiente bloque de texto sin formato también se ve afectado. En este caso, todos los demás bloques permanecen sin cambios [11] .
Cuando utilice este modo, tenga en cuenta que el mensaje de sincronización no se puede reutilizar (por ejemplo, al cifrar bloques de información lógicamente separados: paquetes de red, sectores del disco duro, etc.). Esto se debe al hecho de que el primer bloque del texto cifrado se obtiene sumando solo el módulo dos con el mensaje de sincronización cifrado; por lo tanto, el conocimiento de solo los primeros 8 bytes del texto original y cifrado permite leer los primeros 8 bytes de cualquier otro texto cifrado después de reutilizar el mensaje de sincronización.
Este modo no es un modo de cifrado en el sentido convencional. Cuando se trabaja en el modo de simulación de inserción, se crea un bloque adicional que depende de todo el texto y los datos clave. Este bloque se utiliza para verificar que el texto cifrado no haya sido manipulado accidental o intencionalmente. Esto es especialmente importante para el cifrado en modo gamma, donde un atacante puede cambiar bits específicos sin siquiera conocer la clave; sin embargo, cuando se opera en otros modos, no se pueden detectar posibles distorsiones si no hay información redundante en los datos transmitidos.
La imitación se genera para M ≥ 2 bloques de texto plano de 64 bits. El algoritmo es el siguiente:
Para la verificación, la parte receptora realiza un procedimiento similar al descrito. Si el resultado no coincide con la inserción de simulación aprobada, todos los bloques M correspondientes se consideran falsos.
La generación de una imitación de inserción se puede realizar en paralelo con el cifrado utilizando uno de los modos de operación descritos anteriormente [11] .
Los ocho S-boxes pueden ser diferentes. Algunos creen que pueden ser material clave adicional que aumenta la longitud efectiva de la clave; sin embargo, existen ataques prácticos que permiten determinarlos [12] . Sin embargo, no hay necesidad de aumentar la longitud de la clave, 256 bits es suficiente en la actualidad [13] . Por lo general, las tablas de sustitución son una configuración de esquema a largo plazo que es común a un grupo específico de usuarios.
El texto del estándar GOST 28147-89 indica que la entrega de unidades de reemplazo de llenado (S-blocks) se lleva a cabo de la manera prescrita, es decir, por el desarrollador del algoritmo.
OID: 1.2.643.2.2.31.1
Número de bloque S | Sentido | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | una | 2 | 3 | cuatro | 5 | 6 | 7 | ocho | 9 | A | B | C | D | mi | F | |
una | 9 | 6 | 3 | 2 | ocho | B | una | 7 | A | cuatro | mi | F | C | 0 | D | 5 |
2 | 3 | 7 | mi | 9 | ocho | A | F | 0 | 5 | 2 | 6 | C | B | cuatro | D | una |
3 | mi | cuatro | 6 | 2 | B | 3 | D | ocho | C | F | 5 | A | 0 | 7 | una | 9 |
cuatro | mi | 7 | A | C | D | una | 3 | 9 | 0 | 2 | B | cuatro | F | ocho | 5 | 6 |
5 | B | 5 | una | 9 | ocho | D | F | 0 | mi | cuatro | 2 | 3 | C | 7 | A | 6 |
6 | 3 | A | D | C | una | 2 | 0 | B | 7 | 5 | 9 | cuatro | ocho | F | mi | 6 |
7 | una | D | 2 | 9 | 7 | A | 6 | 0 | ocho | C | cuatro | 5 | F | 3 | B | mi |
ocho | B | A | F | 5 | 0 | C | mi | ocho | 6 | 2 | 3 | 9 | una | 7 | D | cuatro |
Este nodo de sustitución es utilizado por CryptoPRO CSP de forma predeterminada. Además, este nodo de sustitución se utiliza en el software Verba-O [14] .
ID: id-Gost28147-89-CryptoPro-B-ParamSetOID: 1.2.643.2.2.31.2
Número de bloque S | Sentido | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | una | 2 | 3 | cuatro | 5 | 6 | 7 | ocho | 9 | A | B | C | D | mi | F | |
una | ocho | cuatro | B | una | 3 | 5 | 0 | 9 | 2 | mi | A | C | D | 6 | 7 | F |
2 | 0 | una | 2 | A | cuatro | D | 5 | C | 9 | 7 | 3 | F | B | ocho | 6 | mi |
3 | mi | C | 0 | A | 9 | 2 | D | B | 7 | 5 | ocho | F | 3 | 6 | una | cuatro |
cuatro | 7 | 5 | 0 | D | B | 6 | una | 2 | 3 | A | C | F | cuatro | mi | 9 | ocho |
5 | 2 | 7 | C | F | 9 | 5 | A | B | una | cuatro | 0 | D | 6 | ocho | mi | 3 |
6 | ocho | 3 | 2 | 6 | cuatro | D | mi | B | C | una | 7 | F | A | 0 | 9 | 5 |
7 | 5 | 2 | A | B | 9 | una | C | 3 | 7 | cuatro | D | 0 | 6 | F | ocho | mi |
ocho | 0 | cuatro | B | mi | ocho | 3 | 7 | una | A | 2 | 9 | 6 | F | D | 5 | C |
Este nodo de sustitución es utilizado por CryptoPRO CSP.
Identificador: id-Gost28147-89-CryptoPro-C-ParamSetOID: 1.2.643.2.2.31.3
Número de bloque S | Sentido | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | una | 2 | 3 | cuatro | 5 | 6 | 7 | ocho | 9 | A | B | C | D | mi | F | |
una | una | B | C | 2 | 9 | D | 0 | F | cuatro | 5 | ocho | mi | A | 7 | 6 | 3 |
2 | 0 | una | 7 | D | B | cuatro | 5 | 2 | ocho | mi | F | C | 9 | A | 6 | 3 |
3 | ocho | 2 | 5 | 0 | cuatro | 9 | F | A | 3 | 7 | C | D | 6 | mi | una | B |
cuatro | 3 | 6 | 0 | una | 5 | D | A | ocho | B | 2 | 9 | 7 | mi | F | C | cuatro |
5 | ocho | D | B | 0 | cuatro | 5 | una | 2 | 9 | 3 | C | mi | 6 | F | A | 7 |
6 | C | 9 | B | una | ocho | mi | 2 | cuatro | 7 | 3 | 6 | 5 | A | 0 | F | D |
7 | A | 9 | 6 | ocho | D | mi | 2 | 0 | F | 3 | 5 | B | cuatro | una | C | 7 |
ocho | 7 | cuatro | 0 | 5 | A | 2 | F | mi | C | 6 | una | B | D | 9 | 3 | ocho |
Este nodo de sustitución es utilizado por CryptoPRO CSP.
ID: id-Gost28147-89-CryptoPro-D-ParamSetOID: 1.2.643.2.2.31.4
Número de bloque S | Sentido | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | una | 2 | 3 | cuatro | 5 | 6 | 7 | ocho | 9 | A | B | C | D | mi | F | |
una | F | C | 2 | A | 6 | cuatro | 5 | 0 | 7 | 9 | mi | D | una | B | ocho | 3 |
2 | B | 6 | 3 | cuatro | C | F | mi | 2 | 7 | D | ocho | 0 | 5 | A | 9 | una |
3 | una | C | B | 0 | F | mi | 6 | 5 | A | D | cuatro | ocho | 9 | 3 | 7 | 2 |
cuatro | una | 5 | mi | C | A | 7 | 0 | D | 6 | 2 | B | cuatro | 9 | 3 | F | ocho |
5 | 0 | C | ocho | 9 | D | 2 | A | B | 7 | 3 | 6 | 5 | cuatro | mi | F | una |
6 | ocho | 0 | F | 3 | 2 | 5 | mi | B | una | A | cuatro | 7 | C | 9 | D | 6 |
7 | 3 | 0 | 6 | F | una | mi | 9 | 2 | D | ocho | C | cuatro | B | A | 5 | 7 |
ocho | una | A | 6 | ocho | F | B | 0 | cuatro | C | 3 | 5 | 9 | 7 | D | 2 | mi |
Este nodo de sustitución es utilizado por CryptoPRO CSP.
Nodo de reemplazo, definido por el Comité Técnico de Normalización "Protección de Información Criptográfica" (abreviado como TC 26) de Rosstandart [15] .
Identificador: id-tc26-gost-28147-param-ZOID: 1.2.643.7.1.2.5.1.1
Número de bloque S | Sentido | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | una | 2 | 3 | cuatro | 5 | 6 | 7 | ocho | 9 | A | B | C | D | mi | F | |
una | C | cuatro | 6 | 2 | A | 5 | B | 9 | mi | ocho | D | 7 | 0 | 3 | F | una |
2 | 6 | ocho | 2 | 3 | 9 | A | 5 | C | una | mi | cuatro | 7 | B | D | 0 | F |
3 | B | 3 | 5 | ocho | 2 | F | A | D | mi | una | 7 | cuatro | C | 9 | 6 | 0 |
cuatro | C | ocho | 2 | una | D | cuatro | F | 6 | 7 | 0 | A | 5 | 3 | mi | 9 | B |
5 | 7 | F | 5 | A | ocho | una | 6 | D | 0 | 9 | 3 | mi | B | cuatro | 2 | C |
6 | 5 | D | F | 6 | 9 | 2 | C | A | B | 7 | ocho | una | cuatro | 3 | mi | 0 |
7 | ocho | mi | 2 | 5 | 6 | 9 | una | C | F | cuatro | B | 0 | D | A | 3 | 7 |
ocho | una | 7 | mi | D | 0 | 5 | ocho | 3 | cuatro | F | A | 6 | 9 | C | B | 2 |
Este nodo se corrige como se recomienda en las pautas TK26 [16] , y como el único en la nueva revisión de los estándares GOST R 34.12-2015 [17] y GOST 34.12-2018 [18] , así como RFC 7836 y RFC 8891 .
Nodo de sustitución n.° 1 ( DKE n.° 1: elemento de clave de doble cadena ucraniano ) , definido en las "Instrucciones sobre el procedimiento para el suministro y uso de claves para herramientas de protección de información criptográfica " [19] .
Número de bloque S | Sentido | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | una | 2 | 3 | cuatro | 5 | 6 | 7 | ocho | 9 | A | B | C | D | mi | F | |
una | A | 9 | D | 6 | mi | B | cuatro | 5 | F | una | 3 | C | 7 | 0 | ocho | 2 |
2 | ocho | 0 | C | cuatro | 9 | 6 | 7 | B | 2 | 3 | una | F | 5 | mi | A | D |
3 | F | 6 | 5 | ocho | mi | B | A | cuatro | C | 0 | 3 | 7 | 2 | 9 | una | D |
cuatro | 3 | ocho | D | 9 | 6 | B | F | 0 | 2 | 5 | C | A | cuatro | mi | una | 7 |
5 | F | ocho | mi | 9 | 7 | 2 | 0 | D | C | 6 | una | 5 | B | cuatro | 3 | A |
6 | 2 | ocho | 9 | 7 | 5 | F | 0 | B | C | una | D | mi | A | 3 | 6 | cuatro |
7 | 3 | ocho | B | 5 | 6 | cuatro | mi | A | 2 | C | una | 7 | 9 | F | D | 0 |
ocho | una | 2 | 3 | mi | 6 | D | B | ocho | F | A | C | 5 | 7 | 9 | 0 | cuatro |
De acuerdo con la orden del Servicio Estatal de Comunicaciones Especiales de Ucrania No. 1273/35556 del 21 de diciembre de 2020 "Especificaciones técnicas para RFC 5652 ", este nodo de reemplazo se usa por defecto y está contenido en forma empaquetada (64 bytes) en el parámetros del certificado de clave pública , generado según DSTU 4145-2002 [20] .
Se cree [21] que GOST es resistente a métodos tan ampliamente utilizados como el criptoanálisis lineal y diferencial. El orden inverso de las teclas utilizadas en las últimas ocho rondas brinda protección contra el ataque de deslizamiento y el ataque de reflexión. Rostovtsev A. G., Makhovenko E. B., Filippov A. S., Chechulin A. A. en su trabajo [22] describieron el tipo de criptoanálisis, que se reduce a la construcción de una función objetivo algebraica y la búsqueda de su extremo. Se identificaron clases de claves débiles, en particular, se demostró que las claves escasas (con un predominio significativo de 0 o 1) son débiles. Según los autores, su método es en todo caso mejor que la enumeración exhaustiva, pero sin estimaciones numéricas.
En mayo de 2011, el conocido criptoanalista Nicolás Courtois demostró la existencia de un ataque a este cifrado, que tiene una complejidad de 28 (256) veces menor que la complejidad de la enumeración directa de claves, siempre que existan 2 64 pares de texto “texto sin formato/cerrado” [23] [24 ] . Este ataque no puede llevarse a cabo en la práctica debido a la complejidad computacional demasiado alta. Además, el conocimiento de 264 pares de texto sin formato/texto privado obviamente permite leer textos cifrados sin siquiera calcular la clave . La mayoría de los otros trabajos también describen ataques que son aplicables solo bajo ciertas suposiciones, como un cierto tipo de claves o tablas de sustitución, alguna modificación del algoritmo original, o aún requieren cantidades inalcanzables de memoria o computación. La cuestión de si existen ataques prácticos sin explotar la debilidad de las claves individuales o tablas de reemplazo permanece abierta [12] .
Los principales problemas del estándar están relacionados con la incompletitud del estándar en términos de generación de claves y tablas de sustitución. Se cree que el estándar tiene claves "débiles" y tablas de sustitución [22] [25] , pero el estándar no describe los criterios para seleccionar y descartar las "débiles".
En octubre de 2010, en una reunión del 1er Comité Técnico Conjunto de la Organización Internacional de Normalización (ISO/IEC JTC 1/SC 27), GOST fue nominado para su inclusión en el estándar internacional de cifrado en bloque ISO/IEC 18033-3. En este sentido, en enero de 2011 se formaron conjuntos fijos de nodos de reemplazo y se analizaron sus propiedades criptográficas. Sin embargo, GOST no fue aceptado como estándar y las tablas de sustitución correspondientes no se publicaron [26] .
Por lo tanto, el estándar existente no especifica un algoritmo para generar tablas de sustitución (S-boxes). Por un lado, esto puede ser información secreta adicional (además de la clave), y por otro lado, plantea una serie de problemas:
Criptosistemas simétricos | |
---|---|
Cifrados de flujo | |
Red Feistel | |
red SP | |
Otro |