13 votos

Explicación del código de rodadura

¿Podría alguien explicar cómo protocolos de código rodante como KeeLoq funcionan? Entiendo la premisa básica de que utilizan un código diferente cada vez por lo que no se puede utilizar el ataque de repetición, pero no entiendo cómo un lado verifica el código correcto, etc.

Además, ¿cómo realizan una sincronización inicial si no se conoce/comparte de antemano el índice de los códigos rodantes?

Si tienes que usar a Keeloq como ejemplo para explicarlo está bien, pero preferiría una explicación general de los códigos de rodadura.

10voto

Federico Builes Puntos 1940

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.

8voto

Steve Paulo Puntos 8263

La primera vez que me encontré con KeeLoq fue investigando el chip de un mando de garaje. El sitio web Hoja de datos de Microchip hace un buen trabajo explicando cómo funciona.

En pocas palabras:

  • el receptor mantiene una base de datos de todos los transmisores, con la clave de su número de serie.
  • cada transmisor está asociado a una clave de encriptación simétrica (64 bits), que está en el chip, y también en la base de datos del receptor.
  • cada transmisor está asociado a un número de secuencia cíclica de 16 bits, también almacenado en el chip y en la base de datos.
  • cuando el transmisor se activa, incrementa su número de secuencia módulo 65536 (envolvente de 16 bits), y envía un paquete que consiste en una máscara de bits que representa qué botones se pulsan, su ID de serie, y una versión encriptada del número de serie.
  • el receptor coincide con el número de serie en la base de datos, saca la clave y descifra el número de serie.
  • el número de serie tiene que ser nuevo; no puede ser un número de serie utilizado recientemente, lo que protege contra los ataques de repetición. (Véase la Fig. 7.3 en la hoja de datos).
  • si el número de serie se verifica, entonces el receptor puede activar la funcionalidad basada en la máscara de bits de los botones que se presionan.
  • si el nuevo número de serie está adelantado en más de 16 valores (el usuario ha pulsado los botones muchas veces accidentalmente mientras estaba lejos del receptor), entonces tiene que producirse un apretón de manos extra para resincronizar, lo que requiere una pulsación de botón extra. (El usuario realizará la pulsación extra del botón, creyendo que hay una mala recepción).

Añadir un nuevo transmisor a la base de datos del receptor es vagamente análogo, en un alto nivel, al método de configuración de pulsar un botón para añadir clientes a un punto de acceso Wi-Fi. El receptor se pone de alguna manera en un modo en el que acepta un nuevo transmisor.

Se puede aceptar un nuevo transmisor a partir de la información transmitida en los mensajes de activación ordinarios, si el receptor y el transmisor comparten la misma identificación secreta del fabricante. Esto se debe a que la clave de encriptación de 64 bits se deriva de la identificación del fabricante y de la información de serie del receptor. (Véase el apartado 7.1).

Existe una alternativa más segura: el "Secure Learn". Se inicia de forma especial en el transmisor (tres botones pulsados a la vez). El transmisor envía un paquete especial: un valor semilla de 60 bits del que se deriva la clave de encriptación, que presumiblemente no depende del ID del fabricante ni del número de serie.

Cuando el receptor no está en modo de aprendizaje, por supuesto rechaza las transmisiones de los transmisores que no conoce.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X