Explicación del código variable

¿Alguien podría explicar cómo funcionan los protocolos de código rodante como KeeLoq? Entiendo la premisa básica de que usan un código diferente cada vez, por lo que no puedes usar 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 el índice de los códigos variables no se conoce/comparte de antemano?

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

Respuestas (2)

Los códigos variables requieren varias partes para funcionar correctamente. Aquí describiré una implementación genérica que usa todas las partes de una manera específica. Otros sistemas son variaciones de este tema, pero generalmente emplean muchas de las mismas técnicas de manera similar. En lugar de tratar de describir la implementación completa y cómo funciona de una vez, describiré un sistema simple y agregaré complejidad a medida que avanzamos 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 piezas de información importante: un cálculo y el número generado previamente. El cálculo es generalmente una ecuación de retroalimentación lineal que se puede representar con un solo número. Al alimentar el PRNG con el número anterior y mantener el mismo número de retroalimentación, se genera una secuencia específica de números. La secuencia no tiene secuencias repetidas hasta que pasa por todos los números que puede generar, y luego comienza de nuevo con la misma secuencia.

Si tanto el control remoto como el transmisor conocen el número de retroalimentación y el número actual, entonces cuando el control remoto transmite el siguiente número, el receptor puede probarlo contra su propio generador. Si coincide, se activa. Si no es así, recorre la secuencia hasta que encuentra el número que envió el control remoto. Si presiona el control remoto nuevamente, entonces debería coincidir y se activará porque la transmisión anterior ya sincronizó los generadores de números. Es por eso que a veces tiene que presionar el botón de desbloqueo dos veces: su receptor o transmisor no están sincronizados.

Esa es la parte móvil del código. Si el PRNG es lo suficientemente largo, es muy difícil encontrar el número de retroalimentación sin muchos números en la secuencia seguida, lo cual es difícil de obtener en el uso normal. Pero no es criptográficamente seguro.

Además de eso, agrega el cifrado típico. El fabricante del vehículo utiliza una clave secreta específica para el transmisor y el receptor. Según el fabricante, es posible que cada modelo y año tengan un código diferente, o que compartan el código entre varios modelos de vehículos y durante varios años. La compensación es que cada uno requiere un control remoto diferente para almacenarse, pero el problema de compartir un código entre muchos modelos es que si está roto, entonces más autos son vulnerables.

Detrás del cifrado tiene la información del botón, el número generado por PRNG y un poco de información sobre el número de respuesta. No es suficiente para hacer el PRNG desde cero, pero lo suficiente como para que, después de presionar un cierto número de botones, y con cierta información interna sobre el espacio limitado que puede involucrar un número de retroalimentación (nuevamente, fabricante, línea específica), el receptor pueda, después de varios entrenamientos. transmisiones, determine el número de retroalimentación y comience a rastrear el PRNG para ese control remoto.

El código variable solo está destinado a detener los ataques de repetición. El cifrado está destinado a asegurar el código variable para evitar que se rompa. Con solo uno u 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 particularmente complicado. También evita que los mandos a distancia del mercado de accesorios funcionen en automóviles con este tipo de sistema.

Sin embargo, el código variable no es impermeable. El antiguo sistema keeloq fue atacado con éxito hace solo unos años (después de una década de uso), por lo que se puede encontrar el código de cifrado del fabricante y los códigos variables se pueden encontrar más fácilmente. Antes de eso, ha sido atacado de manera que permitía a las personas tomar vehículos sin descifrar el código. En respuesta, la nueva clave de cifrado es de 60 bits. No es tan seguro como muchos sistemas de encriptación modernos, pero lo suficientemente seguro como para que probablemente dure muchos años más antes de que se rompa.

Ah, debo haber olvidado la parte "sin secuencia repetida" del PRNG, eso es muy importante. ¿Cuál es la ventaja de transmitir información que permite al receptor determinar el código de realimentación? Eso parece menos seguro que simplemente elegir un código de retroalimentación y fabricar tanto el transmisor como el receptor con este conocido...
@NickHalden el código de retroalimentación es diferente para cada control remoto, y los clientes querrán agregar más controles remotos más adelante o reemplazar los controles remotos faltantes. Solo es necesario para el entrenamiento. Algunas versiones un poco más seguras requieren una secuencia específica de pulsaciones de botones en el control remoto antes de que emita la información de retroalimentación adicional, pero en general, el sistema en general es lo suficientemente seguro como para que incluso si rompe el cifrado, aún necesita mucha más información antes de ese pequeño un poco de información es suficiente para obtener el código de retroalimentación completo.

Me encontré con KeeLoq por primera vez cuando investigaba el chip en un abridor de puerta de garaje. La hoja de datos de Microchip hace un buen trabajo al explicar cómo funciona.

En una palabra:

  • el receptor mantiene una base de datos de todos los transmisores, codificados en su número de serie.
  • cada transmisor está asociado con una clave de encriptación simétrica (64 bit), que está en el chip, y también en la base de datos del receptor.
  • cada transmisor está asociado con un número de secuencia cíclica de 16 bits, también almacenado en el chip y en la base de datos.
  • cuando se activa el transmisor, incrementa su número de secuencia módulo 65536 (16 bits envolventes) y envía un paquete que consta de una máscara de bits que representa qué botones se presionan, su ID de serie y una versión cifrada del número de serie.
  • el receptor hace coincidir el número de serie en la base de datos, extrae 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 usado recientemente, que protege contra ataques de reproducción. (Consulte la Fig. 7.3 en la hoja de datos).
  • si el número de serie se verifica, entonces el receptor puede activar la funcionalidad según la máscara de bits de los botones que se presionan.
  • si el nuevo número de serie está adelantado por más de 16 valores (el usuario presionó los botones muchas veces accidentalmente mientras estaba lejos del receptor), entonces se debe realizar un apretón de manos adicional para resincronizar, lo que requiere presionar un botón adicional. (El usuario realizará la pulsación extra del botón, creyendo que hay mala recepción).

Agregar 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 presionar un botón para agregar clientes a un punto de acceso Wi-Fi. De alguna manera, se le dice al receptor que se ponga en un modo en el que acepta un nuevo transmisor.

Se puede aceptar un nuevo transmisor a partir de la información pasada 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 cifrado de 64 bits se deriva de la identificación del fabricante y la información de serie del receptor. (Ver Sec. 7.1).

Existe una alternativa más segura a esto: el "Aprendizaje seguro". Esto se inicia de una manera especial en el transmisor (tres botones presionados a la vez). El transmisor envía un paquete especial: un valor inicial de 60 bits del que se deriva la clave de cifrado, presumiblemente sin depender de la identificación del fabricante o el número de serie.

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