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 RÉSEAU DE BORD ET LA PRISE DIAGNOSTIC bus CAN Moteur Boîte ABS Tableau Carrosserie Prise OBD Un défaut de communication U0100 signale que le calculateur ne répond plus sur ce bus.
Le bus CAN : tout passe par là, y compris la reprogrammation OBD

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 0x27SecurityAccess. 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 :

Un échange complet ressemble donc à ceci :

SensTrameSignification
Outil → calculateur27 01Demande de seed, niveau 1
Calculateur → outil67 01 + seedVoici le seed
Outil → calculateur27 02 + cléVoici ma réponse
Calculateur → outil67 02Accè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 :

CodeSignificationCe que ça veut dire
0x35Clé invalideLe calcul ne correspond pas. Compte comme une tentative.
0x36Nombre de tentatives dépasséLe calculateur s'est verrouillé
0x37Délai requis non écouléIl faut attendre avant de réessayer
0x33Accès refuséLa stratégie de sécurité n'est pas satisfaite
0x22Conditions non réuniesMauvaise session, moteur tournant, tension…
0x7ESous-fonction non supportée dans cette sessionIl faut d'abord changer de session
0x24Erreur de séquenceClé envoyée sans avoir demandé de seed
0x78Réponse en attenteLe 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.

ANP Wiki
ANPFile Service · reprog en ligne
Chargement…