Seed & key : le verrou des calculateurs
« Il me demande un seed & key » — la phrase revient dès qu'on sort du diagnostic de base. Voici ce que c'est exactement.
Le principe : un défi, une réponse
Un calculateur ne laisse pas n'importe qui accéder à ses fonctions sensibles. Avant d'autoriser une écriture ou une routine critique, il pose une question à laquelle seul un outil légitime sait répondre.
L'échange se fait en deux temps :
1. L'outil demande l'accès. Le calculateur répond en envoyant un nombre aléatoire : le seed (la « graine »).
2. L'outil applique un calcul secret à ce seed et renvoie le résultat : la key (la « clé »).
3. Le calculateur fait le même calcul de son côté et compare. Si les deux concordent, l'accès est ouvert.
L'intérêt du procédé : le secret ne circule jamais sur le bus. Un observateur qui écoute ne voit qu'un nombre aléatoire et un résultat, jamais la fonction qui relie les deux. Et comme le seed change à chaque tentative, rejouer un échange enregistré ne sert à rien.
Le service et ses codes
Dans la norme de diagnostic unifié, ce mécanisme porte le numéro de service 0x27 — SecurityAccess. La réponse positive du calculateur porte le numéro 0x67.
Le service a deux sous-fonctions, et leur numérotation obéit à une règle simple :
- Les numéros impairs demandent le seed : 0x01, 0x03, 0x05…
- Les numéros pairs envoient la clé : 0x02, 0x04, 0x06…
Un échange complet ressemble donc à ceci :
| Sens | Trame | Signification |
|---|---|---|
| Outil → calculateur | 27 01 | Demande de seed, niveau 1 |
| Calculateur → outil | 67 01 + seed | Voici le seed |
| Outil → calculateur | 27 02 + clé | Voici ma réponse |
| Calculateur → outil | 67 02 | Accès accordé |
Les niveaux multiples existent parce que tous les accès ne se valent pas : un niveau peut ouvrir la lecture, un autre l'écriture, un autre encore des fonctions de fin de chaîne. Quel niveau donne quoi est propre au constructeur.
Lire les refus
Quand ça ne passe pas, le calculateur répond par une trame commençant par 0x7F, suivie du service demandé et d'un code d'erreur. Les codes qui comptent :
| Code | Signification | Ce que ça veut dire |
|---|---|---|
| 0x35 | Clé invalide | Le calcul ne correspond pas. Compte comme une tentative. |
| 0x36 | Nombre de tentatives dépassé | Le calculateur s'est verrouillé |
| 0x37 | Délai requis non écoulé | Il faut attendre avant de réessayer |
| 0x33 | Accès refusé | La stratégie de sécurité n'est pas satisfaite |
| 0x22 | Conditions non réunies | Mauvaise session, moteur tournant, tension… |
| 0x7E | Sous-fonction non supportée dans cette session | Il faut d'abord changer de session |
| 0x24 | Erreur de séquence | Clé envoyée sans avoir demandé de seed |
| 0x78 | Réponse en attente | Le calculateur travaille, il demande du temps |
Ces codes sont de l'or en diagnostic : ils disent précisément pourquoi ça bloque. Un 0x7E n'est pas un 0x35 — l'un veut dire « pas dans cette session », l'autre « ta clé est fausse ».
Le compteur de tentatives
Un calculateur qui reçoit plusieurs clés fausses se verrouille temporairement : il renvoie alors 0x36, puis 0x37 tant que le délai n'est pas écoulé.
Le nombre de tentatives et la durée du blocage ne sont pas normalisés : chaque constructeur fixe les siens. On lit souvent « trois essais puis dix secondes » — c'est un ordre de grandeur courant, pas une règle. Selon les cas, le délai persiste après coupure de l'alimentation.
Conséquence pratique : ne jamais s'acharner. Multiplier les tentatives allonge le blocage au lieu de le lever.
Le seed à zéro
Cas particulier utile à connaître : si le calculateur renvoie un seed entièrement à zéro, cela signifie que le niveau est déjà déverrouillé. Il n'y a rien à envoyer, l'outil doit simplement passer à la suite.
À l'inverse, un seed nul ne signifie jamais « pas de sécurité » sur un niveau verrouillé.
Pourquoi chaque constructeur a le sien
La norme définit l'échange, pas le calcul. La fonction qui transforme le seed en clé reste le secret du constructeur.
C'est pour cela que les outils de diagnostic ont besoin de fichiers ou de bibliothèques de calcul propres à chaque marque, et qu'un outil peut couvrir une marque et pas une autre. La couverture d'un outil, c'est en grande partie la liste des algorithmes qu'il possède.
Et en KWP2000
Le protocole plus ancien utilise le même service 0x27 et le même principe. La différence tient surtout à la longueur : les seeds y sont souvent plus courts — deux octets suffisent selon la norme — là où le diagnostic unifié en emploie généralement quatre ou plus.
Voir aussi les sessions de diagnostic et le bus CAN.
Sur ANP Engineering — file service de reprogrammation moteur pour professionnels : file service ECU, correction de checksum, calculateurs pris en charge, tarifs.
