Bonding (appairage) en Bluetooth Low Energy est le processus de création d’une connexion sécurisée permanente entre deux dispositifs en stockant des clés cryptographiques dans une mémoire non volatile. Après le bonding, les dispositifs peuvent automatiquement restaurer une connexion cryptée lors de la reconnexion sans avoir à ressaisir le PIN ni confirmation de l’utilisateur. Selon la Bluetooth SIG Core Specification v5.4 (2025), le mécanisme de bonding est obligatoire pour les dispositifs nécessitant une reconnexion automatique — casques, trackers de fitness, capteurs médicaux et accessoires IoT.
Points clés
Bonding est une extension du processus de pairing en Bluetooth Low Energy, où les dispositifs stockent des clés de cryptage pour les connexions ultérieures. La norme BLE définit trois modes de sécurité : Security Mode 1 (cryptage sans authentification), Security Mode 2 (signature de données sans cryptage) et Security Mode 3 (cryptage avec authentification). Le bonding est pertinent pour les modes avec cryptage lorsque des connexions répétées sans renouvellement de clés sont nécessaires.
Le but principal du bonding est la restauration automatique des connexions cryptées lorsque les dispositifs se reconnectent. Lorsqu’un utilisateur sort des écouteurs de leur boîtier et les met, le bonding assure une connexion instantanée au smartphone sans avoir à sélectionner à nouveau le dispositif dans le menu Bluetooth. Selon les Apple Bluetooth Design Guidelines (2025), les dispositifs liés doivent se connecter en moins de 2 secondes après la découverte.
Lors du bonding, chaque dispositif stocke un ensemble de matériaux cryptographiques : Long Term Key (LTK) pour le cryptage de la connexion, Identity Resolving Key (IRK) pour la résolution des adresses aléatoires et Connection Signature Resolving Key (CSRK) pour la vérification des signatures de données. Le LTK est la clé primaire de 128 bits générée lors du pairing et utilisée pour toutes les sessions cryptées ultérieures.
| Clé | Longueur | Objectif |
|---|---|---|
| LTK | 128 bits | Cryptage des données après reconnexion |
| IRK | 128 bits | Résolution des adresses privées aléatoires (RPA) |
| CSRK | 128 bits | Signature et vérification d’authenticité des données |
Pairing est la négociation temporaire de clés pour crypter la session de communication en cours. Lorsque la connexion se termine, les clés de cryptage sont supprimées et la connexion suivante nécessite à nouveau un processus complet de pairing. Bonding inclut toutes les étapes du pairing mais stocke en plus les clés pour les sessions futures. Pratiquement tous les dispositifs Bluetooth grand public (casques, enceintes, montres) utilisent le bonding car sans lui, chaque connexion nécessiterait une ressaisie du PIN.
Le processus de pairing selon la spécification BLE comprend trois phases. Phase 1 — échange des capacités des dispositifs (capacités IO, support d’authentification). Phase 2 — génération et échange de Short Term Key (STK) ou LTK, selon la méthode d’appairage. Phase 3 — transport des clés : échange de LTK, IRK, CSRK entre les dispositifs. Si les dispositifs ont stocké les clés après la Phase 3 — c’est du bonding. Sinon — ce n’est que du pairing.
| Paramètre | Pairing | Bonding |
|---|---|---|
| Stockage des clés | Non stockées | Stockées en NVRAM |
| Reconnexion automatique | Non | Oui |
| Ressaisie du PIN | Requis | Non requis |
| Utilisation | Connexions occasionnelles | Dispositifs permanents |
Le processus de bonding est initié après la réussite du pairing, lorsqu’un dispositif envoie une demande de stockage des clés. En BLE, le Central (généralement un smartphone) et le Peripheral (dispositif portable) échangent des clés via le canal sécurisé établi lors de la Phase 2. Après un échange réussi, chaque dispositif les stocke dans la mémoire non volatile avec l’adresse MAC ou l’Identity Address du partenaire.
Du côté Central (iOS/Android), les clés sont stockées dans le stockage Bluetooth système. iOS utilise la pile système Core Bluetooth avec gestion automatique du bonding : lors du premier appairage, les clés sont enregistrées dans la NVRAM du dispositif, et les connexions ultérieures au même Peripheral se font automatiquement. Le développeur ne gère pas les clés directement — la pile système Core Bluetooth traite le bonding automatiquement lors de la connexion à un dispositif prenant en charge le stockage des clés.
Lors de la reconnexion, le Peripheral envoie des paquets de publicité contenant soit son adresse publique, soit une Resolvable Private Address (RPA). Le Central reçoit le paquet, compare l’adresse avec les dispositifs liés stockés et, si une correspondance est trouvée, initie la restauration de la session en utilisant le LTK stocké. Si le LTK correspond, la connexion cryptée est établie sans nouveau pairing.
La spécification BLE définit plusieurs méthodes d’authentification qui affectent le niveau de sécurité du bonding. Le choix de la méthode dépend des capacités IO des dispositifs — s’ils ont un écran, un clavier ou la capacité de confirmer une comparaison numérique. Un bonding sécurisé nécessite au moins Just Works pour les applications non critiques et Numeric Comparison ou Passkey Entry pour les tâches nécessitant une protection contre les attaques Man-in-the-Middle.
Just Works est une méthode sans authentification utilisée lorsqu’un des dispositifs n’a pas d’écran ni de clavier. Les clés de cryptage sont transmises sans vérifier l’identité du second dispositif — capteurs de température, moniteurs cardiaques. Just Works est vulnérable aux attaques MITM, donc il n’est utilisé que pour les dispositifs où la compromission des données ne représente pas une menace.
Numeric Comparison est une méthode d’authentification où les deux dispositifs affichent un nombre à six chiffres et l’utilisateur doit confirmer la correspondance. Cette méthode offre une protection contre les attaques MITM et est recommandée pour les dispositifs avec écran — montres connectées, trackers de fitness, télécommandes. Après confirmation, le bonding est stocké avec le niveau de confiance maximal.
Passkey Entry nécessite la saisie d’un PIN à six chiffres sur l’un des dispositifs. Généralement, le code est généré par un dispositif et affiché sur celui-ci, tandis que l’utilisateur le saisit sur le second dispositif. Cette méthode est utilisée pour les dispositifs médicaux et les serrures IoT où un haut niveau de sécurité est requis mais l’un des dispositifs n’a pas d’écran pour Numeric Comparison.
La gestion du bonding est le processus de visualisation, suppression et maintenance des clés stockées des dispositifs appairés. Dans le développement mobile, il est important de traiter correctement les états des dispositifs liés, en particulier lorsqu’un dispositif périphérique est réinitialisé ou que son firmware est remplacé. Lorsque les clés de bonding sur le Peripheral changent, les anciennes clés sur le Central doivent être supprimées et un nouvel appairage effectué.
iOS gère automatiquement les dispositifs liés via la pile système Core Bluetooth. Le développeur n’a pas d’API directe pour visualiser ou supprimer individuellement les dispositifs liés — la gestion se fait via les paramètres système (Settings > Bluetooth > dispositif > Forget). Si le bonding doit être effacé par programmation, l’application peut diriger l’utilisateur vers les paramètres Bluetooth système en utilisant UIApplication.openSettingsURLString.
Android fournit une API directe pour travailler avec les dispositifs liés via la classe BluetoothAdapter. La méthode getBondedDevices() retourne un Set<BluetoothDevice> de tous les dispositifs appairés. Pour supprimer le bonding, la méthode removeBond() est utilisée par réflexion ou, sur Android 12+, l’API officielle BluetoothDevice.removeBond().
val adapter = BluetoothAdapter.getDefaultAdapter()
val bondedDevices: Set<BluetoothDevice> = adapter.getBondedDevices()
bondedDevices.forEach { device ->
Log.d("Bonding", "Bonded device: ${device.name}, ${device.address}")
}
L’implémentation du bonding sur Android nécessite un traitement correct du BroadcastReceiver pour les événements BluetoothDevice.ACTION_BOND_STATE_CHANGED. Lors de la première connexion à un dispositif, le système Android initie automatiquement le bonding si le dispositif prend en charge cette capacité. Le développeur doit gérer trois états : BOND_NONE (non appairé), BOND_BONDING (appairage en cours), BOND_BONDED (appairé).
val bondReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE)
val bondState = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, -1)
when (bondState) {
BluetoothDevice.BOND_BONDED -> Log.d("Bonding", "Bonded: ${device.name}")
BluetoothDevice.BOND_NONE -> Log.d("Bonding", "Lien supprimé")
}
}
}
Pour initier le bonding sur Android, la méthode createBond() doit être appelée sur l’objet BluetoothDevice. La méthode retourne un booléen — true si le processus d’appairage a démarré avec succès. À partir d’Android 12, createBond() nécessite l’autorisation BLUETOOTH_CONNECT et peut être rejeté par le système si l’application n’a pas d’accès Bluetooth en arrière-plan.
fun initiateBonding(device: BluetoothDevice) {
if (device.bondState == BluetoothDevice.BOND_NONE) {
val success = device.createBond()
if (success) {
Toast.makeText(context, "Bonding initié", Toast.LENGTH_SHORT)
}
}
}
Les développeurs d’applications mobiles rencontrent fréquemment des erreurs courantes lors du travail avec le bonding des dispositifs BLE. Un traitement incorrect des états de bonding peut entraîner des échecs de connexion, une impossibilité de réappairer ou une perte de données. Examinons les problèmes les plus fréquents et leurs solutions.
Après une mise à jour du firmware d’un dispositif BLE, ses clés de bonding peuvent être réinitialisées, mais le smartphone continue de stocker les anciennes clés (stale bonding). En tentant de se connecter, le Central essaie de restaurer la session avec l’ancien LTK, le Peripheral rejette la clé et la connexion échoue. La solution est de supprimer le bonding sur le smartphone via Settings > Bluetooth > Forget Device et d’effectuer un nouvel appairage.
Les puces BLE ont une limite sur le nombre d’enregistrements de bonding stockés. Pour les populaires puces Nordic nRF5x, la limite est de 8 à 20 enregistrements selon la configuration. Lorsque la limite est dépassée, le dispositif cesse d’accepter de nouveaux appairages. La solution est de supprimer les enregistrements de bonding inutilisés ou d’utiliser un trousseau de clés avec nettoyage prioritaire.
Lors de l’utilisation de la fonction de confidentialité (adresses MAC aléatoires), le dispositif change périodiquement son adresse. Si le Central n’a pas stocké l’IRK, il ne peut pas associer la nouvelle adresse aléatoire à un dispositif connu. La solution est d’implémenter correctement le stockage de l’IRK et de l’utiliser pour résoudre le RPA à chaque découverte de dispositif.
Questions fréquentes
Bonding en Bluetooth Low Energy est le processus de stockage des clés de cryptage (LTK, IRK, CSRK) après la fin d’une session de pairing, pour restaurer automatiquement une connexion sécurisée lors des reconnexions ultérieures sans ressaisie du PIN ni confirmation.
Pairing est la négociation temporaire de clés pour la session en cours, qui sont supprimées à la rupture de la connexion. Bonding inclut le processus complet de pairing plus le stockage des clés pour les connexions futures. Le bonding est nécessaire pour les dispositifs qui se reconnectent automatiquement — casques, montres, trackers de fitness.
Sur un iPhone, la suppression du bonding se fait via les paramètres système : Settings > Bluetooth > appuyez sur l’icône d’informations (i) à côté du dispositif > choisissez Forget This Device. Après cela, les clés de cryptage sont supprimées et la prochaine connexion nécessitera un nouvel appairage.
Le nombre de dispositifs liés dépend de la capacité de la mémoire non volatile de la puce BLE. Les smartphones peuvent stocker des centaines d’enregistrements, tandis que les périphériques BLE bon marché sont limités à 8-20 enregistrements. Lorsque la limite est dépassée, les anciens enregistrements sont écrasés ou le dispositif cesse d’accepter de nouveaux appairages.
Stale bonding est une situation où les clés de cryptage sur un dispositif (généralement le Peripheral) ont été réinitialisées (par exemple, après une mise à jour du firmware), tandis que le Central conserve encore les anciennes clés. En conséquence, la connexion ne peut pas être établie tant que l’utilisateur n’a pas supprimé le stale bonding via les paramètres Bluetooth et effectué un nouvel appairage.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi