Resumen

  • “RC5” solo se vuelve una identidad interoperable al fijar tamaño de palabra, rondas, longitud y bytes de clave, modo, IV y tratamiento del bloque final.
  • El código, ASN.1 y los vectores de RFC 2040 acreditan transformaciones concretas; no acreditan seguridad, aleatoriedad, IV únicos, borrado efectivo de memoria, integración ni uso real.

La RFC 2040, publicada en octubre de 1996 por Robert Baldwin y Ronald Rivest, definió con detalle cuatro construcciones: RC5, RC5-CBC, RC5-CBC-Pad y RC5-CTS. La finalidad declarada era la interoperabilidad entre implementaciones. La ficha del RFC Editor la mantiene como documento informativo y recalca que no es un estándar de Internet.

El propio texto dice que reformula material ya publicado. Por eso su valor no está en presentar el nacimiento de RC5, sino en documentar algo menos vistoso y más útil: qué debe coincidir para que el mismo nombre produzca los mismos bytes.

La identidad está en la tupla

W es el tamaño de palabra. El bloque B mide dos palabras y BB expresa esa longitud en bytes. R fija las rondas. b es la longitud en bytes de la clave de usuario y K contiene esos bytes. La expansión genera S, una tabla de T = 2(R+1) palabras. El modo CBC añade un vector inicial I de un bloque.

Decir RC5 omite casi toda esa identidad. Dos programas pueden usar el mismo nombre y discrepar en W, R, la longitud de clave, el orden en que sus bytes forman palabras, el modo, el IV o el cierre del mensaje. Incluso la misma terna W/R/b no identifica la clave efectiva.

La expansión vuelve observable esa dependencia. El texto empaqueta K en palabras de orden little-endian, inicializa S con constantes que dependen de W y mezcla ambos espacios durante tres veces la mayor de sus longitudes. El código de muestra concreta un bloque de 64 bits. Sus resultados pertenecen a esa configuración, no a toda la familia parametrizada.

El estado vive en el objeto

La exposición orientada a objetos separa claves y cifradores. El objeto CBC conserva el indicador de relleno, las rondas, la clave expandida, el IV original, el bloque de encadenamiento, un búfer parcial y su índice.

Encrypt_Init enlaza y expande la clave, luego restaura la cadena desde el IV. SetIV permite cambiar ese vector sin rehacer la clave expandida, pero también reinicia la cadena y el búfer. Update recibe fragmentos sucesivos; retiene bytes hasta completar un bloque, combina el bloque con la cadena mediante XOR, lo cifra y usa el resultado como cadena siguiente.

Final decide si el historial de Update es válido. En CBC sin relleno, cualquier residuo es un error. En CBC-Pad se emite siempre un bloque terminal con entre uno y BB bytes, cada uno igual a la cantidad añadida. Si el texto ya terminaba exactamente en un límite, se agrega un bloque completo. La llamada final no es limpieza administrativa: forma parte del algoritmo observado.

El último bloque crea tres modos distintos

CBC puro exige múltiplos del bloque. CBC-Pad amplía el cifrado para representar cualquier longitud. CTS conserva la longitud, pero altera las dos últimas porciones: cifra el penúltimo bloque encadenado, toma un prefijo de ese intermedio como fragmento final, rellena con ceros el último fragmento de texto, lo combina con el intermedio y cifra el bloque completo que aparecerá antes del fragmento robado.

La consecuencia operativa es directa. Un objeto CTS debe retener hasta dos bloques hasta Final; antes no sabe cuál bloque será realmente el penúltimo ni cuántos bytes pasarán al fragmento final.

Los errata verificados forman parte de una lectura implementable. El 513 corrige el alcance a textos más largos que un bloque. El 514 indica usar el IV si no existe un bloque cifrado previo. El 587 añade en descifrado el XOR que faltaba y repite la regla del IV. El texto original, sin esas correcciones, no cierra todos los casos que afirma ordenar.

Una coincidencia de vector es una prueba acotada

La sección 9 presenta su programa y sus vectores para ayudar a confirmar una implementación. La muestra usa bloques de ocho bytes. Cada entrada fija el indicador de relleno, rondas, bytes de clave, IV y texto claro; la salida publica el cifrado esperado.

Cuando coincide, hay evidencia de acuerdo para la tupla completa: conversión de la clave, expansión, transformación de bloque, encadenamiento, IV, entrada y finalización. Cuando no coincide, hay evidencia de una divergencia, pero el cifrado no señala por sí solo qué etapa falló.

La colección solo muestra resultados de CBC y CBC-Pad. No ofrece vectores CTS. Tampoco observa el origen de claves e IV, la unicidad de estos últimos, la resistencia frente a ataques, el comportamiento del compilador, el borrado real de memoria, el transporte en un protocolo o una instalación en producción. Nada de eso puede deducirse de una comparación de bytes.

ASN.1 fija una parte y deja otra fuera

La sección 11 asigna arcos numéricos terminados en 8 y 9 a CBC y CBC-Pad. Los parámetros incluyen versión, rondas, tamaño de bloque e IV opcional. Si el IV falta, el documento define un bloque de ceros de la longitud correspondiente. El erratum 6380 corrige nombres, mayúsculas y sintaxis de restricciones, sin alterar los arcos ni añadir datos.

No aparecen b, los bytes de clave ni S; tampoco se asigna un identificador a CTS. Por tanto, un OID y su secuencia de parámetros resuelven parte de la interpretación, no toda la identidad ejecutada. Que una codificación defina un IV por omisión no demuestra que un sistema generara IV únicos o aleatorios.

La frontera entre intención y realidad

El código de destrucción escribe ceros antes de liberar estructuras. Eso acredita una instrucción a nivel de fuente. No demuestra que un compilador conservara las escrituras ni que todas las copias de datos sensibles desaparecieran de una máquina. Las afirmaciones de 1996 sobre seguridad y patentes son igualmente documentos históricos, no evaluaciones actuales.

Leída con precisión, RFC 2040 muestra cómo un artefacto de coordinación reduce la ambigüedad. Leída con exceso, invita a confundir una transformación reproducible con seguridad, uso correcto o adopción. La diferencia está en mantener cada prueba dentro del sistema que realmente observó.

Fuentes