Explication du code tournant

13

Quelqu'un pourrait-il expliquer comment fonctionnent les protocoles de code évolutif tels que KeeLoq? Je comprends la prémisse de base selon laquelle ils utilisent un code différent à chaque fois, vous ne pouvez donc pas simplement utiliser l'attaque de relecture, mais je ne comprends pas comment un côté vérifie le bon code, etc.

De plus, comment effectuent-ils une synchronisation initiale si l'index dans les codes glissants n'est pas connu / partagé au préalable?

Si vous devez utiliser Keeloq comme exemple pour expliquer cela, c'est bien, mais je préfère une explication générale des codes roulants.

NickHalden
la source
Réponses également sur crypto.stackexchange.com/questions/18311/…
gérer le

Réponses:

10

Les codes déroulants nécessitent plusieurs parties pour fonctionner correctement. Ici, je vais décrire une implémentation générique qui utilise toutes les parties d'une manière spécifique. D'autres systèmes sont des variations sur ce thème, mais utilisent généralement plusieurs des mêmes techniques de manière similaire. Plutôt que d'essayer de décrire l'implémentation complète et comment elle fonctionne à la fois, je vais décrire un système simple et ajouter de la complexité au fur et à mesure jusqu'à ce que nous atteignions un système cryptographiquement sécurisé.

Un code tournant non cryptographique est simplement un émetteur et un récepteur qui utilisent tous deux le même générateur de nombres pseudo-aléatoires (PRNG). Ce générateur contient deux informations importantes: un calcul et le nombre généré précédemment. Le calcul est généralement une équation de rétroaction linéaire qui peut être représentée par un seul nombre. En alimentant le PRNG avec le numéro précédent et en gardant le numéro de rétroaction identique, une séquence spécifique de nombres est générée. La séquence n'a pas de séquences répétées jusqu'à ce qu'elle ait parcouru tous les nombres qu'elle peut générer, puis elle recommence avec la même séquence.

Si la télécommande et l'émetteur connaissent le numéro de rétroaction et le numéro actuel, alors lorsque la télécommande transmet le numéro suivant, le récepteur peut le tester par rapport à son propre générateur. S'il correspond, il s'active. Si ce n'est pas le cas, il parcourt la séquence jusqu'à ce qu'il trouve le numéro envoyé par la télécommande. Si vous appuyez à nouveau sur la télécommande, elle devrait correspondre et elle s'activera car la transmission précédente a déjà synchronisé les générateurs de numéros. C'est pourquoi vous devez parfois appuyer deux fois sur le bouton de déverrouillage - votre récepteur ou émetteur n'est pas synchronisé.

C'est la partie continue du code. Si le PRNG est assez long, il est très difficile de trouver le numéro de rétroaction sans plusieurs nombres dans la séquence consécutive, ce qui est difficile à obtenir en utilisation normale. Mais ce n'est pas cryptographiquement sécurisé.

En plus de cela, vous ajoutez un cryptage typique. Le constructeur du véhicule utilise une clé secrète spécifique pour l'émetteur et le récepteur. Selon le fabricant, vous pouvez constater que chaque modèle et chaque année ont un code différent, ou ils peuvent partager le code entre plusieurs modèles de véhicules et sur plusieurs années. Le compromis est que chacun nécessite alors de stocker une télécommande différente, mais le problème avec le partage d'un code sur de nombreux modèles est que s'il est cassé, plus de voitures sont vulnérables.

Derrière le cryptage, vous avez des informations sur les boutons, le numéro généré par PRNG et quelques informations sur le numéro de rétroaction. Pas assez pour faire le PRNG à partir de zéro, mais assez pour qu'après un certain nombre d'appuis sur un bouton, et avec quelques informations internes sur l'espace limité, un numéro de rétroaction puisse impliquer (encore une fois, fabricant, spécifique à la ligne), puis le récepteur peut, après plusieurs formations transmissions, déterminer le numéro de rétroaction et commencer à suivre le PRNG pour cette télécommande.

Le code tournant est uniquement destiné à arrêter les attaques de relecture. Le cryptage est destiné à sécuriser le code tournant pour éviter qu'il ne soit cassé. Avec l'un ou l'autre, le système serait trop facile à casser. Étant donné que le fabricant contrôle à la fois l'émetteur et le récepteur, la formation n'implique pas la cryptographie à clé publique ni rien de particulièrement impliqué. Il empêche également les télécommandes du marché secondaire de fonctionner dans les voitures avec ce type de système.

Le roulement de code n'est cependant pas étanche. L'ancien système keeloq a été attaqué avec succès il y a seulement quelques années (après une décennie d'utilisation), de sorte que le code de cryptage du fabricant peut être trouvé et les codes de roulement peuvent être trouvés plus facilement. Plus tôt que cela, il a été attaqué de manière à permettre aux gens de prendre des véhicules sans réellement enfreindre le code. En réponse, la nouvelle clé de chiffrement est de 60 bits. Pas aussi sûr que de nombreux systèmes de chiffrement modernes, mais suffisamment sûr pour qu'il durera probablement encore de nombreuses années avant qu'il ne soit cassé.

Adam Davis
la source
Ah, j'ai dû oublier la partie "pas de séquence répétée" du PRNG, qui est très importante. Quel est l'avantage de transmettre des informations qui permettent au récepteur de déterminer le code de retour? Cela semble moins sûr que de simplement choisir un code de rétroaction et de fabriquer à la fois l'émetteur et le récepteur avec lui connu ...
NickHalden
@NickHalden, le code de rétroaction est différent pour chaque télécommande, et les clients voudront ajouter plus de télécommandes plus tard, ou remplacer les télécommandes manquantes. Il n'est nécessaire que pour la formation. Certaines versions légèrement plus sécurisées nécessitent une séquence spécifique d'appuis sur les boutons de la télécommande avant qu'elle n'émette les informations de rétroaction supplémentaires, mais généralement le système global est suffisamment sécurisé pour que même si vous cassez le cryptage, vous aurez toujours besoin de beaucoup plus d'informations avant ce petit peu. un peu d'informations vous suffit pour obtenir l'intégralité du code de rétroaction.
Adam Davis
8

J'ai rencontré KeeLoq pour la première fois lors de mes recherches sur la puce d'un ouvre-porte de garage. La fiche technique Microchip explique bien comment cela fonctionne.

En un mot:

  • le récepteur maintient une base de données de tous les émetteurs, en saisissant leur numéro de série.
  • chaque émetteur est associé à une clé de chiffrement symétrique (64 bits), qui se trouve sur la puce, ainsi que dans la base de données du récepteur.
  • chaque émetteur est associé à un numéro de séquence cyclique de 16 bits, également stocké sur la puce et dans la base de données.
  • lorsque l'émetteur est activé, il incrémente son numéro de séquence modulo 65536 (enveloppant 16 bits) et envoie un paquet composé d'un masque de bits représentant les boutons sur lesquels vous appuyez, son ID de série et une version cryptée du numéro de série.
  • le récepteur correspond au numéro de série dans la base de données, sort la clé et déchiffre le numéro de série.
  • le numéro de série doit être nouveau; il ne peut pas s'agir d'un numéro de série récemment utilisé, qui protège contre les attaques par rejeu. (Voir Fig. 7.3 dans la fiche technique).
  • si le numéro de série est vérifié, le récepteur peut activer la fonctionnalité en fonction du masque de bits des boutons sur lesquels vous appuyez.
  • si le nouveau numéro de série est en avance de plus de 16 valeurs (l'utilisateur a poussé les boutons plusieurs fois accidentellement en s'éloignant du récepteur), une nouvelle poignée de main doit avoir lieu pour se resynchroniser, ce qui nécessite une pression supplémentaire sur le bouton. (L'utilisateur effectuera une pression supplémentaire sur le bouton, croyant qu'il y a une mauvaise réception).

L'ajout d'un nouvel émetteur à la base de données du récepteur est vaguement analogue, à un niveau élevé, à la méthode de configuration par pression de bouton pour ajouter des clients à un point d'accès Wi-Fi. Le récepteur est en quelque sorte mis dans un mode par lequel il accepte un nouvel émetteur.

Un nouvel émetteur peut être accepté à partir d'informations transmises dans des messages d'activation ordinaires, si le récepteur et l'émetteur partagent le même ID secret de fabricant. En effet, la clé de chiffrement 64 bits est dérivée de l'ID du fabricant et des informations de série du récepteur. (Voir Sec. 7.1).

Il existe une alternative plus sûre à cela: le "Secure Learn". Ceci est initié d'une manière spéciale sur l'émetteur (trois boutons pressés à la fois). L'émetteur envoie un paquet spécial: une valeur de départ de 60 bits à partir de laquelle la clé de cryptage est dérivée, probablement sans dépendre de l'ID du fabricant ou du numéro de série.

Lorsque le récepteur n'est pas en mode d'apprentissage, il rejette bien sûr les transmissions d'émetteurs qu'il ne connaît pas.

Kaz
la source