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.
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]
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 ; }
Criptosistemas simétricos | |
---|---|
Cifrados de flujo | |
Red Feistel | |
red SP | |
Otro |