Guest User

Untitled

a guest
Sep 15th, 2026
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.90 KB | None | 0 0
  1. PROMPT : peux-tu me rédiger un article pour linuxfr.org, article de qualité, concernant un superbe outil open source - blfinder - GPL que j'ai développé et qui permet de retrouver ses objets perdu via les signaux bluetooth
  2.  
  3.  
  4. # blfinder : retrouver ses objets perdus à la trace des signaux Bluetooth
  5.  
  6. > Chapô (texte affiché avant le « lire la suite »)
  7.  
  8. `blfinder` est un utilitaire en ligne de commande sous licence GPL [[GPL-2.0 ou GPL-3.0 — à préciser]] qui scanne les émissions Bluetooth Low Energy (BLE) environnantes et aide à localiser un objet équipé d'une balise : trousseau de clés, sac, vélo, télécommande, casque audio.
  9.  
  10. Le principe repose sur trois briques : l'écoute passive des trames d'annonce (*advertising*) BLE, le suivi du RSSI (puissance du signal reçu) au cours du déplacement de l'opérateur, et un retour en temps réel « tu chauffes / tu refroidis ». Aucun service en ligne, aucun compte, aucune télémétrie : tout se passe sur la machine locale.
  11.  
  12. [[Version publiée : X.Y.Z — date]] · [[URL du dépôt]]
  13.  
  14. [sommaire]
  15.  
  16. ----
  17.  
  18. ## Le problème
  19.  
  20. Les balises commerciales (AirTag, Tile, SmartTag, Chipolo) fonctionnent, mais imposent :
  21.  
  22. | Contrainte | Détail |
  23. |---|---|
  24. | Écosystème fermé | Application propriétaire obligatoire, souvent liée à un compte constructeur |
  25. | Dépendance réseau | La localisation « crowdsourcée » passe par les serveurs du fabricant |
  26. | Matériel imposé | Balise spécifique, non réutilisable hors de son application |
  27. | Portée logicielle limitée | Impossible de suivre un périphérique BLE quelconque déjà possédé |
  28.  
  29. Or beaucoup d'objets du quotidien émettent déjà du BLE en permanence : écouteurs, montres, capteurs de température, traceurs vélo, cartes de développement type ESP32 ou nRF52. Il suffit d'un outil qui écoute.
  30.  
  31. ## Ce que fait blfinder
  32.  
  33. - Scan BLE passif continu, sans appairage ni connexion.
  34. - Table des périphériques vus : adresse, nom, constructeur (résolution de l'OUI), *service UUID*, *manufacturer data*, RSSI courant et RSSI moyenné.
  35. - Mode « radar » : sélection d'une cible, puis affichage temps réel de la tendance du signal avec lissage, pour approcher physiquement l'objet.
  36. - Estimation de distance indicative à partir d'un modèle de perte en espace libre.
  37. - [[Sortie JSON / CSV pour exploitation ultérieure — confirmer]]
  38. - [[Journalisation des vues avec horodatage — confirmer]]
  39. - [[Alerte sonore ou retour haptique — confirmer]]
  40. - [[Mode « veille » : alerte quand une balise connue disparaît du champ — confirmer]]
  41.  
  42. ### Capture
  43.  
  44. ```
  45. [[ coller ici une capture de la sortie du mode radar ]]
  46. ```
  47.  
  48. ## Le socle technique
  49.  
  50. | Élément | Choix retenu |
  51. |---|---|
  52. | Langage | [[Python / Go / Rust / C — à préciser]] |
  53. | Pile Bluetooth | BlueZ via [[D-Bus / HCI brut / bleak / go-bluetooth]] |
  54. | Dépendances | [[liste]] |
  55. | Plateformes testées | [[Debian, Fedora, Arch, Raspberry Pi OS…]] |
  56. | Licence | [[GPL-2.0-only / GPL-3.0-or-later]] |
  57. | Taille du projet | [[nombre de lignes]] |
  58.  
  59. L'écoute des trames d'annonce n'exige pas d'appairage : un périphérique BLE en mode *advertising* diffuse à intervalle régulier des paquets contenant son adresse, éventuellement un nom, des UUID de services et des données constructeur. Le scan est donc purement passif.
  60.  
  61. Sous Linux, deux voies existent :
  62.  
  63. - **API D-Bus de BlueZ** (`org.bluez.Adapter1.StartDiscovery`) : stable, sans privilège root une fois les règles Polkit posées, mais elle filtre et normalise une partie des données brutes.
  64. - **Socket HCI brut** (`AF_BLUETOOTH`, `HCI_CHANNEL_USER`) : accès complet aux événements `LE Advertising Report`, au prix de la capacité `CAP_NET_RAW`/`CAP_NET_ADMIN`.
  65.  
  66. blfinder utilise [[la voie retenue + justification technique en une phrase]].
  67.  
  68. ## RSSI : ce que le signal dit, et ce qu'il ne dit pas
  69.  
  70. Le RSSI est l'unique indicateur de proximité disponible sans matériel dédié. Le modèle de perte en trajet le plus courant :
  71.  
  72. ```
  73. d = 10 ^ ((TxPower - RSSI) / (10 * n))
  74. ```
  75.  
  76. - `TxPower` : puissance de référence mesurée à 1 m (souvent annoncée dans la trame pour les balises de type iBeacon/Eddystone) ;
  77. - `n` : exposant de propagation, ≈ 2 en espace libre, 2,7 à 4,3 en intérieur cloisonné.
  78.  
  79. Conséquences pratiques :
  80.  
  81. | Facteur | Effet sur la mesure |
  82. |---|---|
  83. | Corps humain, mur porteur, métal | Atténuation de plusieurs dizaines de dB, distance surestimée |
  84. | Multitrajet (intérieur) | Fluctuations de ±10 dB à position constante |
  85. | Orientation de l'antenne | Écart significatif entre deux mesures au même endroit |
  86. | Puissance d'émission variable | `TxPower` inconnu ou erroné sur beaucoup de périphériques |
  87.  
  88. D'où le parti pris de l'outil : ne pas promettre une distance en mètres, mais une **tendance**. L'opérateur se déplace, l'outil indique si la moyenne glissante monte ou descend. La recherche devient un jeu de gradient, pas une trilatération.
  89.  
  90. [[Préciser ici la méthode de lissage retenue : moyenne mobile, filtre de Kalman 1D, médiane glissante… et la taille de fenêtre]]
  91.  
  92. ## La randomisation d'adresse : la vraie difficulté
  93.  
  94. Depuis Bluetooth 4.2, la fonctionnalité de confidentialité fait tourner l'adresse publique en **RPA** (*Resolvable Private Address*), dérivée d'une clé IRK. Sans cette IRK, un même périphérique apparaît sous une nouvelle adresse à intervalle régulier.
  95.  
  96. | Référence | Règle |
  97. |---|---|
  98. | Android CDD | Timeout RPA ≤ 15 min, intervalles randomisés entre 5 et 15 min |
  99. | AOSP (`btm_ble_addr.cc`) | Tirage entre 7 et 15 min |
  100. | Bluetooth Core 6.1 | Randomisation du renouvellement, 8–15 min par défaut, réglable de 1 s à 1 h, gérée par le contrôleur |
  101.  
  102. Sources : [Android CDD 7.4](https://source.android.com/docs/compatibility/cdd), [dépôt AOSP Bluetooth](https://android.googlesource.com/platform/packages/modules/Bluetooth/), [annonce Bluetooth SIG 6.1](https://www.bluetooth.com/).
  103.  
  104. Contournements possibles, par ordre de fiabilité :
  105.  
  106. 1. **Balise à adresse statique** : les balises dédiées (iBeacon, Eddystone, firmwares maison sur nRF52/ESP32) gardent une adresse fixe. Cas nominal pour blfinder.
  107. 2. **Résolution de RPA via IRK** : possible si le périphérique a été appairé, l'IRK étant stockée dans `/var/lib/bluetooth/<adaptateur>/<périphérique>/info`.
  108. 3. **Empreinte sur le contenu des trames** : *manufacturer data*, combinaison d'UUID de services, longueur de paquet. Fonctionne sur les périphériques bavards, échoue sur les autres.
  109.  
  110. [[Indiquer lesquels de ces trois mécanismes sont implémentés]]
  111.  
  112. ## Installation
  113.  
  114. ```bash
  115. # Depuis les sources
  116. git clone [[URL]]
  117. cd blfinder
  118. [[commande de build / installation]]
  119.  
  120. # Dépendances Debian/Ubuntu
  121. sudo apt install bluez [[autres paquets]]
  122. ```
  123.  
  124. Sans root :
  125.  
  126. ```bash
  127. sudo setcap 'cap_net_raw,cap_net_admin+eip' $(which blfinder)
  128. ```
  129.  
  130. [[Mentionner les paquets distro existants : AUR, Nix, Flatpak, conteneur…]]
  131.  
  132. ## Usage
  133.  
  134. ```bash
  135. # Inventaire de ce qui émet autour de soi
  136. blfinder scan
  137.  
  138. # Suivi d'une cible
  139. blfinder track --address XX:XX:XX:XX:XX:XX
  140.  
  141. # [[autres sous-commandes]]
  142. ```
  143.  
  144. [[Décrire un cas d'usage réel vécu : quel objet, combien de temps pour le retrouver, dans quelles conditions]]
  145.  
  146. ## Comparaison avec l'existant
  147.  
  148. | Projet | Objet | Fonctionnement |
  149. |---|---|---|
  150. | **blfinder** | Recherche de proximité locale | Scan BLE + gradient de RSSI, hors ligne |
  151. | **OpenHaystack** (SEEMOO, TU Darmstadt) | Balises maison sur le réseau *Find My* d'Apple | Dépend du parc d'iPhone et des serveurs Apple ; nécessite un Mac |
  152. | **bluetoothctl / btmgmt** (BlueZ) | Outils d'administration | Scan brut, sans suivi ni aide à la localisation |
  153. | **Sniffle / nRF Sniffer** | Analyse de protocole | Capture bas niveau, matériel dédié |
  154. | **Theengs / OpenMQTTGateway** | Passerelle domotique | Publie les relevés BLE vers MQTT, orienté supervision fixe |
  155.  
  156. Références : [OpenHaystack](https://github.com/seemoo-lab/openhaystack) — travail de rétro-ingénierie du réseau *Find My*, à l'origine du CVE-2020-9986.
  157.  
  158. ## Vie privée
  159.  
  160. Le scan BLE est passif et ne transmet rien, mais il collecte des identifiants de périphériques appartenant à des tiers. Points d'attention intégrés [[ou à intégrer]] :
  161.  
  162. - Pas de remontée réseau, pas de base centralisée.
  163. - [[Journalisation désactivée par défaut ? anonymisation des adresses non ciblées ?]]
  164. - Le suivi de l'adresse BLE d'un appareil tiers relève des règles applicables aux données à caractère personnel.
  165.  
  166. ## Feuille de route
  167.  
  168. - [[point 1]]
  169. - [[point 2]]
  170. - [[point 3]]
  171.  
  172. ## Contribuer
  173.  
  174. | Ressource | Lien |
  175. |---|---|
  176. | Dépôt | [[URL]] |
  177. | Suivi de bugs | [[URL]] |
  178. | Licence | [[GPL-x]] |
  179. | Contact | [[canal : IRC, Matrix, courriel]] |
  180.  
  181. Retours recherchés en priorité : compatibilité des adaptateurs USB Bluetooth, comportement sur Raspberry Pi, cas de balises dont l'empreinte reste stable malgré la randomisation.
Advertisement
Add Comment
Please, Sign In to add comment