Red de conocimiento del abogados - Bufete de abogados - Cómo mejorar el algoritmo de cifrado AES

Cómo mejorar el algoritmo de cifrado AES

El algoritmo AES se basa en operaciones de permutación y desplazamiento. La permutación es la reordenación de datos y la sustitución es el reemplazo de una unidad de datos por otra. AES utiliza varios métodos diferentes para realizar operaciones de permutación y desplazamiento. AES es un cifrado de bloque de claves simétrico iterativo. Puede utilizar claves de 128, 192 y 256 bits, cifrando y descifrando datos con 128 bits (16 bytes). A diferencia de los pares de claves utilizados en el cifrado de clave pública, el cifrado de clave simétrica utiliza la misma clave para cifrar y descifrar datos. El cifrado de bloque devuelve la misma cantidad de datos cifrados que los datos de entrada. El cifrado iterativo utiliza una estructura de bucle donde los datos de entrada se permutan y reemplazan repetidamente. Según los registros, en el año 400 a. C., los antiguos griegos inventaron el cifrado de permutación. En 1881 apareció la primera patente de secreto telefónico del mundo. Durante la Segunda Guerra Mundial, el ejército alemán lanzó la máquina de cifrado Ingmar y la criptografía jugó un papel muy importante en la guerra.

Los pasos principales del algoritmo de cifrado AES

1.1 Descripción general del algoritmo AES

l Dado un texto sin formato x, inicializa el estado en x, realiza la Operación AddRoundKey y RoundKey se aplica XOR con el estado.

l Para cada una de las rondas Nr-1 anteriores, se utilizan pares de cajas S para operaciones de reemplazo, que se denominan subbytes;; Reemplazar estado, ShiftRows. ; Luego opere en State, MixColumns y luego realice la operación AddRoundKey.

l Ejecute las operaciones SubBytes, ShiftRows y AddRoundKey en secuencia.

l define el estado como texto cifrado y.

1.2 Pseudocódigo

Contraseña (byte de entrada [4*Nb], byte de salida [4*Nb], palabra w[Nb*(Nr+1)])

Inicio

Estado del byte [4, Nb]

Estado = entrada

AddRoundKey(estado, w[0, Nb-1 ])

Para ronda = 1, pasos 1 a Nr-1

Subbytes(estado)

ShiftRows(estado)

Columnas mixtas (estado)

AddRoundKey(estado, w[ronda*Nb, (ronda+1)*Nb-1])

Termina en

Subbyte(estado)

ShiftRows(estado)

AddRoundKey(estado, w[Nr*Nb, (Nr+1)*Nb-1])

salida = estado

Fin

2 Implementación de KeyExpansion()

2.1 Requisitos

En el proceso de cifrado, la clave de 128 bits se extiende a 9 rondas, y luego se construye la clave para 11 rondas después de las dos rondas inicial y final. Cada clave de ronda consta de cuatro palabras. Cada palabra consta de cuatro bytes.

2.2 Diseño de algoritmos

Entrada: byte[] clave, byte[] w //key es la clave y w es la clave extendida.

Salida: byte[] w //La longitud de la clave extendida es 4 * 4 * 11.

Transporte:

1) Cree una matriz unidimensional de 4 bytes para almacenar una palabra. byte[]temp;

2) Enviar clave[0.15] a W[0.15]; //Se han asignado 4 palabras a w.

3) Para I = 4 a 43

//Lo siguiente procesa una palabra (32 bits) a la vez

temp = w[I-1 ];

If (I = 0 mod 4) //Procesa una palabra entonces.

j = 1 a 4 //Procesamiento de palabras de 4 bytes

En este bucle, el orden de toma del índice de la matriz temporal es 1, 2, 3, 0 //RotWord operación .

Si es el primer byte de una palabra, toma la constante Rcon Rcon(I/4);

temp[j]= sbox(temp[(j+1)/ 4]constante rcon

Termina en

temp = subword(rotword(temp))⊕rcon[i/4]

Terminará si.. .

w[I]= w[i-4]⊕temp;

Termina en

4) Salida w

3 multiplicación de polinomios Operación módulo GF(28)

3.1 requisitos

Multiplicar los dos bytes en el campo finito GF(28) por el polinomio, módulo el polinomio irreducible m(x)=x8 +x4 +x3+x+1.

3.2 Diseño de algoritmos

Entrada: byte a, byte b

Salida: byte r

Base matemática:

p >

Propiedades de los campos finitos de GF(28): la suma de dos elementos es consistente con la suma de dos bytes en modo de bits 2; la multiplicación satisface la ley asociativa;

Considere polinomios Un término en aixi (i∈0-7), multiplica el polinomio por x lineal:

b(x)= b7x 7+b6x 6+b5x 5+B4 x4+b3x 3+B2 x2+ b 1x+B0,

obtener

b7x 8+b6x 7+b5x 6+b4x 5+B3 x4+b2x 3+b 1x 2+B0X (Fórmula 1).

El resultado módulo m(x) se complementa para obtener x*b(x).

Si b7 = 0, entonces la fórmula 1 es x*b(x).

Si b7 no es igual a 0, entonces se debe restar m(x) de la Ecuación 1, y el resultado es x*b(x). Simplemente llama al polinomio multiplicado por x.

Se puede concluir que aixi multiplicado por b(x) se puede multiplicar por I veces. La multiplicación de x (la representación hexadecimal es 0x02) se puede lograr desplazando el byte un bit hacia la izquierda y luego sumándolo al módulo 2 bit a bit de 0x1b. Esta operación se registra temporalmente como xtime (). Al aplicar xtime() repetidamente, se puede lograr una multiplicación de x de orden superior. Cualquier multiplicación se puede implementar usando xtime() agregando resultados intermedios. Por ejemplo:

57 * 13 = fe, esto se debe a que:

57 * 02 = xtime(57) = ae

57 * 04 = xtime( ae ) = 47

57 * 08 = xtime(47) = 8e

57 * 10 = xtime(8e) = 07

Por lo tanto

57 * 13 = 57 * ( 01⊕ 02 ⊕10 )

= 57⊕ ae⊕ 07

=Iron

Sbox de 4ta generación

4.1 Requisitos

Considere un byte byte como un polinomio en el campo finito GF (28), encuentre su módulo inverso multiplicativo m (x) y luego coloque el inverso multiplicativo en Realizar una transformación afín en GF(2).

4.2 Diseño de algoritmos

Entrada: byte a

Salida: byte[] S

Lógica matemática:

Según la propiedad del campo finito GF(28). Un generador (también primitivo) A, su A (28-1) ≡ 1 mod m (x). O a255 ≡ 1 mod m(x). Además, las potencias de a de 1 a 28-1 constituyen el campo finito GF (28).

Invierte la propiedad de b * b -1 ≡ 1 mediante multiplicación. Encontrar el recíproco de la multiplicación se puede simplificar de la siguiente manera

Supongamos que x = am, y es el inverso multiplicativo de x, entonces y = a255-m.

Transporte:

Establezca tres matrices, a saber: byte s [255], byte l [255], byte e [255].

Supongamos que la primitiva es a = 0x03,

Envíe la potencia 0, 1, 2...255 de A módulo m(x) a la matriz L respectivamente. La operación de a se refiere a la operación de multiplicación polinomial anterior. El siguiente es un pseudocódigo:

Para i = 0 a 255

L[i] = ai (Fórmula 2)

Termina en

Para facilitar el cálculo del exponente del inverso multiplicativo, la matriz E almacena el exponente de potencia I de ai. Sea el valor de ai en la Ecuación 2 el subíndice de la matriz E, y el subíndice I de ai en la matriz L sea el valor correspondiente en la matriz E. Cada elemento de la Ecuación 2 tiene E[ai] = i.

De las dos matrices L y E anteriores, se puede obtener el inverso multiplicativo de cualquier byte en el dominio GF(28).

Dejemos que ai genere el byte c. donde a es un generador en el dominio GF(28). Para encontrar el inverso multiplicativo de c, simplemente encuentre A255-i. En la matriz E, el exponente de potencia I del generador A se puede encontrar mediante C. El exponente de potencia de c-1 es 255-i. L[255-i].

Para cada byte, el inverso multiplicativo se obtiene de acuerdo con el contenido anterior y la matriz S se obtiene mediante transformación afín.

Es Sbox