stringtranslate.com

RC5

En criptografía , RC5 es un cifrado de bloques de clave simétrica que destaca por su simplicidad. Diseñado por Ronald Rivest en 1994, [2] RC significa "Rivest Cipher" o, alternativamente, "Ron's Code" (compare RC2 y RC4 ). El candidato RC6 al Estándar de cifrado avanzado (AES) se basó en RC5.

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 evaluación de dichas operaciones como una primitiva criptográfica . [ cita necesaria ] RC5 también consta de una serie de adiciones modulares y OR eXclusive (XOR) . La estructura general del algoritmo es una red tipo Feistel , similar a RC2. Las rutinas de cifrado y descifrado se pueden especificar en unas pocas líneas de código. El programa clave, sin embargo, es más complejo, expandiendo la clave usando una función esencialmente unidireccional con las expansiones binarias de e y la proporción áurea como fuentes de " números de nada bajo la manga ". La tentadora simplicidad del algoritmo junto con la novedad de las rotaciones dependientes de los datos han convertido a RC5 en un objeto de estudio atractivo para los criptoanalistas. [¿ según quién? ] 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 en la clave.

Algoritmo

Tanto el cifrado como el descifrado RC5 expanden la clave aleatoria en 2 (r+1) palabras que se utilizarán secuencialmente (y solo una vez cada una) durante los procesos de cifrado y descifrado. Todo lo que aparece a continuación proviene del artículo revisado de Rivest sobre RC5. [3]

Expansión clave

El algoritmo de expansión clave se ilustra a continuación, primero en pseudocódigo y luego en código C de ejemplo copiado directamente del apéndice del artículo de referencia.

Siguiendo el esquema de nomenclatura del artículo, se utilizan los siguientes nombres de variables:

# Dividir K en palabras # u = w / 8 c  =  techo ( max ( b ,  1 )  /  u ) # L es inicialmente una lista de longitud c de palabras de longitud w con valor 0 para  i  =  b - 1  hasta  0 hacer : L [ i / u ] = ( L [ i / u ] <<< 8 ) + K [ i ]              # Inicializar matriz S pseudoaleatoria independiente de clave # S está inicialmente en=2(r+1) lista de longitud de palabras de longitud w indefinidas S [ 0 ]  =  P_w para  i  =  1  a  t - 1  do :  S [ i ]  =  S [ yo  -  1 ]  +  Q_w # El ciclo de programación de claves principales i  =  j  =  0 A  =  B  =  0 hacer  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 funcionar con w = 32, r = 12 y b = 16.

void RC5_SETUP ( char unsigned * 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 implicaba varias rondas de una función sencilla; aparentemente se recomiendan 12 o 20 rondas, dependiendo de las necesidades de seguridad y las consideraciones de tiempo. Además de las variables utilizadas anteriormente, en este algoritmo se utilizan las siguientes variables:

A  =  A  +  S [ 0 ] B  =  B  +  S [ 1 ] para  i  =  1  para  r  hacer :  A  =  (( A  ^  B )  <<<  B )  +  S [ 2  *  i ]  B  =  (( B  ^  A )  <<<  A )  +  S [ 2  *  i  +  1 ]# El bloque de texto cifrado consta de un bloque de dos palabras de ancho compuesto por A y B, en ese orden. devolver  A ,  B

El código C de ejemplo proporcionado por Rivest es este.

void 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 siguiente pseudocódigo muestra el proceso.

para  i  =  r  hasta  1  haga : B = (( B - S [ 2 * i + 1 ]) >>> A )  ^ A A = (( A - S [ 2 * i ] ) >>> B ) ^ B B = B - S [ 1 ] A = A - S [ 0 ]                                devolver  A ,  B

El código C de ejemplo proporcionado por Rivest es este.

vacío RC5_DECRYPT ( PALABRA * ct , PALABRA * pt ) { PALABRA 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 ; } puntos [ 1 ] = B - S [ 1 ]; pt [ 0 ] = A - S [ 0 ]; }                                                

Criptoanálisis

El RC5 de doce rondas (con bloques de 64 bits) es susceptible a un ataque diferencial utilizando 2 44 textos planos elegidos. [1] Se sugieren entre 18 y 20 disparos como protección suficiente.

Varios de estos desafíos se han abordado utilizando 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 26 de julio de 2023, el 10,409% de los Se ha buscado el espacio de claves y, según la tasa registrada ese día, se necesitarían un poco más de 59 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 (ahora vencida) 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 suspendieron en mayo de 2007. [4] Como resultado, se distribuyeron .net decidió financiar el premio monetario. La persona que descubra la clave ganadora recibirá 1.000 dólares estadounidenses, su equipo (si corresponde) recibirá 1.000 dólares estadounidenses y la Fundación para el Software Libre recibirá 2.000 dólares estadounidenses. [8]

Ver también

Referencias

  1. ^ ab Biryukov, Alex ; Kushilevitz, Eyal (31 de mayo de 1998). Criptoanálisis mejorado de RC5 (PDF) . EUROCRYPT 1998. doi : 10.1007/BFb0054119 .
  2. ^ 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. Archivado desde el original (PDF) el 17 de abril de 2007 . Consultado el 18 de diciembre de 2004 .
  3. ^ http://people.csail.mit.edu/rivest/Rivest-rc5rev.pdf Archivado el 21 de septiembre de 2018 en Wayback Machine [ URL desnuda PDF ]
  4. ^ ab "distributed.net: Proyecto RC5". www.distribuido.net . Consultado el 14 de diciembre de 2019 .
  5. ^ RC5-72 / Estadísticas generales del proyecto
  6. ^ "La supercomputadora PlayStation 3 coloca a UMass Dartmouth en el puesto número 1 del mundo en la lista de desafíos de descifrado de códigos" (Comunicado de prensa). Universidad de Massachusetts Dartmouth . 24 de septiembre de 2014. Archivado desde el original el 29 de junio de 2022 . Consultado el 24 de enero de 2024 .
  7. ^ Rivest, R. L, "Algoritmo de cifrado de bloques con rotación dependiente de datos", patente estadounidense 5.724.428 , expedida el 3 de marzo de 1998, expiró el 1 de noviembre de 2015.
  8. ^ "distributed.net: blogs del personal - 2008 - septiembre - 08" . Consultado el 15 de diciembre de 2019 .

enlaces externos