En criptografía, el RC5 es un sencillo cifrado de bloques de clave simétrica. Diseñado por Ronald Rivest en 1994, el RC5 es un algoritmo parametrizado con un tamaño de bloque variable, un tamaño de clave variable y un número de rondas variable. "RC" significa "Rivest Cipher", o alternativamente, "Ron's Code".
Para ofrecer distintos niveles de seguridad y eficiencia, RC5 tiene un tamaño de bloque variable (32, 64 o 128 bits), un tamaño de clave variable (de 0 a 2040 bits) y un número de rondas variable (de 0 a 255). Los parámetros sugeridos originalmente eran 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 los datos; uno de los objetivos de RC5 era estudiar y evaluar las operaciones de cifrado de bloques como primitiva criptográfica. El RC5 también consta de una serie de adiciones modulares y de OR eXclusivos (Xor). La estructura general del algoritmo es una red tipo Feistel. Las rutinas de cifrado y descifrado pueden especificarse en unas pocas líneas de código. La programación de la clave, sin embargo, es más compleja, ya que expande la clave utilizando una función esencialmente unidireccional con las expansiones binarias de e y la proporción áurea como fuentes de "números de nada en la manga". La simplicidad del algoritmo, junto con la novedad de las rotaciones dependientes de los datos, ha convertido al RC5 en un atractivo objeto de estudio para los criptoanalistas.
Parámetros y notación
- w: tamaño de palabra en bits (16, 32 o 64). El tamaño de bloque es 2w (dos palabras).
- r: número de rondas (0–255).
- b: longitud de la clave en bytes (0–255). A menudo se expresa en bits (por ejemplo, 128 bits = 16 bytes).
La notación habitual es RC5-w/r/b. Por ejemplo, RC5-32/12/16 indica palabras de 32 bits, 12 rondas y una clave de 16 bytes (128 bits).
Operaciones básicas
RC5 combina tres operaciones elementales que se ejecutan en palabras de w bits:
- Suma modular (mod 2^w).
- XOR bit a bit.
- Rotaciones circulares (<<< o >>>), donde el número de posiciones a rotar depende de los datos (valor de otra palabra).
Estas operaciones son rápidas en procesadores modernos y permiten una implementación muy compacta en software y hardware.
Cifrado y descifrado (pseudocódigo)
El bloque se trata como dos palabras w-bit: A y B. Antes de las rondas A y B se mezclan con dos subclaves iniciales de la tabla S.
Cifrado (esquema resumido):
- A = A + S[0]
- B = B + S[1]
- Para i = 1 hasta r:
- A = ((A XOR B) <<< (B mod w)) + S[2*i]
- B = ((B XOR A) <<< (A mod w)) + S[2*i + 1]
Descifrado: se invierten las operaciones en orden contrario usando rotaciones hacia la derecha (>>>), restas modulares y las mismas subclaves S.
Programación de la clave (key schedule)
La expansión de la clave en RC5 crea una tabla de subclaves S de tamaño t = 2(r+1) palabras w-bit. El proceso general es:
- Convertir la clave (b bytes) en un arreglo de c = ceil(b / (w/8)) palabras L[0..c-1] (little-endian).
- Inicializar S[0..t-1] con constantes derivadas de e y la proporción áurea (valores impares y "bien repartidos"). Para w = 32, por ejemplo:
- Pw = 0xB7E15163
- Qw = 0x9E3779B9
- S[0] = Pw; S[i] = S[i-1] + Qw para i = 1..t-1
- Mezclar S y L mediante un bucle que realiza sumas y rotaciones: por lo general se ejecutan 3 * max(c, t) iteraciones para que la difusión sea adecuada.
Esta rutina permite que una clave relativamente corta se expanda y mezcle con buenos niveles de difusión dentro de S.
Rendimiento
- RC5 es muy eficiente en software cuando la rotación y las operaciones en enteros son rápidas.
- La implementación es compacta: las rutinas de cifrado/descifrado son cortas; la parte más costosa es la programación de la clave (expansión S), que se hace una vez por clave.
- La flexibilidad de parámetros permite adaptar RC5 a diferentes plataformas y requisitos de rendimiento/seguridad.
Seguridad y análisis criptográfico
- RC5 ha sido ampliamente estudiado por la comunidad criptográfica. Muchas técnicas de criptoanálisis han sido aplicadas con éxito a versiones reducidas en número de rondas.
- Las versiones con parámetros recomendados (por ejemplo RC5-32/12/16) siguen considerándose resistentes frente a ataques prácticos conocidos en la práctica general, aunque las versiones con pocas rondas o claves muy cortas son vulnerables.
- La seguridad depende claramente de la elección de w, r y b: incrementar r y/o el tamaño de la clave mejora la resistencia, a costa de mayor coste computacional.
- Como con cualquier algoritmo, la vigilancia y el análisis continuos son necesarios: nuevos ataques pueden reducir la seguridad efectiva de configuraciones concretas.
Usos y variantes
- RC5 se ha utilizado en bibliotecas de cifrado y aplicaciones donde se valoraba la simplicidad y la velocidad.
- RC6 fue derivado de RC5 y llegó a ser propuesto como candidato en la competencia del AES; incorpora modificaciones para mejorar paralelismo y seguridad en algunos escenarios.
- La parametrización hace que RC5 sea útil en entornos con restricciones (por ejemplo, dispositivos embebidos con palabras pequeñas) o donde se desea ajustar el equilibrio entre seguridad y rendimiento.
Conclusión
RC5 es un diseño simple, flexible y eficiente que introdujo la idea de rotaciones dependientes de los datos como mecanismo central. Su simplicidad lo convirtió en un objeto de estudio fructífero para la comunidad criptográfica. Al elegir RC5 en una aplicación concreta hay que seleccionar parámetros (w, r, b) adecuados y tener en cuenta el análisis criptográfico más reciente; para muchos usos contemporáneos, se suelen preferir algoritmos estandarizados y ampliamente revisados, pero RC5 sigue siendo relevante como ejemplo pedagógico y como opción práctica en ciertos entornos.