La technologie Keeloq de Microchip. Keeloq™ est une marque déposée par Microchip.
Les circuits codeurs sont :
Format des 66 bits envoyés par un HCS300/301 :
Le codage utilisé est un PWM, avec une durée bit de 1200 µs typique (TE=400 µs +/- 30%). Un codage manchester, plus robuste pour la transmission RF, est disponible sur les codeur HCS36x.
Circuit |
TPreamble |
Theader |
Thop |
Tfix |
TGuard |
Total |
HCS300/301 |
23 TE |
10 TE |
96 TE |
102 TE |
39 TE |
270 TE |
HCS36x (mode 0 PWM) |
31 TE |
10 TE |
207 TE |
10 TE |
220 TE |
La séquence se répète tant qu'une touche est appuyée, avec une période de 270TE soit 108ms typique. Le bit repeat est à zéro sur la première transmission et à un sur toutes les suivantes.
Les algorithmes de cryptage et de décryptage sont confidentiels, et ne sont pas disponibles librement, ils nécessitent une licence.Noter que les algorithmes de décryptage ont été diffusés en 1998, AN642, AN645, AN652, AN659, AN672... mais ne sont plus disponibles
Chaque circuit comporte une E2PROM où sont stockés :
la clé d'encryptage sur 64 bits
le compteur de synchronisation sur 16 bits ; incrémenté à chaque transmission
le numéro de série unique, sur 32 bits, les 28 faibles étant utilisés.
la racine sur 32 bits, transmis lorsque toutes les entrées sont actives (tous les boutons pressés) ; ceci est utilisé dans le cas d'apprentissage sécurisé
un mot de configuration
un mot discriminant sur 10 bits, envoyé à chaque transmission ; usuellement ce mot la partie basse du numéro de série
les 2 bits overflow du compteur de synchronisation
sélection du seuil de l'indicateur batterie faible
Sélection de la vitesse de transmission
La mise en oeuvre d'un codeur implique forcément une procédure de programmation afin d'initialiser ces valeurs. Microchip proposait une méthode pour générer la clé de cryptage à partir du numéro de série et d'un code constructeur unique sur 64 bits. Noter que c'est le même algorithme qui est utilisé pour générer la clé de cryptage ou pour décrypter la deuxième partie du message. Cet algorithme travaille sur des mots de 32 bits, utilise une clé sur 64 bits, et il utilise des tabulations afin de le rendre non linéaire.
Une fois que l'émetteur est programmé avec son numéro de série (SN) et sa clé, il doit être déclaré sur les récepteurs.
Le processus d'apprentissage proposé par Microchip est simple et repose sur 2 réceptions successives sans erreurs. Il suppose aussi que le discriminant est déduit du numéro de série, car c'est la seule indication claire disponible pour le récepteur. Typiquement le discriminant sera la partie basse du SN.
Ceci implique aussi que le processus, et en particulier l'algorithme de décryptage (utilisé 3 fois dans la première branche) soit assez rapide pour ne pas rater le deuxième message émis ~100ms après le premier.
Pour chaque émetteur, le récepteur doit stocker SN, key et synchro
(noter que ce mot est doublé car il est le seul à être réécrit
périodiquement dans l'E2PROM, et donc risque d'erreur), soit 4+8+2+2=16
octets par émetteur, ou encore 80 octets pour 5 émetteurs, ou
176 octets pour 11 émetteurs. En plus, chaque récepteur soit posséder
le code constructeur (64 bits) pour lui permettre de calculer les clés.
Les exemples de Microchip considèrent toujours des E2PROM externes pour ranger ces données, le code constructeur étant lui dans le code. Il suffirait donc d'espionner le flux entre le micro et l'E2PROM externe pour lire en clair les clés des émetteurs ; cela ne permet pas de remonter au code constructeur, mais cela permet de programmer un clone parfait...
Evidemment le site de Microchip
les articles de Eric Thierry sur les circuits Keeloq HCS300/301 (site de Bigonoff, rubrique réalisations : le programmateur, la télécommande)l