Explicación del código de balanceo

13

¿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 simplemente 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 de balanceo no se conoce / comparte de antemano?

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

    
pregunta NickHalden

2 respuestas

10

Los códigos de balanceo requieren varias partes para funcionar correctamente. Aquí describiré una implementación genérica que utiliza 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 intentar describir la implementación completa y cómo funciona de una vez, describiré un sistema simple y agregaré complejidad a medida que avanzamos hasta que alcancemos un sistema criptográficamente seguro.

Un código sucesivo 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 realimentación lineal que puede representarse por un solo número. Al alimentar al 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 se repasa cada número que puede generar, y luego vuelve a comenzar con la misma secuencia.

Si tanto el control remoto como el transmisor conocen el número de realimentación y el número actual, entonces cuando el control remoto transmita el siguiente número, el receptor puede probarlo con su propio generador. Si coincide, se activa. Si no lo hace, recorre la secuencia hasta que encuentra el número que envió el control remoto. Si vuelve a presionar el control remoto, debe coincidir y se activará porque la transmisión anterior ya sincronizó los generadores de números. Esta es la razón por la 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 que es difícil de obtener en el uso normal. Pero no es criptográficamente seguro.

Además de eso, se agrega el 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 que se almacene un control remoto diferente, pero el problema de compartir un código en muchos modelos es que si se rompe, habrá más autos vulnerables.

Detrás del cifrado, tiene información de botones, el número generado por PRNG y poca información sobre el número de comentarios. No es suficiente para hacer el PRNG desde cero, pero sí lo suficiente para que después de un cierto número de pulsaciones de botones, y con cierta información interna sobre el espacio limitado, un número de retroalimentación pueda implicar (de nuevo, fabricante, línea específica) que 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 sirve para detener los ataques de reproducción. El cifrado está destinado a asegurar el código rodante 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 incluye criptografía de clave pública ni nada que esté particularmente involucrado. También evita que los dispositivos de posventa funcionen en automóviles con este tipo de sistema.

El código rodante no es impermeable, sin embargo. El antiguo sistema keeloq fue atacado con éxito hace apenas unos años (después de una década de uso), por lo que se puede encontrar el código de encriptación del fabricante y los códigos de balanceo se pueden encontrar más fácilmente. Anteriormente, ha sido atacado de manera que las personas pueden tomar vehículos sin romper 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 dure muchos años antes de que se rompa.

    
respondido por el Adam Davis
8

Encontré a KeeLoq por primera vez al investigar el chip en un abridor de puertas de garaje. La Hoja de datos del microchip hace un buen trabajo explicando cómo funciona.

En pocas palabras:

  • el receptor mantiene una base de datos de todos los transmisores, con clave en su número de serie.
  • cada transmisor está asociado con una clave de cifrado simétrica (64 bits), 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 el transmisor está activado, incrementa su número de secuencia módulo 65536 (envolvente 16 bits) y envía un paquete que consiste en 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 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 debe ser nuevo; no puede ser un número de serie usado recientemente, que protege contra ataques de repetición. (Ver Fig. 7.3 en la hoja de datos).
  • si se verifica el número de serie, 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 presionó los botones muchas veces accidentalmente mientras se encontraba lejos del receptor), entonces se debe volver a sincronizar, lo que requiere presionar un botón adicional. (El usuario realizará la pulsación adicional del botón, creyendo que hay una mala recepción).

Agregar un nuevo transmisor a la base de datos del receptor es vagamente análogo, en un nivel alto, al método de configuración de presionar un botón para agregar clientes a un punto de acceso Wi-Fi. Al receptor se le dice, de alguna manera, 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 transmitida en mensajes de activación normales, 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 una manera especial en el transmisor (tres botones presionados al mismo tiempo). El transmisor envía un paquete especial: un valor semilla de 60 bits a partir del cual se deriva la clave de cifrado, probablemente no dependiendo de la ID del fabricante o el número de serie.

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

    
respondido por el Kaz

Lea otras preguntas en las etiquetas