En criptografía , RC5 es un cifrado de bloque de clave simétrica que se destaca por su simplicidad. Diseñado por Ronald Rivest en 1994, [2] RC significa "Rivest Cipher", o alternativamente, "Ron's Code" (comparar RC2 y RC4 ). El candidato de Estándar de cifrado avanzado (AES) RC6 se basó en RC5.
General | |
---|---|
Diseñadores | Ron Rivest |
Publicado por primera vez | 1994 |
Sucesores | RC6 , Akelarre |
Detalle de cifrado | |
Tamaños de clave | 0 a 2040 bits (128 sugeridos) |
Tamaños de bloque | 32, 64 o 128 bits (se sugieren 64) |
Estructura | Red similar a Feistel |
Rondas | 1-255 (12 sugeridos originalmente) |
Mejor criptoanálisis público | |
RC5 de 12 rondas (con bloques de 64 bits) es susceptible de un ataque diferencial utilizando 2 44 textos planos elegidos. [1] |
Descripción
A diferencia de muchos esquemas, RC5 tiene un tamaño de bloque variable (32, 64 o 128 bits ), tamaño de clave (0 a 2040 bits) y número de rondas (0 a 255). La elección de parámetros sugerida originalmente era un tamaño de bloque de 64 bits, una clave de 128 bits y 12 rondas.
Una característica clave de RC5 es el uso de rotaciones dependientes de datos; uno de los objetivos de RC5 era impulsar el estudio y la evaluación de tales operaciones como una primitiva criptográfica [ cita requerida ] . RC5 también consta de una serie de adiciones modulares y OR exclusivos (XOR) . La estructura general del algoritmo es una red similar a Feistel . Las rutinas de cifrado y descifrado se pueden especificar en unas pocas líneas de código. El programa de claves, sin embargo, es más complejo, expandiendo la clave utilizando una función esencialmente unidireccional con las expansiones binarias tanto de e como de la proporción áurea como fuentes de " números que no se esconden en la manga ". La tentadora simplicidad del algoritmo junto con la novedad de las rotaciones dependientes de los datos ha convertido a RC5 en un atractivo objeto de estudio para los criptoanalistas [¿ según quién? ] . El RC5 se denota básicamente como RC5-w / r / b donde w = tamaño de palabra en bits, r = número de rondas, b = número de bytes de 8 bits en la clave.
Algoritmo
El cifrado y el descifrado RC5 expanden la clave aleatoria en 2 (r + 1) palabras que se usarán secuencialmente (y solo una vez cada una) durante los procesos de cifrado y descifrado. Todo lo siguiente proviene del artículo revisado de Rivest sobre RC5. [3]
Expansión clave
El algoritmo de expansión de claves se ilustra a continuación, primero en pseudocódigo, luego en un ejemplo de código C copiado directamente del apéndice del documento de referencia.
Siguiendo el esquema de nomenclatura del trabajo, se utilizan los siguientes nombres de variables:
- w: la longitud de una palabra en bits, normalmente 16, 32 o 64. El cifrado se realiza en bloques de 2 palabras.
- u = w / 8: la longitud de una palabra en bytes.
- b: la longitud de la clave en bytes.
- K []: la clave, considerada como una matriz de bytes (usando indexación basada en 0).
- c - La longitud de la clave en palabras (o 1, si b = 0).
- L []: una matriz de trabajo temporal que se utiliza durante la programación de claves. inicializado a la clave en palabras.
- r: el número de rondas que se utilizarán al cifrar datos.
- t = 2 (r + 1) - el número de subclaves redondas requeridas.
- S []: las palabras clave redondas.
- P w - La primera constante mágica, definida como, donde Odd es el número entero impar más cercano a la entrada dada, e es la base del logaritmo natural y w se define arriba. Para valores comunes de w , los valores asociados de P w se dan aquí en hexadecimal:
- Para w = 16: 0xB7E1
- Para w = 32: 0xB7E15163
- Para w = 64: 0xB7E151628AED2A6B
- Q w - La segunda constante mágica, definida como, donde Odd es el número entero impar más cercano a la entrada dada, donde es la proporción áurea , y w se define anteriormente. Para valores comunes de w , los valores asociados de Q w se dan aquí en hexadecimal:
- Para w = 16: 0x9E37
- Para w = 32: 0x9E3779B9
- Para w = 64: 0x9E3779B97F4A7C15
# Rotura K en palabras # u = w / 8 c = techo ( max ( b , 1 ) / u ) # L es inicialmente una lista c-longitud de 0 con valores de palabras w de longitud para i = b - 1 hacia abajo a 0 hacer : L [ i / u ] = ( L [ i / u ] <<< 8 ) + K [ i ] # Inicializar-clave independiente pseudoaleatorio S array # S está inicialmente a = 2 (r + 1) Lista longitud de indefinido palabras w-longitud S [ 0 ] = P_w para i = 1 a t - 1 hacer : S [ i ] = S [ i - 1 ] + Q_w # El ciclo de programación de la clave principal i = j = 0 A = B = 0 do 3 * max ( t , c ) veces : A = S [ i ] = ( S [ i ] + A + B ) <<< 3 B = L [ j ] = ( L [ j ] + A + B ) <<< ( A + B ) i = ( i + 1 ) % t j = ( j + 1 ) % c# devoluciones
El código fuente de ejemplo se proporciona en el apéndice del artículo de Rivest sobre RC5. La implementación está diseñada para trabajar con w = 32, r = 12 y b = 16.
void RC5_SETUP ( unsigned char * K ) { // w = 32, r = 12, b = 16 // c = max (1, ceil (8 * b / w)) // t = 2 * (r + 1) PALABRA i , j , k , u = w / 8 , A , B , L [ c ]; para ( i = b -1 , L [ c -1 ] = 0 ; i ! = -1 ; i - ) L [ i / u ] = ( L [ i / u ] << 8 ) + K [ i ] ; para ( S [ 0 ] = P , i = 1 ; i < t ; i ++ ) S [ i ] = S [ i -1 ] + Q ; para ( A = B = i = j = k = 0 ; k < 3 * t ; k ++ , i = ( i + 1 ) % t , j = ( j + 1 ) % c ) { A = S [ i ] = ROTL ( S [ i ] + ( A + B ), 3 ); B = L [ j ] = ROTL ( L [ j ] + ( A + B ), ( A + B )); } }
Cifrado
El cifrado implicó varias rondas de una función simple. Parece que se recomiendan 12 o 20 rondas, según las necesidades de seguridad y las consideraciones de tiempo. Más allá de las variables utilizadas anteriormente, las siguientes variables se utilizan en este algoritmo:
- A, B: las dos palabras que componen el bloque de texto sin formato que se va a cifrar.
A = A + S [ 0 ] B = B + S [ 1 ] para i = 1 a r do : A = (( A ^ B ) <<< B ) + S [ 2 * i ] B = (( B ^ A ) <<< A ) + S [ 2 * i + 1 ]# El bloque de texto cifrado consta del bloque de dos palabras de ancho compuesto por A y B, en ese orden. volver A , B
El ejemplo de código C proporcionado por Rivest es este.
anular RC5_ENCRYPT ( PALABRA * pt , PALABRA * ct ) { PALABRA i , A = pt [ 0 ] + S [ 0 ], B = pt [ 1 ] + S [ 1 ]; para ( i = 1 ; i <= r ; i ++ ) { A = ROTL ( A ^ B , B ) + S [ 2 * i ]; B = ROTL ( B ^ A , A ) + S [ 2 * i + 1 ]; } ct [ 0 ] = A ; ct [ 1 ] = B ; }
Descifrado
El descifrado es una inversión bastante sencilla del proceso de cifrado. El pseudocódigo siguiente muestra el proceso.
para i = r abajo a 1 hacer : B = (( B - S [ 2 * i + 1 ]) >>> A ) ^ A A = (( A - S [ 2 * i ]) >>> B ) ^ B B = B - S [ 1 ] A = A - S [ 0 ]volver A , B
El ejemplo de código C proporcionado por Rivest es este.
void RC5_DECRYPT ( WORD * ct , WORD * pt ) { WORD i , B = ct [ 1 ], A = ct [ 0 ]; para ( i = r ; i > 0 ; i - ) { B = ROTR ( B - S [ 2 * i + 1 ], A ) ^ A ; A = ROTR ( A - S [ 2 * i ], B ) ^ B ; } pt [ 1 ] = B - S [ 1 ]; pt [ 0 ] = A - S [ 0 ]; }
Criptoanálisis
RC5 de 12 rondas (con bloques de 64 bits) es susceptible de un ataque diferencial utilizando 2 44 textos planos elegidos. [1] Se sugieren 18-20 rondas como protección suficiente.
Varios de estos problemas se han abordado mediante la informática distribuida , organizada por Distributed.net . Distributed.net tiene mensajes RC5 de fuerza bruta cifrados con claves de 56 y 64 bits y ha estado trabajando para descifrar una clave de 72 bits desde el 3 de noviembre de 2002. [4] Al 13 de diciembre de 2019, el 6.222% de las Se ha buscado el espacio de claves y, según la tasa registrada ese día, se necesitarían 102 años para completar el 100% del espacio de claves. [5] La tarea ha inspirado muchos desarrollos nuevos y novedosos en el campo de la computación en clúster. [6]
RSA Security , que tenía una patente sobre el algoritmo, [7] ofreció una serie de premios de 10.000 dólares estadounidenses por descifrar textos cifrados con RC5, pero estos concursos se han interrumpido en mayo de 2007. [8] Como resultado, distribution.net decidió para financiar el premio monetario. La persona que descubra la clave ganadora recibirá US $ 1,000, su equipo (si corresponde) recibirá US $ 1,000 y la Free Software Foundation recibirá US $ 2,000. [9]
Ver también
- Madryga
- Lucio rojo
Referencias
- ↑ a b Biryukov A. y Kushilevitz E. (1998). Criptoanálisis mejorado de RC5. EUROCRYPT 1998.
- ^ Rivest, RL (1994). "El algoritmo de cifrado RC5" (PDF) . Actas del segundo taller internacional sobre cifrado rápido de software (FSE) 1994e . págs. 86–96.
- ^ http://people.csail.mit.edu/rivest/Rivest-rc5rev.pdf
- ^ "Distributed.net: Proyecto RC5" . www.distributed.net . Consultado el 14 de diciembre de 2019 .
- ^ RC5-72 / Estadísticas generales del proyecto
- ^ "Copia archivada" . Archivado desde el original el 28 de octubre de 2014 . Consultado el 28 de octubre de 2014 .Mantenimiento de CS1: copia archivada como título ( enlace )
- ^ Rivest, R. L, "Algoritmo de cifrado de bloques con rotación dependiente de datos", Patente de Estados Unidos 5.724.428 , publicada el 3 de marzo de 1998.
- ^ "Distributed.net: Proyecto RC5" . www.distributed.net . Consultado el 14 de diciembre de 2019 .
- ^ "Distributed.net: blogs del personal - 2008 - Septiembre - 08" . Consultado el 15 de diciembre de 2019 .
enlaces externos
- El artículo revisado de Rivests que describe el cifrado
- Papel original de Rivest
- Entrada de SCAN para el cifrado
- Preguntas frecuentes de RSA Laboratories: ¿Qué son RC5 y RC6?
- Enlaces de Helger Lipmaa en RC5