¿Podría alguien 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, así 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 en los códigos continuos no se conoce / comparte de antemano?
Si tiene que usar Keeloq como ejemplo para explicarlo, está bien, pero preferiría una explicación general de los códigos continuos.
Respuestas:
Los códigos continuos 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 sobre 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 móvil no criptográfico es simplemente un transmisor y un receptor que usan 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 número de retroalimentación igual, 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, cuando el control remoto transmite el siguiente número, el receptor puede probarlo con su propio generador. Si coincide, se activa. Si no lo hace, pasa por la secuencia hasta que encuentra el número que envió el control remoto. Si presiona el control remoto nuevamente, 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 en una fila, lo cual es difícil de obtener en el uso normal. Pero no es criptográficamente seguro.
Además de eso, agrega cifrado típico. 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 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 ser almacenado, pero el problema de compartir un código en muchos modelos es que si está roto, más autos son vulnerables.
Detrás del cifrado tiene información de botón, el número generado por PRNG y un poco de información sobre el número de comentarios. 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, un número de retroalimentación pueda involucrar (nuevamente, fabricante, línea específica), entonces el receptor puede, después de varios entrenamientos transmisiones, determine el número de comentarios y comience a rastrear el PRNG para ese control remoto.
El código rodante está destinado solo a detener los ataques de repetición. El cifrado está destinado a asegurar el código móvil 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, la capacitación no involucra criptografía de clave pública ni nada particularmente involucrado. También evita que los llaveros del mercado secundario trabajen en automóviles con este tipo de sistema.
Sin embargo, el código continuo no es impermeable. El antiguo sistema keeloq fue atacado con éxito hace solo unos años (después de una década de uso) para que se pueda encontrar el código de cifrado del fabricante, y los códigos continuos 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 realmente descifrar el código. En respuesta, la nueva clave de cifrado es de 60 bits. No es tan seguro como muchos sistemas de cifrado modernos, pero lo suficientemente seguro como para que probablemente dure muchos años más antes de que se rompa.
fuente
Me encontré por primera vez con KeeLoq 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:
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 por el cual acepta un nuevo transmisor.
Se puede aceptar un nuevo transmisor a partir de la información transmitida en mensajes de activación ordinarios, si el receptor y el transmisor comparten la misma ID 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 en serie del receptor. (Ver Sec. 7.1).
Hay una alternativa más segura a esto: el "Aprendizaje seguro". Esto se inicia de manera especial en el transmisor (tres botones presionados a la vez). El transmisor envía un paquete especial: un valor de inicialización 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 las transmisiones de los transmisores que no conoce.
fuente