Raiden (algoritmo)

Raiden
Creador Julio Castro, Javier Olabarrieta
Creado 2006 _
publicado 2006 _
Tamaño de clave 128 bits
Tamaño de bloque 64 bits
Número de rondas dieciséis
Tipo de Red Feistel

Raiden es un cifrado de  bloque tipo Feistel Network introducido en 2006 por un grupo de autores encabezado por Julio César Hernández Castro .  El algoritmo se desarrolló utilizando programación genética y se basa en las ideas del cifrado de bloques TEA , que es ampliamente conocido por su combinación de código compacto, estructura simple y memorable y alta velocidad de ejecución. Dado que el algoritmo TEA ha sido reconocido recientemente como vulnerable a una serie de ataques, los autores propusieron, en su opinión, un reemplazo equivalente para el algoritmo, presumiblemente libre de vulnerabilidades y solo ligeramente inferior en velocidad.

El cifrado Raiden, que repite por completo la estructura del algoritmo TEA, cifra un bloque de 64 bits, tiene dos subbloques de 32 bits, una clave secreta de 128 bits y realiza 16 rondas completas de forma predeterminada, cada una de las cuales tiene dos rondas del Red Feistel . La estructura del cifrado permite el uso de 32 o más rondas.

Porque este es un algoritmo de cifrado de bloque, donde la longitud del bloque es de 64 bits y la longitud de los datos puede no ser un múltiplo de 64 bits, el valor de todos los bytes que complementan el bloque a un múltiplo de 64 bits se establece en 0x01.

Seguridad

El algoritmo, a diferencia de TEA, en realidad no ha sido investigado por los criptoanalistas en este momento. Según los autores, 16 rondas completas del algoritmo tienen un nivel de seguridad igual a 32 rondas completas del algoritmo TEA, sin tener las vulnerabilidades del algoritmo original. La diferencia más importante con el cifrado TEA es el programa de claves extendido. Mientras que el algoritmo TEA solo permite agregar una variable con una constante 0x9e3779b9, Raiden usa un programa clave cercano a PRNG , transforma la clave y genera subclaves para cada ronda. El cifrado pasa con éxito los textos de Diehard , Sexton y ENT. [una]

Código de ejemplo en lenguaje C

El algoritmo de Raiden también es bastante simple de implementar, ya que requiere solo unas pocas líneas de código . Al igual que TEA , el algoritmo se basa en operaciones sobre números sin signo de 32 bits ( unsigned long ).

void raiden_encode ( clave const u32 [ 4 ], datos const u32 [ 2 ], resultado u32 [ 2 ]) { u32 b0 = datos [ 0 ], b1 = datos [ 1 ], k [ 4 ] = { tecla [ 0 ], tecla [ 1 ], tecla [ 2 ], tecla [ 3 ]}, sk ; ent i ; para ( yo = 0 ; yo < 16 ; yo ++ ) { sk = k [ yo % 4 ] = (( k [ 0 ] + k [ 1 ]) + (( k [ 2 ] + k [ 3 ]) ^ ( k [ 0 ] << ( k [ 2 ] & 0x1F ) ))); b0 += (( sk + b1 ) << 9 ) ^ (( sk - b1 ) ^ (( sk + b1 ) >> 14 )); b1 += (( sk + b0 ) << 9 ) ^ (( sk - b0 ) ^ (( sk + b0 ) >> 14 )); } resultado [ 0 ] = b0 ; resultado [ 1 ] = b1 ; } void raiden_decode ( clave const u32 [ 4 ], datos const u32 [ 2 ], resultado u32 [ 2 ]) { u32 b0 = datos [ 0 ], b1 = datos [ 1 ], k [ 4 ] = { tecla [ 0 ], tecla [ 1 ], tecla [ 2 ], tecla [ 3 ]}, subclaves [ 16 ]; ent i ; for ( i = 0 ; i < 16 ; i ++ ) subclaves [ i ] = k [ i % 4 ] = (( k [ 0 ] + k [ 1 ]) + (( k [ 2 ] + k [ 3 ] ) ^ ( k [ 0 ] << ( k [ 2 ] & 0x1F )))); para ( yo = 15 ; yo >= 0 ; yo -- ) { b1 -= (( subclaves [ i ] + b0 ) << 9 ) ^ (( subclaves [ i ] - b0 ) ^ (( subclaves [ i ] + b0 ) >> 14 )); b0 -= (( subclaves [ i ] + b1 ) << 9 ) ^ (( subclaves [ i ] - b1 ) ^ (( subclaves [ i ] + b1 ) >> 14 )); } resultado [ 0 ] = b0 ; resultado [ 1 ] = b1 ; }

Véase también

Notas

  1. [ Raiden: una alternativa al cifrado de bloque TEA   ] . Fecha de acceso: 28 de enero de 2009. Archivado desde el original el 5 de marzo de 2016. Raiden: una alternativa a TEA Block Cipher  


Enlaces