Circuit intégré HCS301 et interface de programmation

Figure 1 : Le cœur de la sécurité de millions de télécommandes : le codeur rolling code HCS300/301 de Microchip.

⚠️ AVERTISSEMENT LÉGAL ET ÉTHIQUE

Ce guide est fourni dans un but strictement éducatif et de réparation (ex: remplacer une télécommande perdue pour son propre système). Le clonage ou la programmation de télécommandes pour accéder à des systèmes de sécurité sans l'autorisation du propriétaire est illégal et constitue une infraction pénale. Respectez toujours la vie privée et la propriété d'autrui.

Bienvenue sur TechFix Hub ! Les télécommandes de garage, de portail ou d'alarme utilisent massivement la technologie "Rolling Code" (code tournant) pour empêcher le piratage par rejeu (replay attack). Le circuit intégré HCS300/301 de Microchip (algorithme Keeloq) en est le standard historique.

Cependant, acheter une télécommande "vierge" pose un problème : elle est inutilisable tant que sa mémoire EEPROM interne n'est pas configurée avec un numéro de série et une clé de cryptage uniques. Dans ce guide, nous allons décortiquer la structure de cette mémoire, comprendre le protocole de programmation temporel, et voir comment réaliser un programmateur moderne avec un ESP32.

🔐 1. Comment Fonctionne la Sécurité Rolling Code ?

Contrairement aux vieux systèmes à code fixe, le rolling code change à chaque pression de bouton. Le récepteur accepte la commande grâce à un système de fenêtres de synchronisation (voir Figure 1 conceptuelle) :

  • Fenêtre de Validation (Prochaines 16 valeurs) : Si le compteur de la télécommande est en avance de 1 à 16 pas par rapport au récepteur, la commande est exécutée immédiatement et le récepteur met à jour sa référence.
  • Fenêtre de Resynchronisation (17 à 32 000 valeurs) : Si vous avez appuyé sur la télécommande hors de portée du récepteur, le décalage est plus grand. Le récepteur ignore la première commande, mémorise la nouvelle valeur, et attend la seconde pression pour valider et exécuter. Cela empêche un pirate d'enregistrer et de rejouer un vieux code valide.
  • Fenêtre de Blocage (> 32 000 valeurs) : Le décalage est trop important. Le système se verrouille par sécurité et nécessite une procédure de réapprentissage manuelle.

🧠 2. Anatomie de l'EEPROM du HCS301 (192 bits)

La puce contient 12 "mots" de 16 bits. Voici les champs critiques que notre programmateur doit écrire :

Champ Taille Rôle
SÉRIE (Serial Number) 28 bits L'identifiant unique de la télécommande (comme une plaque d'immatriculation).
SYNCHRO 16 bits La valeur initiale du compteur. Doit être identique dans l'émetteur et le récepteur.
SEED (Graine) 32 bits Utilisé pour générer la clé de cryptage de 64 bits lors de l'apprentissage "sécurisé".
CONFIG 16 bits Réglages : vitesse de transmission (Bit Rate), tension de batterie faible, et valeur de discrimination.

⚡ 3. Le Protocole de Programmation (Timing Critique)

Programmer cette puce ne se fait pas via un bus standard comme l'I2C. C'est un protocole propriétaire basé sur des temporisations précises sur deux broches : Data et Clock.

  1. Préparation Matérielle : Dans de nombreuses télécommandes (comme les modèles Aurel), la broche "Clock" du HCS301 est partagée avec un bouton (S3). Il faut couper la piste reliant cette broche au microcontrôleur de gestion des touches avant de programmer (voir point rouge sur la Figure 9 de l'original).
  2. Entrée en Mode Programmation : Maintenir Clock à l'état HAUT pendant 3,5 à 4,5 ms, puis passer Data à l'état HAUT. La puce efface alors automatiquement toute son EEPROM (Bulk Erase).
  3. Écriture Séquentielle : Envoyer les 12 mots de 16 bits, du poids faible au poids fort, en respectant un délai de stabilisation d'au moins 50 ms entre chaque mot pour permettre l'écriture interne de l'EEPROM.
  4. Vérification (Read-Back) : Immédiatement après l'écriture, la puce peut retransmettre les 192 bits pour vérification. Attention : cette opération n'est possible qu'une seule fois après une programmation pour des raisons de sécurité anti-clonage.

🚀 4. L'Upgrade "TechFix Hub" : Oubliez le PIC, Passez à l'ESP32

Le montage original de 2007 utilisait un PIC18F2550 et un logiciel Windows propriétaire. En 2026, voici l'approche moderne et open-source :

  • Le Matériel : Un simple ESP32-S2 ou ESP32-S3 (qui possède un port USB natif et peut se faire passer pour un périphérique HID ou un port série virtuel) ou un adaptateur USB-TTL (CH340/FT232) couplé à un script Python.
  • Le Logiciel : Utilisez des outils open-source comme hcs301-programmer (disponible sur GitHub). Ces scripts gèrent automatiquement les temporisations critiques (les 50 ms entre les mots) que les microcontrôleurs basiques gèrent mal à cause des interruptions du système d'exploitation.
  • Alternative Moderne pour Nouveaux Projets : Si vous concevez un système from scratch, évitez le Keeloq (dont l'algorithme a été rétro-ingéniéré). Préférez des modules RF comme le NRF24L01 avec cryptage AES-128 matériel, ou la communication ESP-NOW entre deux ESP32, bien plus sécurisée et facile à implémenter.

🔗 Pour Aller Plus Loin sur TechFix Hub

La sécurité RF et les microcontrôleurs n'ont plus de secrets pour vous ? Consultez ces guides complémentaires :

✅ Conclusion

Programmer un HCS300/301 est un excellent exercice pour comprendre comment la sécurité matérielle gère les identifiants uniques, les compteurs de synchronisation et les délais d'écriture EEPROM. Si la méthode historique avec un PIC est un bon exercice de rétro-ingénierie, l'approche moderne avec un ESP32 et des scripts Python rend cette tâche accessible, fiable et parfaitement adaptée au maker d'aujourd'hui.

🛠️ Vous travaillez sur un projet de sécurité RF ?

Vous avez des questions sur le protocole de programmation, la génération de la clé Keeloq, ou l'utilisation de l'ESP32 pour ce type de tâche ? Posez votre question dans les commentaires ci-dessous, la communauté TechFix Hub se fera un plaisir de vous aider !

Mots-clés : Rolling Code HCS301 / Keeloq ESP32 & Sécurité Rétro-Engineering

Bottom Ad [Post Page]