Un BLE Tag standard est un beacon de la taille d’une piece que l’on clippe aux cles, a un ordinateur portable, a une palette ou au bracelet d’un patient pour le retrouver plus tard. Cette meme commodite est aussi le danger : glissez-en un dans le sac de quelqu’un a son insu et cela devient un dispositif de suivi. Apres une serie de cas de maltraitance, Apple et Google ont publie une specification commune (2023-2024) de “detection de suivi non desire” que tout tag — pas seulement les premiers parties — doit respecter pour etre tolere par les telephones. Cet article traite du cote ingenierie : comment un tag deduit qu’il s’est separe de son proprietaire, comment il avertit un inconnu au lieu du proprietaire, et la cryptographie qui permet a un telephone trouveur de signaler une position sans jamais savoir a qui appartient le tag.

Le modele de menace en deux acteurs

Il n’y a exactement que deux parties en jeu :

  • Proprietaire — le telephone appaire qui se lie legitiment au tag et est cense rester a proximite.
  • Non-proprietaire — une personne qui transporte desormais le tag a son insu (la victime), ou un passant dont le telephone peut simplement l’entendre (le trouveur).

Un tag bien comporte suppose que le proprietaire est proche la plupart du temps. L’etat dangereux est *separe* : le tag se deplace dans le monde mais le telephone du proprietaire n’est pas avec lui. Detecter cet etat, et avertir le non-proprietaire au lieu du proprietaire, est tout le travail de la protection anti-pistage.

Detection de separation : “mon proprietaire est-il la ?”

Le tag ne peut pas interroger le proprietaire via Internet — il est purement BLE et peut etre hors de tout gateway. Il deduit donc la presence du proprietaire localement :

1. Le telephone du proprietaire, pendant le appairage, emet periodiquement un jeton de presence authentifie — un paquet BLE rotatif et signe que le tag reconnait.

2. Le tag ecoute pendant les intervalles publicitaires. A chaque cycle, il recoit le jeton (proprietaire present) ou non (un manque).

3. Il maintient un compteur de manques. Lorsque les manques depassent un seuil *et* l’accelerometre du tag signale un mouvement, il passe a l’etat separe.

La porte de mouvement compte. Un tag laisse sur une etagere a la maison pendant que le proprietaire part en voyage ne doit pas declencher d’alarme — il n’y a pas de victime. Un tag qui se deplace avec un inconnu pendant des heures le doit. Seuils typiques : 8-24 h d’absence cumulee en mouvement avant la premiere alerte.

Une boucle de detection minimale:

def tick(tag, owner_token_seen, accel_motion):
if owner_token_seen:
tag.miss_counter = 0
tag.separated = False
return
tag.miss_counter += 1
if tag.miss_counter > ABSENCE_LIMIT and accel_motion:
tag.separated = True

Deux facons dont le tag avertit l’inconnu

Une fois separe, le tag doit avertir le *non-proprietaire*, pas le proprietaire :

1. Haut-parleur integre. Un petit transducteur piezo ou magnetique emet un son. La specification multiplateforme exige en pratique un son d’environ >= 60 dB a 0,3 m emis dans une fenetre bornee (souvent 8-24 h apres la separation). Voila pourquoi tout tag grand public embarque un transducteur impossible a retirer en silence.

2. Alerte sur le telephone du non-proprietaire. Tout systeme d’exploitation peut marquer un tag *inconnu* qui a voyage avec lui. Le telephone affiche une notification, propose “Jouer un son”, “Afficher le dernier lieu vu” et des instructions pour desactiver le tag. Pour que cela fonctionne entre constructeurs, le tag doit diffuser un drapeau d’etat separe dans sa charge BLE normale, parse par n’importe quel systeme.

Capacite Telephone du proprietaire Telephone de l’inconnu (non-proprietaire)
Voit la position du tag Oui (live + historique) Seulement “vu pres de vous”
Peut jouer un son Oui (a tout moment) Oui (apres la fenetre de separation)
Recoit une alerte Non (c’est le proprietaire) Oui (alerte de traqueur inconnu)
Peut desactiver le tag Oui (desapparier) Limite (physique / flux OS)

Recherche hors ligne : la crypto qui cache le proprietaire

La partie maline, c’est *comment le telephone d’un inconnu signale la position du tag au proprietaire sans que l’une des deux parties ne connaisse l’identite de l’autre*. C’est le modele “Find My” / recherche hors ligne :

  • Le tag detient une cle privee maitresse. Pour chaque intervalle de temps *i* (souvent une heure) il derive une nouvelle cle publique `PK_i = Derive(master_priv, i)` et la diffuse — ou un court hash — dans le paquet publicitaire.
  • Un telephone trouveur qui entend `PK_i` lit sa propre position GNSS/Wi-Fi, chiffre `(position, horodatage)` avec `PK_i` et uploade le chiffre au serveur relais. Pas de compte, pas d’identite.
  • Le proprietaire, connaissant `master_priv` et l’intervalle courant *i*, recalcule la cle privee correspondante, recupere le chiffre et dechiffre la position.

La propriete de confidentialite : le serveur relais ne voit que des chiffres opaques. Il ne peut pas lier deux decouvertes du meme tag (les cles tournent), ni connaitre le proprietaire. Seule la cle maitresse du proprietaire relie les rapports.

Contraintes ingenierie sur un tout petit tag

C’est la que ca se corse pour un appareil a pile bouton :

  • Cout crypto. Une multiplication scalaire ECC sur un Cortex-M0+/M4 prend de centaines de millisecondes a des secondes et consomme des mA. Faire tourner et re-deriver les cles chaque heure sur une CR2032 est impraticable ; les tags mettent donc en cache la `PK_i` courante et ne la recalculent qu’a la frontiere d’intervalle — souvent en dechargeant la derive lourde vers le telephone du proprietaire, qui pre-calcule un petit lot de cles futures et les pousse via la connexion appairee.
  • Derive d’horloge. La rotation des cles est indexee dans le temps. Si le tag perd l’alimentation (retrait pile), son index d’intervalle est reinitialise et le proprietaire ne peut plus dechiffrer les rapports jusqu’a ce que le telephone re-synchronise l’index. Le firmware doit persister l’index en memoire non volatile et tolerer la derive.
  • Controle des faux positifs. Si le telephone du proprietaire sort un instant de porteee BLE, le tag ne doit pas declencher. Le compteur de manques + porte de mouvement + longue limite d’absence gardent les fausses alarmes rares.
  • Anti-sabotage. Le haut-parleur et le drapeau de separation doivent etre difficiles a desactiver en firmware ; un tag conforme n’expose aucun “mode silencieux” survivant a la separation.

Une esquisse de consommation pour un tag faisant de l’anti-pistage :

Activite Courant Cycle
Sondage accelerometre (mouvement) 5-50 uA 1 Hz
Ecoute jeton proprietaire (RX) 3-6 mA qq ms / intervalle pub
Service cache de cles (BLE) 1-3 mA sporadique
Alerte haut-parleur 20-80 mA rafales, rare
Publicite de base 5-50 uA continu

Le cout dominant toujours actif est l’accelerometre et l’ecoute RX periodique ; le reste est rare. Une CR2032 tient encore des mois car l’etat separe et le haut-parleur sont exceptionnels, pas quotidiens.

Ce qu’un OEM doit implementer pour expedier un tag conforme

Si vous construisez un BLE Tag que des personnes transporteront, le minimum firmware est :

1. Detection authentifiee de presence du proprietaire (jeton rotatif signe du telephone appaire).

2. Timer de separation + porte de mouvement avec la fenetre d’absence specifiee.

3. Alerte audible respectant le dB / latence, non amovible.

4. Drapeau d’etat separe dans la pub BLE pour qu’un systeme quelconque leve une alerte de traqueur inconnu.

5. Rotation de cles de recherche hors ligne (si vous rejoignez un reseau de recherche) avec persistance de l’index entre reboots.

Si au contraire votre tag est un *tag d’actif industriel* sous supervision constante de gateway, le meme abus est possible si un ouvrier le glisse dans un manteau. Beaucoup de flottes resolvent cela en traitant le serveur de flotte comme le “proprietaire” : le serveur confirme la presence via le lien gateway, et un tag qui perd le contact avec le serveur au-dela de la limite adopte le meme comportement separe — sauf que l’alerte part vers la securite plutot que vers un telephone.

En conclusion

La protection anti-pistage n’est pas une case a cocher. C’est une machine a etats (proprietaire present -> absent -> separe), un haut-parleur qu’on ne peut reduire au silence, un drapeau inter-constructeurs, et une cryptographie optionnelle qui garde le proprietaire anonyme. Integrez-la des le premier jour, car les systemes d’exploitation traitent desormais les tags non conformes en hostiles et avertissent les utilisateurs a leur vue.

Comments

No comments yet. Why don’t you start the discussion?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *