Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
- # blfinder : retrouver ses objets perdus à la trace des signaux Bluetooth
- > Chapô (texte affiché avant le « lire la suite »)
- `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.
- 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.
- [[Version publiée : X.Y.Z — date]] · [[URL du dépôt]]
- [sommaire]
- ----
- ## Le problème
- Les balises commerciales (AirTag, Tile, SmartTag, Chipolo) fonctionnent, mais imposent :
- | Contrainte | Détail |
- |---|---|
- | Écosystème fermé | Application propriétaire obligatoire, souvent liée à un compte constructeur |
- | Dépendance réseau | La localisation « crowdsourcée » passe par les serveurs du fabricant |
- | Matériel imposé | Balise spécifique, non réutilisable hors de son application |
- | Portée logicielle limitée | Impossible de suivre un périphérique BLE quelconque déjà possédé |
- 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.
- ## Ce que fait blfinder
- - Scan BLE passif continu, sans appairage ni connexion.
- - Table des périphériques vus : adresse, nom, constructeur (résolution de l'OUI), *service UUID*, *manufacturer data*, RSSI courant et RSSI moyenné.
- - Mode « radar » : sélection d'une cible, puis affichage temps réel de la tendance du signal avec lissage, pour approcher physiquement l'objet.
- - Estimation de distance indicative à partir d'un modèle de perte en espace libre.
- - [[Sortie JSON / CSV pour exploitation ultérieure — confirmer]]
- - [[Journalisation des vues avec horodatage — confirmer]]
- - [[Alerte sonore ou retour haptique — confirmer]]
- - [[Mode « veille » : alerte quand une balise connue disparaît du champ — confirmer]]
- ### Capture
- ```
- [[ coller ici une capture de la sortie du mode radar ]]
- ```
- ## Le socle technique
- | Élément | Choix retenu |
- |---|---|
- | Langage | [[Python / Go / Rust / C — à préciser]] |
- | Pile Bluetooth | BlueZ via [[D-Bus / HCI brut / bleak / go-bluetooth]] |
- | Dépendances | [[liste]] |
- | Plateformes testées | [[Debian, Fedora, Arch, Raspberry Pi OS…]] |
- | Licence | [[GPL-2.0-only / GPL-3.0-or-later]] |
- | Taille du projet | [[nombre de lignes]] |
- 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.
- Sous Linux, deux voies existent :
- - **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.
- - **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`.
- blfinder utilise [[la voie retenue + justification technique en une phrase]].
- ## RSSI : ce que le signal dit, et ce qu'il ne dit pas
- Le RSSI est l'unique indicateur de proximité disponible sans matériel dédié. Le modèle de perte en trajet le plus courant :
- ```
- d = 10 ^ ((TxPower - RSSI) / (10 * n))
- ```
- - `TxPower` : puissance de référence mesurée à 1 m (souvent annoncée dans la trame pour les balises de type iBeacon/Eddystone) ;
- - `n` : exposant de propagation, ≈ 2 en espace libre, 2,7 à 4,3 en intérieur cloisonné.
- Conséquences pratiques :
- | Facteur | Effet sur la mesure |
- |---|---|
- | Corps humain, mur porteur, métal | Atténuation de plusieurs dizaines de dB, distance surestimée |
- | Multitrajet (intérieur) | Fluctuations de ±10 dB à position constante |
- | Orientation de l'antenne | Écart significatif entre deux mesures au même endroit |
- | Puissance d'émission variable | `TxPower` inconnu ou erroné sur beaucoup de périphériques |
- 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.
- [[Préciser ici la méthode de lissage retenue : moyenne mobile, filtre de Kalman 1D, médiane glissante… et la taille de fenêtre]]
- ## La randomisation d'adresse : la vraie difficulté
- 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.
- | Référence | Règle |
- |---|---|
- | Android CDD | Timeout RPA ≤ 15 min, intervalles randomisés entre 5 et 15 min |
- | AOSP (`btm_ble_addr.cc`) | Tirage entre 7 et 15 min |
- | 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 |
- 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/).
- Contournements possibles, par ordre de fiabilité :
- 1. **Balise à adresse statique** : les balises dédiées (iBeacon, Eddystone, firmwares maison sur nRF52/ESP32) gardent une adresse fixe. Cas nominal pour blfinder.
- 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`.
- 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.
- [[Indiquer lesquels de ces trois mécanismes sont implémentés]]
- ## Installation
- ```bash
- # Depuis les sources
- git clone [[URL]]
- cd blfinder
- [[commande de build / installation]]
- # Dépendances Debian/Ubuntu
- sudo apt install bluez [[autres paquets]]
- ```
- Sans root :
- ```bash
- sudo setcap 'cap_net_raw,cap_net_admin+eip' $(which blfinder)
- ```
- [[Mentionner les paquets distro existants : AUR, Nix, Flatpak, conteneur…]]
- ## Usage
- ```bash
- # Inventaire de ce qui émet autour de soi
- blfinder scan
- # Suivi d'une cible
- blfinder track --address XX:XX:XX:XX:XX:XX
- # [[autres sous-commandes]]
- ```
- [[Décrire un cas d'usage réel vécu : quel objet, combien de temps pour le retrouver, dans quelles conditions]]
- ## Comparaison avec l'existant
- | Projet | Objet | Fonctionnement |
- |---|---|---|
- | **blfinder** | Recherche de proximité locale | Scan BLE + gradient de RSSI, hors ligne |
- | **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 |
- | **bluetoothctl / btmgmt** (BlueZ) | Outils d'administration | Scan brut, sans suivi ni aide à la localisation |
- | **Sniffle / nRF Sniffer** | Analyse de protocole | Capture bas niveau, matériel dédié |
- | **Theengs / OpenMQTTGateway** | Passerelle domotique | Publie les relevés BLE vers MQTT, orienté supervision fixe |
- 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.
- ## Vie privée
- 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]] :
- - Pas de remontée réseau, pas de base centralisée.
- - [[Journalisation désactivée par défaut ? anonymisation des adresses non ciblées ?]]
- - Le suivi de l'adresse BLE d'un appareil tiers relève des règles applicables aux données à caractère personnel.
- ## Feuille de route
- - [[point 1]]
- - [[point 2]]
- - [[point 3]]
- ## Contribuer
- | Ressource | Lien |
- |---|---|
- | Dépôt | [[URL]] |
- | Suivi de bugs | [[URL]] |
- | Licence | [[GPL-x]] |
- | Contact | [[canal : IRC, Matrix, courriel]] |
- 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