Voy a hacer una breve historia corta. Ha pasado un tiempo que deseo implementar mi propio programa de cifrado/descifrado AES. El programa de cifrado funcionó bien y se encriptaron sin ningún error ni salida extraña (ya que comparé la salida de mi programa con una comercial y el resultado fue el mismo).Algoritmo de descifrado AES
Wikipedia fue (es) mi guía en esta implementación en la que leí "Se aplica un conjunto de rondas inversas para transformar el texto cifrado en el texto original utilizando la misma clave de cifrado".
Hay un par de módulos que he implementado:
- Añadir redonda clave
- filas Shift
- Sub bytes
- mezcla Columna
Me pareja también implementado de aplicación inversa de los módulos anteriores:
- filas de desplazamiento de retroceso
- inversa Sub Byte
- mezcla inversa Columna
NOTA: Yo no implementaron clave de ciclo inverso, ya que, Es XOR ing el texto plano con la clave de cifrado, y reverso de XOR es en sí XOR (corríjanme si me equivoco)
Así que putts estos módulos en el orden inverso al que hice cifrado, pero nunca llegó a mis texto plano posterior:
expandkey128(key);
rev_subbytes(data);
rev_shiftrows(data);
addroundkey(data,key,10);
for(int i = 9; i>= 1; i--) {
rev_subbytes(data);
rev_shiftrows(data);
rev_mixColum(data);
addroundkey(data,key,i);
}
addroundkey(data,key,0);
// Please note that I also did from 0 to 10 ,
// instead of 10 to 0 and didn't workout
Y también pensé, tal vez no debería implementar el modelo inverso de los módulos, tal vez tenga que usar esos módulos con los que hice el cifrado, solo en orden inverso; ¿bien adivina que? no funcionó! :
expandkey128(key);
addroundkey(data,key,0);
for(int i = 1; i<= 9; i++) {
subbytes(data);
shiftrows(data);
mixColum(data);
addroundkey(data,key,i);
}
subbytes(data);
shiftrows(data);
addroundkey(data,key,10);
Así que aquí está la pregunta: ¿qué pasa? || ¿cuál es la secuencia correcta de aplicación de estos llamados módulos o funciones si se quiere?
¿ha calculado correctamente su s-box, porque no puede usar la misma que está utilizando para el cifrado? http://en.wikipedia.org/wiki/S-box Este comentario falta en la versión en inglés en wikipedia. eche un vistazo a la especificación directamente: http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf. Usted debe calcular el s-box inverso para descifrar. – evildead
Sí en realidad en rev_subbytes Tengo S-box inverso de Rijndael –
hay una gran herramienta de allí: http://www.cryptool.de/ En eso puedes hacer cualquier transformación a mano.Tal vez deba depurar cada paso, tal vez la herramienta lo ayude con eso para verificar cada paso. – evildead