Bonding (párosítás) a Bluetooth Low Energy-ben a tartós védett kapcsolat létrehozásának folyamata két eszköz között a kriptográfiai kulcsok nem felejtő memóriában történő tárolásával. Bonding után az eszközök automatikusan helyreállíthatják a titkosított kapcsolatot újracsatlakozáskor a PIN újbóli megadása vagy a felhasználó megerősítése nélkül. A Bluetooth SIG Core Specification v5.4 (2025) szerint a bonding mechanizmus kötelező az automatikus újracsatlakozást igénylő eszközök számára — fejhallgatók, fitneszkövetők, orvosi érzékelők és IoT tartozékok.
Főbb pontok
Bonding — a pairing folyamat kiterjesztése a Bluetooth Low Energy-ben, ahol az eszközök elmentik a titkosítási kulcsokat a későbbi kapcsolatokhoz. A BLE szabvány három biztonsági módot határoz meg: Security Mode 1 (titkosítás hitelesítés nélkül), Security Mode 2 (adat-aláírás titkosítás nélkül) és Security Mode 3 (titkosítás hitelesítéssel). A bonding azoknál a titkosításos módoknál releváns, ahol többszöri csatlakozás szükséges a kulcsok újratárgyalása nélkül.
A bonding fő célja a titkosított kapcsolat automatikus helyreállítása az eszközök újracsatlakozásakor. Amikor a felhasználó kiveszi a fejhallgatót a tokjából és felteszi, a bonding biztosítja az azonnali csatlakozást a smartphone-hoz anélkül, hogy újra ki kellene választani az eszközt a Bluetooth menüben. Az Apple Bluetooth Design Guidelines (2025) szerint a bonded eszközöknek legfeljebb 2 másodpercen belül kell csatlakozniuk az észleléstől számítva.
A bonding során minden eszköz elment egy kriptográfiai anyagokból álló készletet: Long Term Key (LTK) a kapcsolat titkosításához, Identity Resolving Key (IRK) a véletlenszerű címek feloldásához, Connection Signature Resolving Key (CSRK) az adat-aláírások ellenőrzéséhez. LTK — a 128 bites főkulcs, amely a pairing folyamat során generálódik és az összes későbbi titkosított munkamenethez használatos.
| Kulcs | Hossz | Cél |
|---|---|---|
| LTK | 128 bit | Adatok titkosítása újracsatlakozás után |
| IRK | 128 bit | Véletlenszerű privát címek (RPA) feloldása |
| CSRK | 128 bit | Adatok aláírása és hitelességük ellenőrzése |
Pairing — a kulcsok átmeneti egyeztetése az aktuális kommunikációs munkamenet titkosításához. Amikor a kapcsolat véget ér, a titkosítási kulcsok törlődnek, és a következő csatlakozáskor újabb pairing folyamatra van szükség. Bonding magában foglalja a pairing összes fázisát, de emellett elmenti a kulcsokat a későbbi munkamenetekhez. Gyakorlatilag az összes fogyasztói Bluetooth-eszköz (fejhallgatók, hangszórók, órák) bondingot használ, mert enélkül minden csatlakozáshoz újra meg kellene adni a PIN-kódot.
A pairing folyamata a BLE specifikáció szerint három fázisból áll. 1. fázis — az eszköz képességeinek cseréje (IO capabilities, hitelesítés támogatása). 2. fázis — a Short Term Key (STK) vagy LTK generálása és cseréje, a csatlakozási módszertől függően. 3. fázis — kulcsszállítás: LTK, IRK, CSRK cseréje az eszközök között. Ha az eszközök elmentették a kulcsokat a 3. fázis után — ez bonding. Ha nem — ez csak pairing.
| Paraméter | Pairing | Bonding |
|---|---|---|
| Kulcsok tárolása | Nem tárolódnak | NVRAM-ban tárolódnak |
| Automatikus csatlakozás | Nem | Igen |
| PIN újbóli megadása | Szükséges | Nem szükséges |
| Használat | Alkalmi kapcsolatok | Állandó eszközök |
A bonding folyamata a pairing sikeres befejezése után indul, amikor az egyik eszköz kérelmet küld a kulcsok mentésére. A BLE-ben a Central (általában smartphone) és a Peripheral (hordható eszköz) a 2. fázisban létrehozott védett csatornán keresztül cserél kulcsokat. A sikeres kulcscsere után minden eszköz elmenti azokat a nem felejtő memóriába a partner MAC-címével vagy Identity Address-ével együtt.
A Central (iOS/Android) oldalán a kulcsok a Bluetooth rendszertárolójában kerülnek tárolásra. Az iOS a Core Bluetooth rendszervermet használja automatikus bonding kezeléssel: az első csatlakozáskor a kulcsok az eszköz NVRAM-jába kerülnek, és a későbbi csatlakozások ugyanahhoz a Peripheralhez automatikusan történnek. A fejlesztő nem kezeli közvetlenül a kulcsokat — a Core Bluetooth rendszerverem automatikusan feldolgozza a bondingot a kulcsmentést támogató eszközhöz való csatlakozáskor.
Újracsatlakozáskor a Peripheral reklámcsomagokat küld, amelyek vagy a nyilvános címét, vagy Resolvable Private Address-t (RPA) tartalmaznak. A Central fogadja a csomagot, összeveti a címet a tárolt bonded eszközökkel, és ha egyezést talál, elindítja a munkamenet helyreállítását a tárolt LTK segítségével. Ha az LTK egyezik — a titkosított kapcsolat létrejön ismételt pairing nélkül.
A BLE specifikáció számos hitelesítési módszert határoz meg, amelyek befolyásolják a bonding biztonsági szintjét. A módszer választása az eszközök IO képességeitől függ — a kijelző, billentyűzet meglététől, a számösszehasonlítás megerősítésének lehetőségétől. A biztonságos bonding legalább Just Works módszer használatát igényli a nem kritikus alkalmazásokhoz és Numeric Comparison vagy Passkey Entry módszert a Man-in-the-Middle támadások elleni védelmet igénylő feladatokhoz.
Just Works — hitelesítés nélküli módszer, amelyet akkor használnak, ha az egyik eszköz nem rendelkezik kijelzővel vagy billentyűzettel. A titkosítási kulcsok a második eszköz hitelességének ellenőrzése nélkül kerülnek továbbításra — hőmérséklet, pulzus). A Just Works sebezhető az MITM támadásokkal szemben, ezért csak olyan eszközöknél alkalmazzák, ahol az adatok kompromittálása nem jelent veszélyt.
Numeric Comparison — hitelesítési módszer, amelyben mindkét eszköz egy hatjegyű számot jelenít meg, és a felhasználónak meg kell erősítenie az egyezést. Ez a módszer védelmet nyújt az MITM támadások ellen, és kijelzővel rendelkező eszközökhöz ajánlott — okosórák, fitneszkövetők, távvezérlők. Megerősítés után a bonding maximális bizalmi szinttel kerül mentésre.
Passkey Entry megköveteli egy hatjegyű PIN-kód megadását az egyik eszközön. Általában a kódot az egyik eszköz generálja és jeleníti meg, a felhasználó pedig beírja a második eszközön. A módszert orvosi eszközökön és IoT-zárakon alkalmazzák, ahol magas biztonsági szint szükséges, de az egyik eszköz nem rendelkezik kijelzővel a Numeric Comparisonhoz.
A bonding kezelése — a tárolt párosított eszközkulcsok megtekintésének, törlésének és karbantartásának folyamata. A mobilfejlesztésben fontos a bonded eszközök állapotának helyes kezelése, különösen a perifériás eszköz beállításainak visszaállításakor vagy a firmware cseréjekor. A bonding-kulcsok Peripheral-en történő megváltozásakor a régi kulcsokat a Central-on törölni kell, és újra kell párosítani.
Az iOS automatikusan kezeli a bonded eszközöket a Core Bluetooth rendszervermen keresztül. A fejlesztőnek nincs közvetlen API-ja az egyes bonded eszközök megtekintéséhez vagy törléséhez — a kezelés a rendszerbeállításokon keresztül történik (Settings > Bluetooth > eszköz > Forget). Ha programozottan kell törölni a bondingot, az alkalmazás átirányíthatja a felhasználót a Bluetooth rendszerbeállításokhoz a UIApplication.openSettingsURLString használatával.
Az Android közvetlen API-t biztosít a bonded eszközökkel való munkához a BluetoothAdapter osztályon keresztül. A getBondedDevices() metódus az összes párosított eszköz Set<BluetoothDevice> típusú halmazát adja vissza. A bonding törléséhez a removeBond() metódust használják reflexión vagy Android 12+ hivatalos BluetoothDevice.removeBond() API-n keresztül.
val adapter = BluetoothAdapter.getDefaultAdapter()
val bondedDevices: Set<BluetoothDevice> = adapter.getBondedDevices()
bondedDevices.forEach { device ->
Log.d("Bonding", "Bonded device: ${device.name}, ${device.address}")
}
A bonding megvalósítása Android oldalon a BluetoothDevice.ACTION_BOND_STATE_CHANGED események BroadcastReceiver-ének helyes kezelését igényli. Az eszközhöz való első csatlakozáskor az Android rendszer automatikusan elindítja a bondingot, ha az eszköz támogatja ezt a képességet. A fejlesztőnek három állapotot kell kezelnie: BOND_NONE (nincs párosítva), BOND_BONDING (párosítási folyamat), BOND_BONDED (párosítva).
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", "Bond eltávolítva")
}
}
}
A bonding elindításához Androidban a createBond() metódust kell meghívni a BluetoothDevice objektumon. A metódus egy boolean értéket ad vissza — true, ha a párosítási folyamat sikeresen elindult. Android 12-től kezdve a createBond() BLUETOOTH_CONNECT engedélyt igényel, és a rendszer elutasíthatja, ha az alkalmazásnak nincs háttér-hozzáférése a Bluetooth-hoz.
fun initiateBonding(device: BluetoothDevice) {
if (device.bondState == BluetoothDevice.BOND_NONE) {
val success = device.createBond()
if (success) {
Toast.makeText(context, "Bonding elindítva", Toast.LENGTH_SHORT)
}
}
}
A mobilalkalmazás-fejlesztők gyakran találkoznak tipikus hibákkal a BLE-eszközök bondingjának használata során. A bonding állapotainak helytelen kezelése kapcsolási hibákhoz, az újrapárosítás lehetetlenségéhez vagy adatvesztéshez vezethet. Tekintsük át a leggyakoribb problémákat és megoldásaikat.
A BLE-eszköz firmware frissítése után a bonding kulcsai visszaállíthatódhatnak, de a smartphone továbbra is tárolja az elavult kulcsokat (stale bonding). Csatlakozási kísérletkor a Central megpróbálja helyreállítani a munkamenetet a régi LTK-val, a Peripheral elutasítja a kulcsot, és a kapcsolat nem jön létre. Megoldás — törölje a bondingot a smartphone-on a Settings > Bluetooth > Forget Device menün keresztül, és végezzen új párosítást.
A BLE chipek korlátozzák a tárolható bonding rekordok számát. A népszerű Nordic nRF5x chipek esetén a korlát 8–20 rekord, konfigurációtól függően. A korlát túllépésekor az eszköz nem fogad el új párosításokat. Megoldás — törölje a nem használt bonding rekordokat, vagy használjon prioritásos tisztítással rendelkező kulcsláncot.
A Privacy Feature (véletlenszerű MAC-címek) használatakor az eszköz időszakosan megváltoztatja a címét. Ha a Central nem mentette el az IRK-t, nem tudja összekapcsolni az új véletlenszerű címet egy ismert eszközzel. Megoldás — implementálja helyesen az IRK tárolását, és használja azt az RPA feloldásához minden eszközészleleléskor.
Gyakran ismételt kérdések
Bonding a Bluetooth Low Energy-ben — a titkosítási kulcsok (LTK, IRK, CSRK) mentésének folyamata a pairing munkamenet befejezése után a védett kapcsolat automatikus helyreállításához a későbbi csatlakozásoknál a PIN újbóli megadása vagy megerősítés nélkül.
Pairing — a kulcsok átmeneti egyeztetése az aktuális munkamenethez, amelyek a kapcsolat megszakadásakor törlődnek. Bonding magában foglalja a teljes pairing folyamatot és a kulcsok mentését a jövőbeli kapcsolatokhoz. Bondingra van szükség az automatikusan csatlakozó eszközökhöz — fejhallgatók, órák, fitneszkövetők.
iPhone esetén a bonding törlése a rendszerbeállításokon keresztül történik: Settings > Bluetooth > érintse meg az információ ikont (i) az eszköz mellett > válassza a Forget This Device lehetőséget. Ezt követően a titkosítási kulcsok törlődnek, és a következő csatlakozáskor újra párosítani kell.
A bonded eszközök száma a BLE chip nem felejtő memóriájának méretétől függ. A smartphone-ok több száz rekordot tárolhatnak, míg az olcsó BLE perifériás eszközök 8–20 rekordra korlátozottak. A korlát túllépésekor a régi rekordok felülíródnak vagy az eszköz nem fogad el új párosításokat.
Stale bonding — az az állapot, amikor a titkosítási kulcsok az egyik eszközön (általában Peripheral) visszaállítódtak (például átflasheléskor), de a Central-on megmaradtak a régi kulcsok. Ennek eredményeként a kapcsolat nem jön létre, amíg a felhasználó el nem távolítja az elavult bondingot a Bluetooth beállításokon keresztül és újra nem párosít.
Összefoglaló
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is