Los códigos de rodadura requieren varias piezas para funcionar correctamente. Aquí describiré una implementación genérica que utiliza todas las partes de forma específica. Otros sistemas son variaciones sobre este tema, pero generalmente emplean muchas de las mismas técnicas de forma similar. En lugar de intentar describir la implementación completa y su funcionamiento de una sola vez, describiré un sistema sencillo, y añadiré complejidad a medida que avancemos hasta llegar a un sistema criptográficamente seguro.
Un código rodante no criptográfico es simplemente un transmisor y un receptor que utilizan el mismo generador de números pseudoaleatorios (PRNG). Este generador tiene dos informaciones importantes: un cálculo y el número generado previamente. El cálculo suele ser una ecuación de retroalimentación lineal que puede representarse con un solo número. Alimentando el PRNG con el número anterior, y manteniendo el número de retroalimentación igual se genera una secuencia específica de números. La secuencia no se repite hasta que ha pasado por todos los números que puede generar, y entonces vuelve a empezar con la misma secuencia.
Si tanto el mando como el transmisor conocen el número de retroalimentación y el número actual, cuando el mando transmite el siguiente número, el receptor puede comprobarlo con su propio generador. Si coincide, se activa. Si no coincide, recorre la secuencia hasta encontrar el número que el mando envió. Si vuelve a pulsar el mando, debería coincidir y se activará porque la transmisión anterior ya sincronizó los generadores de números. Por eso a veces hay que pulsar dos veces el botón de desbloqueo: el receptor o el transmisor no están sincronizados.
Esa es la parte del código que rueda. Si el PRNG es lo suficientemente largo, es muy difícil averiguar el número de retroalimentación sin muchos números en la secuencia en una fila, que es difícil de obtener en el uso normal. Pero no es criptográficamente seguro.
Además, se añade la típica encriptación. El fabricante del vehículo utiliza una clave secreta específica para el transmisor y el receptor. Dependiendo del fabricante, es posible que cada modelo y año tenga un código diferente, o que compartan el código entre varios modelos de vehículos y a lo largo de varios años. La contrapartida es que cada uno requiere un mando diferente, pero el problema de compartir un código entre muchos modelos es que si se rompe, más coches son vulnerables.
Detrás de la encriptación tienes la información del botón, el número generado por el PRNG y un poco de información sobre el número de retroalimentación. No lo suficiente como para hacer el PRNG desde cero, pero sí lo suficiente como para que después de un cierto número de pulsaciones de botón, y con alguna información interna sobre el espacio limitado que puede suponer un número de retroalimentación (de nuevo, específico del fabricante, de la línea) entonces el receptor puede, después de varias transmisiones de entrenamiento, determinar el número de retroalimentación, y empezar a rastrear el PRNG para ese mando.
El código rodante sólo sirve para detener los ataques de repetición. El cifrado sirve para asegurar el código rodante y evitar que se rompa. Con sólo uno o el otro, el sistema sería demasiado fácil de romper. Dado que el fabricante controla tanto el transmisor como el receptor, el entrenamiento no implica criptografía de clave pública ni nada especialmente complicado. También evita que los mandos del mercado secundario funcionen en coches con este tipo de sistema.
Sin embargo, el código rodante no es impermeable. El antiguo sistema keeloq fue atacado con éxito hace pocos años (después de una década de uso), por lo que el código de encriptación del fabricante se puede encontrar, y los códigos rodantes se pueden encontrar más fácilmente. Antes de eso ha sido atacado de forma que permitía a la gente tomar los vehículos sin romper realmente el código. En respuesta, la nueva clave de cifrado es de 60 bits. No es tan segura como muchos sistemas de encriptación modernos, pero sí lo suficiente como para que probablemente dure muchos más años antes de que se rompa.