AES es el estándar de cifrado estadounidense. Parte III

imagen



Otros articulos en el ciclo
AES — . I

ES — . II

AES — . III

AES — . IV

AES — . V.





El motivo de la publicación de dichos textos detallados sobre el estándar AES es proporcionar una oportunidad para conocerlo en detalle, suficiente no solo para desarrollar una implementación de software independiente del algoritmo de cifrado, sino también para crear algoritmos para posibles ataques criptoanalíticos en el cifrado, es decir, descifrar los cifrados sin conocer la clave ...



Esas publicaciones que están disponibles en la red no cumplen con estos objetivos y no pueden ser utilizadas por mí en el proceso de capacitación de especialistas.



Uno de los principales requisitos antiguos (o incluso antiguos) para los cifrados es crear un algoritmo de cifrado y cifrado abierto (accesible para estudio) a su alrededor (modos, protocolos, etc.), excepto la clave de cifrado. La clave es algo que debe mantenerse en la más estricta confianza de todos. Sin embargo, la clave no necesariamente tiene el sello de firma "Secreto". El límite de tal condición es que solo el destinatario del cifrado posee la clave, él mismo, en principio, debe establecerla.



Esta condición es impracticable para los sistemas de cifrado simétrico. Y esta es la diferencia fundamental entre los sistemas asimétricos (de dos claves) y los simétricos, en los que la fuente de información sobre la clave puede no ser la única. Se señaló anteriormente que AES es una versión simplificada del cifrado RIJNDAEL, y aquí usaremos la versión completa en algunos lugares.



AES (Key Schedule).



Elegir una clave al cifrar un mensaje es una tarea responsable. El enfoque general es que se selecciona un vector binario aleatorio y se utiliza para la clave en un espacio vectorial multidimensional.A menudo, una serie de algoritmos de cifrado y cifrados se caracterizan por la presencia de claves débiles o inválidas, que se identifican durante el desarrollo de los cifrados o durante su funcionamiento durante una investigación adicional. algoritmos de autores o analistas de criptógrafos y, en consecuencia, publicaciones al respecto.



A su vez, esto impone restricciones al procedimiento de generación de claves, lo que no es deseable, ya que lo complica. Los fundamentos matemáticos para el cifrado son muy similares a los fundamentos matemáticos para generar claves, y puede leer sobre ellos en detalle aquí .



El vector binario elegido se llama clave de cifrado y se convierte en un "cuadrado" de 4x4 = 16 bytes. Luego, se forman claves redondas a partir de él utilizando dos procedimientos especiales, que se utilizan en los procesos de cifrado / descifrado, que se describen en detalle aquí .



Un procedimiento se llama Expansión de clave, y el otro se llama Selección de clave redonda. El vector aleatorio aleatorio seleccionado con una longitud fija se expande. También es importante considerar cuidadosamente la elección de un generador de números aleatorios, para probarlo y aprobarlo.



Extensión clave



El significado de expandir la clave original (seleccionada) consiste en dividirla en bloques (32 bits cada uno) y luego generar a partir de ellos un conjunto de nuevos bloques de la misma longitud para cada ronda.

Entonces, seleccione la clave de cifrado (128 bits) AES = 2b 7e 15 16 28 ae d2 a6 ab f7 15 88 09 cf 4f 3c, para Nk = 4, que está representado por bloques de 4 bytes y su extensión redonda inicial tiene la forma w [0 ] = 2b7e1516; w [1] = 28aed2a6; w [2] = abf71588; w [3] = 09cf4f3c. El símbolo w [i] en la tabla de CC, i = 0 (1) 43, denota una columna de 4 bytes de la clave redonda.



Una sesión de cifrado es la preparación y transformación algorítmica de un mensaje, como una carta. El texto de la letra en representación de bits se divide en bloques de longitud fija Nb = 128, 192 o 256 bits. En el estándar AES, la longitud del bloque es de solo 128 bits.



Luego, cada bloque se representa mediante un cuadrado o (un rectángulo con 4 líneas) y se cifra por separado para un número fijo de rondas Nr = Nr (Nb, Nk), que es una función de dos variables: longitud de bloque Nb y longitud de clave Nk, que pueden tomar valores independientemente 128, 192, 256 bit.



La elección de la clave de cifrado no impone restricciones en la secuencia de bits en sí. Cada una de las rondas Nr utiliza su propia tecla redonda preformada o calculada directamente {w [i]}.



Las claves redondas se generan a partir de la clave de cifrado utilizando un algoritmo especial, que incluye el procedimiento de expansión de clave y el procedimiento de selección de clave redonda. Establecer teclas redondas directamente, sin pasar por estos procedimientos, es inaceptable.



La esencia y el propósito del primer procedimiento es convertir una clave de cifrado original dada en una clave expandida más larga (clave expandida). El número total de bits de la clave extendida de la que se seleccionan las teclas redondas está determinado por el producto K = Nk (Nr + 1): el número de bits del bloque de teclas se multiplica por el número de rondas incrementado en uno.



Ejemplo 1 . Sea Nb = Nk = 4, dados bloques de longitud 4 × 32 = 128 bits, luego Nr = 10.

Longitud K en bits para la clave extendida K = 128 ∙ 11 = 1408 bits.



El segundo procedimiento (RoundKey Selection) es una selección secuencial de 32Nk, es decir, 4 palabras de 32 bits de la clave extendida, es decir, la primera clave redonda está representada por las palabras Nk recién formadas iniciales, la segunda clave redonda por las siguientes palabras Nk y así sucesivamente hasta la última ronda.



Ejemplo 2... Con los mismos datos iniciales (ver el ejemplo anterior), la longitud total de la clave extendida en bytes contiene Nk (Nr + 1) = 4 ∙ 11 = 44 palabras de cuatro bytes W (i),

i = 0 (1) Nk (Nr + 1) - 1 Las filas de la tabla de control de calidad están numeradas con números naturales. La primera línea está numerada 4, ya que 4 líneas (numeradas 0,1,2,3) con la clave de cifrado no están incluidas en la tabla de CC.



Clave de cifrado de tabla AES para las 10 rondas (consulte la tabla de CC a continuación).







Las filas de la tabla se dividen en grupos (4 filas cada una). En cada grupo, todos los campos se completan en una sola línea superior. En las siguientes tres líneas, solo se rellenan los campos extremos (izquierdo y derecho). El campo izquierdo ( temp ) de las líneas siguientes y siguientes contiene los valores tomados del campo derecho de la línea que se encuentra arriba.



Pongamos un ejemplo de completar la primera fila con el número i = 4 de la tabla de control de calidad. Columna izquierda: los números de línea actuales comienzan con el valor (4) ya que los primeros valores de 0,1,2,3 no están incluidos en la tabla. En general, el índice (número de línea) i recorre los valores i = 0 (1) Nk (Nr + 1) -1 o i = 0 (1) 43 en total 44 palabras de 32 dígitos.



A la columna temporalel valor w [i-1] = 09cf4f3c se coloca y por rotación (desplazamiento cíclico de un byte) RotWord () obtenemos el valor CF4F3C09, que se coloca en la tercera columna. La cuarta columna contiene el resultado de 8A84EB01 que reemplaza bytes de SubBytes de los valores de la tercera columna , es decir, CF → 8A; 4F → 84; 3C → EB; 09 → 01 => 8A84EB01.



Cada cuarta fila de la tabla en la quinta columna se llena con el valor Rcon [i / Nk], una constante calculada por la fórmula Rcon (J) = 01000000, j = [i / Nk] = 2 j-1 = 2 0 = 1) el valor 01 00 00 00 se escribe con palabras de 4 bytes, cuyo primer byte es 2 0 = 1, es decir 0000 0001 2 , los bytes restantes de esta palabra de 32 bits son cero.



El campo de la columna 6 contiene la suma (XOR) de los campos del 4to y 5to 884EB01 + 01000000 = 8B84EB01;

El campo de la columna 7 contiene W [i - Nk] = W [4 - 4] = W [0] = 2B7E1516;

El campo de la columna 8 contiene la suma de los campos de las columnas 6 y 7 W [i = 4] = 884EB01 + 2B7E1516 = A0FAFE17;

Y ahora en detalle y con detalles consideraremos los procedimientos nombrados.



Procedimiento de expansión clave



Consideremos en detalle el procedimiento para generar una clave expandida a partir de la clave de cifrado original. Formalmente, la clave extendida W se describirá mediante una secuencia de bloques W [i], i = 0 (1) Nk (Nr + 1) -1, palabras de 4 bytes (teclas redondas) contenidas en la última columna de la tabla KK, en la que el primer Nk de 32 bits las palabras representan la clave original, es decir,

W = {W [0], W [1], W [2], W [3], W [4],…, W [K-1]}



i-ésimo posterior Las palabras se forman recursivamente a partir de palabras anteriores de acuerdo con una expresión en la que la suma es XOR.



...



Para las palabras W [i] de la clave, cuyo índice es un múltiplo de Nk, los valores de W [i-1] están sujetos a una transformación adicional antes de realizar la operación XOR. Esta transformación se describe como sigue.



La descripción de la transformación contiene funciones:



RotWord (): desplazamiento cíclico de bytes de la palabra de 32 bits a (0) a (1) a (2) a (3) de acuerdo con la regla

{a (0) a (1) a (2) a (3)} → {a (3) a (0) a (1) a (2)};



SubWord (): reemplazo de byte a (j) con elementos del cuadro S de la función SubBytes (), por ejemplo, el byte (af) se reemplaza con el byte s (a, f) del cuadro S; la acción es la misma que cuando se procesa un mensaje,

Rcon [j]: el término XOR es igual a 2 j-1 .





Posiciones resaltadas que son múltiplos de Nb, cuyos valores se forman utilizando las funciones SubWord (), RotWord (), Rcon (). Las posiciones W [0] –W [3] se llenan de acuerdo con los datos iniciales dados, todas las posteriores se calculan de acuerdo con la relación de W [i].



Selección de llave redonda



Selección de tecla redonda (RoundKeySelection). Para la ronda actual con el número r. La tecla redonda se elige como {W [Nb (r) -1], ..., W [Nb (r + 1) - 1]},

r = 1 (1) Nr.



Aquí observamos que el algoritmo de cifrado general proporciona diferentes opciones para conjuntos de variables Nb, Nk, Nr. Para una implementación específica de una versión fija, se puede simplificar significativamente. La tecla redonda se puede calcular sobre la marcha, lo que no requiere una gran memoria para almacenar toda la secuencia W. Puede limitarse a un búfer de palabras Nk.



Ejemplo 3 . Expliquemos las proposiciones teóricas anteriores mediante un ejemplo numérico. Sea, como antes, Nb = Nk = 4, Nr = 10. La clave de cifrado se da como una secuencia hexadecimal K = 2b7e1516 282ed2a6 abf71588 09cf4f3c







La arquitectura "cuadrada" y la computación orientada a bytes determinan la forma de su presentación en la siguiente tabla.





La columna izquierda se ha agregado a la tabla: el número (r) de la ronda.

En la primera línea r = 1, i = 4, el byte anterior W [i-1] = W [3] se escribe en la tercera columna, es decir El último byte de la clave de cifrado K. Como el índice i = 4 es un múltiplo de Nk = 4, entonces en la columna 6 escribimos (Rcon (J) = 01000000, j = [i / Nk] = 2 j-1 = 2 0 = 1) el valor 01 00 00 00 4- x palabra de byte, cuyo primer byte es 2 0 = 1, es decir 0000 0001, el resto de los bytes de esta palabra de 32 bits son cero.



En la cuarta columna de la tabla, ingresamos los valores de la columna anterior, pero desplazados cíclicamente por 1 byte a la izquierda (rotación de palabras - RotWord). La quinta columna contiene el resultado de un reemplazo de byte de los valores de la columna anterior con los valores de byte del bloque S (función SubWord - reemplazo de byte). Después de eso, se realiza la adición de mod2 (XOR) del contenido de las columnas 5 y 6, 8a84eb01 + 0100 0000 = 8b84eb01, y el resultado de la suma se ingresa en la columna 7.



En la representación binaria del byte 0000 0001 2 = 01, los 16 bits menos significativos se encuentran a la derecha.



La columna 8 contiene el valor de la palabra W [i-Nk] = W [0] (para la primera línea, este es el valor de la primera palabra (byte izquierdo) de 4 bytes de la clave de cifrado W [0]), que se agrega mediante la operación XOR 8b 84 eb 01+ 2b 7e 15 16 = a0 fa fe 17 con contenido de 7 columnas. El resultado de la suma (columna 9) es solo la primera de las cuatro palabras de 4 bytes de la tecla redonda de la primera ronda.



Las otras tres palabras de la tecla redonda de la primera ronda se forman sin usar la función de desplazamiento cíclico, reemplazo y Rcon [j], ya que sus números no son múltiplos de Nk. El contenido de la columna 9 se transfiere a la tercera columna de la siguiente fila de la tabla.



Definición de Rcon [j]. Este procedimiento se realiza de acuerdo con un algoritmo especial, cuyas acciones ilustraremos con ejemplos. El argumento j de la función Rcon [j] es entero y está determinado por el valor actual de la variable i, el número de palabra clave. Obviamente

j = 1, 2, 3, ... para i = Nk, 2Nk, 3Nk, ....



Como Nk en nuestro ejemplo es 4, tenemos valores enteros de j para i = 4, 8, 12. Además, para cada entero j, Rcon [j] = 2 j-1 = 1, 2, 4, 8, 16, ...

Se permite duplicar los valores siempre que Rcon [j] sea un elemento del campo GF (2 8 ).



Para i> 32 obtenemos j> 8. Los valores fuera del campo deben devolverse al campo. Esto se logra al reducir la representación polinómica de los elementos del campo Rcon [j] (modφ (x)).



Ejemplo 4. Sea i = 32, 36, 40. Entonces j = 8, 9, 10. Estos valores están fuera del campo. Los devolvemos al campo mediante el módulo de reducción φ (x) y calculamos los valores requeridos.

Determinemos los valores correspondientes de Rcon [j]. Los resultados del cálculo se resumen en una tabla.





Esto puede completar la consideración de los pasos para generar claves de cifrado AES redondas.



All Articles