AES es una clave de bloque, el algoritmo ingresa datos de 128 bits y la longitud de la clave también es de 128 bits. Nr se utiliza para representar el número de rondas para cifrar un paquete de datos (la relación entre el número de rondas de cifrado y la longitud de la clave se enumera en la Tabla 1). Cada ronda requiere la participación de Expandedkey (i) con la misma longitud que el paquete de entrada. Debido a que la longitud de la clave de cifrado K ingresada externamente es limitada, se debe usar un programa de expansión de claves en el algoritmo para expandir la clave externa K en una cadena de bits más larga para generar las claves de cifrado y descifrado para cada ronda.
1.1 Cambios periódicos
Cada conversión cíclica de AES consta de las siguientes tres capas:
Transformación de capa-subbyte no lineal
Fila; -fila de capa mixta: realiza operaciones ShiftRow y MixColumn;
Cifrado de claves-operación AddRoundKey.
① La transformación de subbytes es una transformación de bytes no lineal que actúa sobre cada byte en el estado y se puede asignar a través del cuadro S calculado.
Cambios:
ldi zh, $01; Apunta el puntero a la primera dirección del cuadro S.
mov zl, R2; utiliza los datos a buscar como la dirección de orden inferior del puntero.
ldtemp, z+; saca estos datos correspondientes
mov r2, temperatura; intercambia datos para completar la búsqueda en la tabla
.
.
.
Remojar en agua lo suaviza
② ShiftRow es transposición de bytes. Gira las filas en el estado según diferentes compensaciones, que también se seleccionan en función de Nb. donde x es (02) como se muestra en la siguiente figura.
rcon[1]=[01000000]; rcon[2]=[02000000]; Rcon[3]=[04000000]……
Generación de clave extendida: clave extendida Las primeras Nk palabras de la clave son la clave externa K; las siguientes palabras W[[i]] son iguales a la diferencia entre las palabras anteriores W[[i-1]] y las Nk palabras anteriores W[[i-1]. Nk]] ¿O es decir, W[[i]]=W[[i-1]]? W[[i- Nk]]. Pero si I es múltiplo de Nk, ¿entonces W[i]=W[i-Nk]? ¿Subpalabra (Rotword (W[[i-1]]))? Rcon[i/Nk].
Cuando se ejecuta el programa, se llaman principalmente las subrutinas anteriores, y la implementación específica es la siguiente:
Expansión de botón:
rcall rotwoed
Llamar a subpalabra
rcall Rcon
.
.
.
2 Optimización del algoritmo de cifrado y descifrado AES
Se puede ver claramente en el proceso del algoritmo anterior que los cambios periódicos son la parte que consume más tiempo de todo el algoritmo, por lo que la optimización del algoritmo está aquí y se puede optimizar la parte cambiante del círculo, que es el cambio de columnas. Porque la sustitución de columnas es la regla de la congruencia de la multiplicación modular. Dado que el cifrado y descifrado AES son asimétricos, si no se realiza la optimización, la velocidad de descifrado del algoritmo será mucho más rápida que la del cifrado [1].
(1) Operación de cifrado. Mixcolumn se puede optimizar llamando a la subrutina xtime.
Otro método de optimización eficaz es construir una tabla fuera de línea, es decir, una tabla de cambio de columnas. De esta forma, se puede mejorar la velocidad de cifrado consultando la tabla.
②Optimización del algoritmo de descifrado. Porque los coeficientes de la transformación de la columna de descifrado son 09, 0E, 0B y 0D respectivamente. Obviamente, implementar la multiplicación anterior en el microcontrolador AVR requiere mucho tiempo, lo que resulta en una disminución en el rendimiento de descifrado.
Método de optimización uno: descomponer los cambios de columna y reducir el número de multiplicaciones.
Estudiando detenidamente los coeficientes de la matriz de descifrado, no es difícil encontrar que existe una cierta relación entre la matriz de descifrado y la matriz de cifrado, es decir, la matriz de descifrado es igual a la matriz de cifrado. matriz multiplicada por una matriz. A través de esta conexión, se puede optimizar el algoritmo:
De esta manera, la transformación de columnas se puede lograr con solo unos pocos XOR simples, reduciendo el número de multiplicaciones y mejorando la velocidad de descifrado.
Método de optimización dos: construir una tabla.
Igual que el método de construcción de cifrado, se pueden construir cuatro tablas: T[ea]= e×a; t[9a]= 9×a; ]= b×a De esta manera, solo se necesita una búsqueda en la tabla y un XOR simple para completar la tarea de descifrado. Aunque este método añade un costo adicional, es un método eficaz.
3 Simulación experimental de cifrado y descifrado AES
De acuerdo con los pasos experimentales y los métodos de optimización anteriores, se obtuvieron los resultados experimentales enumerados en la Tabla 2 y la Tabla 3.
Establezca la clave maestra en: 000102030405060708090 a 0 b 0 c 0d 0 e 0 f (128 b it).
Texto plano cifrado:00112233455678899 aabbccddeeff.
Texto cifrado: 69 C4 E0 d 86 a7 b 0430 D8 CDB 78070 b4c 55 a.
Texto cifrado descifrado: 69 C4 E0 d 86 a7 b 0430 D8 CDB 78070 B4 c55a.
Borrar texto:00112233455678899 aabbccddeeff.
En resumen, el cifrado AES es un sistema de cifrado asimétrico y su descifrado es más complejo y requiere más tiempo que el cifrado. El algoritmo de optimización de descifrado no aumenta el espacio de almacenamiento, sino que lo procesa en función de los cambios de columnas. Este programa es más pequeño que el original y ahorra tiempo. El método de optimización de descifrado es el más rápido y eficiente, pero requiere mayor espacio de almacenamiento en el sistema, por lo que su programa también es el más grande.
Omitir referencias a amigos en los diagramas de flujo.