Cómo utilizar Java para cifrar contraseñas mediante el método de cifrado AES
Para texto sin formato de cualquier longitud, AES primero lo agrupa en grupos y la longitud de cada grupo es de 128 bits. Después de la agrupación, cada grupo de texto plano de 128 bits se cifra por separado.
El proceso de cifrado de cada grupo de texto sin formato de 128 bits de longitud es el siguiente:
(1) Coloque el grupo de texto sin formato AES de 128 bits en la matriz de estado.
(2) Transformación AddRoundKey: realice la transformación AddRoundKey en la matriz de estado y use la clave expandida para la operación XOR (la expansión de la clave se discutirá en detalle en el Principio experimental 7).
(3) 10 rondas de bucles: AES realiza 10 rondas de procesos de subcifrado similares en la matriz de estado.
●Transformación SubBytes: la transformación SubBytes es una transformación no lineal de la matriz de estado.
●Transformación ShiftRows: la transformación ShiftRows es una transformación no lineal del estado. Transformación ShiftRows: la transformación ShiftRows es una transformación no lineal; transformación de la matriz de estado Las filas se mueven circularmente;
● Transformación MixColumns: la transformación MixColumns transforma las columnas de la matriz de estado;
● Transformación AddRoundKey: la transformación AddRoundKey realiza isomorfismo en el estado funcionan la matriz y la tecla expandida.
La ronda final de pasos de cifrado es la siguiente:
● Transformación SubBytes: la transformación SubBytes es una transformación no lineal de la matriz de estado.
● ShiftRows; transformación: la transformación ShiftRows cambia el estado Las filas de la matriz se desplazan circularmente;
● Transformación AddRoundKey Transformación AddRoundKey: la transformación AddRoundKey realiza una operación XOR entre la matriz de estado y la clave extendida;
(4) Bucle de 10 rondas El contenido de la matriz post-estado es el texto cifrado.
El pseudocódigo del algoritmo de cifrado AES es el siguiente.
En el algoritmo AES, la transformación AddRoundKey requiere el uso de una clave extendida. La clave original de 128 bits se expande para generar una clave extendida de 44 palabras (cada palabra tiene 32 bits). La clave extendida se usa para 11 transformaciones AddRoundKey y una AddRoundKey usa una clave extendida de 4 palabras (128 bits). La clave extendida de 44 palabras se usa en 11 transformaciones AddRoundKey, una de las cuales usa una clave extendida de 4 palabras (128 bits).
En tercer lugar, el proceso de agrupación de AES
Para texto sin formato de cualquier longitud, AES primero realiza la agrupación. El método de agrupación es el mismo que DES, es decir, la longitud de la agrupación de texto sin formato. se puede complementar con 0, pero cada La longitud de cada paquete es de 128 bits.
AES tiene tres estándares de longitud de clave: 128 bits, 192 bits y 256 bits. Las claves con otras longitudes no están incluidas en los estándares federales de AES. En la siguiente introducción, usaremos claves de 128 bits. ejemplo.
IV.Matriz de estado
La matriz de estado es una matriz de bytes con 4 filas y 4 columnas. La llamada matriz de bytes significa que cada elemento de la matriz es. 1 byte de longitud de datos. Denotamos la matriz de estado como Estado, y los elementos en Estado se denotan como Sij, que representa los elementos en la i-ésima fila y j-ésima columna de la matriz de estado. El paquete de texto plano de 128 bits se divide en 16 bloques por bytes. El primer bloque se registra como "bloque 0", el segundo bloque se registra como "bloque 1", y así sucesivamente. El paquete de texto sin formato de 128 bits se divide en 16 bloques por bytes, el primer bloque está marcado como "Bloque 0", el segundo bloque está marcado como "Bloque 1", y así sucesivamente, el último bloque está marcado como "Bloque 15" y luego Coloque estos 16 bloques de datos de texto sin formato en la matriz de estado. El método para colocar estos 16 bloques de datos de texto sin formato en la matriz de estado se muestra en la Figura 2-2-1.
Bloque de datos 0
Bloque de datos 4
Bloque de datos 8
Bloque de datos 12
Bloque de datos 1
Bloque de datos 5
Bloque de datos 9
Bloque de datos 13
Bloque de datos 2
Bloque 6
Bloque 10
Bloque 14
Bloque 3
Bloque 7
Bloque 11
Bloque 15
Figura 2-2-1 Coloque el bloque de texto sin formato en la matriz de estado
5. Transformación AddRoundKey
Después de generar la matriz de estado, la primera. El paso es realizar la transformación AddRoundKey, que realiza una operación XOR bit a bit en la matriz de estado y la clave dilatada, como se muestra a continuación.
Donde c es el número de columnas, la matriz W es la clave de expansión, round es el número de rondas de cifrado y Nb es el número de columnas en la matriz de estado.
El proceso se muestra en la Figura 2-2-2.
Figura 2-2-2 Transformación AddRoundKey del algoritmo AES
VI.10 rondas
La matriz de estado después de AddRoundKey continuará experimentando 10 rondas de sub- proceso de cifrado. Las primeras 9 rondas del proceso de subcifrado pasan cada una por 4 transformaciones diferentes, a saber, Transformación SubBytes, Transformación ShiftRows, Transformación MixColumns y Transformación AddRoundKey, mientras que la última ronda solo tiene 3 transformaciones, a saber, Transformación SubBytes, Transformación ShiftRows y Transformación AddRoundKey. La transformación AddRoundKey se analizó anteriormente y las tres transformaciones restantes se analizarán por separado a continuación.
1.Transformación SubBytes
SubBytes es una transformación no lineal que actúa de forma independiente sobre los bytes de estado. Incluye los siguientes dos pasos:
(1) En. el dominio GF(28), encuentre el inverso multiplicativo, es decir, β∈ GF(28) de α∈ GF(28), tal que αβ = βα = 1mod(x8 + x4 + x3 + x + 1). x+1).
(2) Transformación en el dominio GF(28) La transformación utiliza la multiplicación de matrices de la siguiente manera:
Dado que todas las operaciones se realizan en el dominio GF(28), el resultado final. también está en el GF (28) Dentro del dominio. Si g ∈ GF (28) es un elemento independiente de GF (28), entonces para α∈ GF (28), α ≠ 0, existe
β∈ GF (28), así: p >
β = gαmod (x8 + x4 + x3 + x + 1)
Porque g255 = 1mod (x8 + x4 + x3 + x + 1)
Entonces g255 - α = β-1mod (x8 + x4 + x3 + x + 1)
Según el algoritmo de transformación SubBytes, se puede obtener la tabla de reemplazo de SubBytes que se muestra en la Tabla 2-2-1, que también es llamado AES. Esta tabla se utiliza de la siguiente manera: cada elemento de la matriz de estado se reemplaza por esta tabla. Cada elemento tiene 8 bits. Los primeros 4 bits determinan el número de fila y los últimos 4 bits determinan el número de columna. SubBytes (0C), encontrar FE se puede obtener de la fila 0 y la columna C de la tabla.
Tabla 2-2-1 Tabla de sustitución de SubBytes de AES
El proceso de transformación se muestra en la Figura 2-2-3. La Figura 2-2-3 muestra que se pueden utilizar SubBytes. en su lugar en AES S-box. 3 mostrados.
Figura 2-2-3 Transformación de SubBytes
El proceso de cifrado AES requiere algunos conocimientos matemáticos básicos, incluido el cálculo de polinomios en el dominio GF(2) y el cálculo de polinomios. en el dominio GF(28) Cálculos polinómicos, operaciones de multiplicación de matrices, etc. Si está interesado en esto, consulte los libros de matemáticas relevantes.
2.Transformación ShiftRows
La transformación ShiftRows es relativamente simple. La primera fila de la matriz de estado permanece sin cambios, la segunda fila se desplaza cíclicamente hacia la izquierda 1 byte y la tercera. La fila se desplaza cíclicamente hacia la izquierda en 2 bytes, la cuarta fila se desplaza circularmente hacia la izquierda en 3 bytes y el proceso de transformación ShiftRows se muestra en la Figura 2-2-4.
Figura 2-2-4 Transformación AES ShiftRows
3. Transformación de columnas mixtas
En la transformación de columnas mixtas, las columnas de la matriz de estado se consideran dominios. Polinomio en GF(28), c(x) multiplicado módulo (x4 + 1)
c(x)=(03)x3+( 01)x2 + (01)x + (02)
Aquí (03) se expresa en hexadecimal, y así sucesivamente. c(x) y x4 + 1 son primos relativos, por lo que existe una inversa:
d(x) = (0B)x3 + (0D)x2 + (0G)x + (0E), tal que c(x)?d(x) = (D1)mod(x4 + 1).
Con:
El proceso se muestra en la Figura 2-2-5.
Figura 2-2-5 Transformación MixColumns del algoritmo AES
7 Expansión de claves
En el algoritmo AES, la transformación AddRoundKey requiere el uso de la expansión. key La clave expandida se registra como una subclave. La clave original de 128 bits se expandirá para producir una subclave de 44 palabras (cada palabra tiene 32 bits). Estas subclaves de 44 palabras se utilizan. Dado que se utilizan 11 transformaciones AddRoundKey, una AddRoundKey. utiliza 4 palabras. AddRoundKey utiliza una clave extendida de 4 palabras (128 bits).
El algoritmo de expansión de claves se basa en palabras (una palabra consta de 4 bytes o 32 bits). La clave original de 128 bits se expande para producir subclaves de 44 palabras, que se almacenan en una matriz de palabras, denominada W[44]. La clave original de 128 bits se divide en 16 partes y se almacena en una matriz de bytes: Clave[0], Clave[1]...Clave[15].
En el algoritmo de expansión de claves, Rcon es una matriz de 10 palabras en la que se almacenan las constantes definidas por el algoritmo:
Rcon[0] = 0x01000000
Rcon [1] = 0x02000000
Rcon[2] = 0x04000000
Rcon[3] = 0x08000000
Rcon[4] = 0x10000000
Rcon [5 ] = 0x20000000
Rcon[6] = 0x40000000
Rcon[7] = 0x80000000
Rcon[8] = 0x1b000000
Rcon [9] = 0x36000000
Además, hay otras dos operaciones RotWord y SubWord incluidas en la expansión clave, que se explicarán a continuación:
RotWord( B0,B1, B2, B3) Desplaza circularmente los 4 bytes B0, B1, B2, B3, es decir,
RotWord( B0,B1,B2,B3) = ( B1,B2,B3,B0 )
p>
SubWord( B0,B1,B2,B3) Utilice el S-box de AES para desplazar circularmente los cuatro bytes B0, B1, B2, B3, es decir
SubWord( B0 ,B1,B2,B3 ) = ( B'0,B'1,B'2,B'3 )
Donde, B'i = SubBytes(Bi), i = 0,1,2 ,3.
El algoritmo de expansión de claves es el siguiente:
8. Proceso de descifrado
Los procesos de cifrado y descifrado de AES no son los mismos. el texto cifrado es una agrupación de 128 bits, el método de agrupación es el mismo que el cifrado y luego se realiza la transformación circular.
El proceso de descifrado de AES se puede considerar como el proceso inverso del proceso de cifrado. También consta de 10 rondas. Cada ciclo consta de cuatro transformaciones, a saber, InvShiftRows, InvSubBytes, InvMixColumns y AddRoundKey;
El proceso se puede describir de la siguiente manera, como se muestra en el siguiente fragmento de código:
9. Transformación InvShiftRows
La transformación InvShiftRows es el proceso inverso de la transformación ShiftRows. muy simple. Especifique la transformación InvShiftRows de la siguiente manera.
Sr,(c+shift(r,Nb))modNb= Sr,c para 0 < r< 4 y 0 ≤ c < Nb
Figura 2-2-6 Demostración este proceso.
Figura 2-2-6 Transformación InvShiftRows del algoritmo AES
Transformación X.InvSubBytes
La transformación InvSubBytes es la transformación inversa de la transformación SubBytes, que utiliza el método S- de la transformación inversa de AES Box realiza el reemplazo de bytes. La Tabla 2-2-2 muestra la tabla de reemplazo de la transformación InvSubBytes. La Tabla 2-2-2 muestra la tabla de sustitución para la transformación InvSubBytes.
Tabla 2-2-2 Tabla de reemplazo de InvSubBytes
11 Transformación InvMixColumns
La transformación InvMixColumns es similar a la transformación MixColumns, multiplicada por d(x) p>
d(x) = (OB)x3 + (0D)x2 + (0G)x + (0E)x + (0G)x (0E)
La siguiente fórmula es verdadera: p>
( (03)x3 + (01)x2 + (01)x + (02) )⊙d(x)=(01)
La ecuación anterior se puede describir como la siguiente matriz de multiplicación:
Doce. Transformación AddRoundKey
La transformación AddRoundKey en el proceso de descifrado AES es la misma que la transformación AddRoundKey en el proceso de cifrado. Ambas realizan operaciones XOR de bits en el. subclaves. El algoritmo de expansión de claves para el proceso de descifrado también es el mismo que para el proceso de cifrado. Los datos de la matriz de estado final son texto sin formato.