Bonding (párování) v Bluetooth Low Energy je proces vytváření trvalého zabezpečeného spojení mezi dvěma zařízeními s uložením kryptografických klíčů v energeticky nezávislé paměti. Po bondingu mohou zařízení automaticky obnovovat šifrované spojení při opětovném připojení bez opakovaného zadávání PIN nebo potvrzení uživatelem. Podle Bluetooth SIG Core Specification v5.4 (2025) je mechanismus bondingu povinný pro zařízení vyžadující automatické opětovné připojení — sluchátka, fitness trackery, lékařské senzory a IoT příslušenství.
Hlavní body
Bonding — je rozšíření procesu pairing v Bluetooth Low Energy, při kterém zařízení ukládají šifrovací klíče pro následná připojení. Standard BLE definuje tři režimy zabezpečení: Security Mode 1 (šifrování bez autentizace), Security Mode 2 (podepisování dat bez šifrování) a Security Mode 3 (šifrování s autentizací). Bonding je relevantní pro režimy se šifrováním, kde je vyžadováno vícenásobné připojení bez opakovaného sjednávání klíčů.
Hlavním účelem bondingu je automatické obnovení šifrovaného spojení při opětovném připojení zařízení. Když uživatel vyjme sluchátka z pouzdra a nasadí je, bonding zajišťuje okamžité připojení k chytrému telefonu bez nutnosti znovu vybírat zařízení v nabídce Bluetooth. Podle Apple Bluetooth Design Guidelines (2025) by se spárovaná zařízení měla připojit za méně než 2 sekundy od okamžiku detekce.
Při bondingu každé zařízení ukládá sadu kryptografických materiálů: Long Term Key (LTK) pro šifrování spojení, Identity Resolving Key (IRK) pro rozlišení náhodných adres, Connection Signature Resolving Key (CSRK) pro ověřování podpisů dat. LTK je hlavní klíč délky 128 bitů, generovaný během procesu pairing a používaný pro všechny následující šifrované relace.
| Klíč | Délka | Účel |
|---|---|---|
| LTK | 128 bit | Šifrování dat po opětovném připojení |
| IRK | 128 bit | Rozlišení náhodných soukromých adres (RPA) |
| CSRK | 128 bit | Podepisování a ověřování pravosti dat |
Pairing — je dočasné sjednání klíčů pro šifrování aktuální komunikační relace. Když je spojení ukončeno, šifrovací klíče jsou smazány a při příštím připojení je vyžadován opakovaný proces pairing. Bonding zahrnuje všechny fáze pairingu, ale navíc ukládá klíče pro následující relace. Prakticky všechna spotřebitelská Bluetooth zařízení (sluchátka, reproduktory, hodinky) používají bonding, protože bez něj by každé připojení vyžadovalo opakované zadávání PIN kódu.
Proces pairing podle specifikace BLE se skládá ze tří fází. Fáze 1 — výměna schopností zařízení (IO capabilities, podpora autentizace). Fáze 2 — generování a výměna Short Term Key (STK) nebo LTK, v závislosti na metodě párování. Fáze 3 — transport klíčů: výměna LTK, IRK, CSRK mezi zařízeními. Pokud si zařízení uložila klíče po Fázi 3 — jedná se o bonding. Pokud ne — jedná se pouze o pairing.
| Parametr | Pairing | Bonding |
|---|---|---|
| Uložení klíčů | Neukládají se | Ukládají se v NVRAM |
| Automatické připojení | Ne | Ano |
| Opětovné zadání PIN | Vyžadováno | Není vyžadováno |
| Použití | Příležitostná připojení | Trvalá zařízení |
Proces bondingu je iniciován po úspěšném dokončení pairingu, když jedno ze zařízení odešle požadavek na uložení klíčů. V BLE Central (obvykle chytrý telefon) a Peripheral (nositelné zařízení) si vyměňují klíče přes zabezpečený kanál vytvořený ve Fázi 2. Po úspěšné výměně klíčů každé zařízení uloží klíče do energeticky nezávislé paměti spolu s MAC adresou nebo identitní adresou partnera.
Na straně Central (iOS/Android) jsou klíče uloženy v systémovém úložišti Bluetooth. iOS používá systémový stack Core Bluetooth s automatickou správou bondingu: při prvním párování se klíče uloží do NVRAM zařízení a následná připojení ke stejnému Peripheral probíhají automaticky. Vývojář nespravuje klíče přímo — systémový stack Core Bluetooth zpracovává bonding automaticky při navázání spojení se zařízením, které podporuje ukládání klíčů.
Při opětovném připojení Peripheral vysílá reklamní pakety obsahující buď svou veřejnou adresu, nebo Resolvable Private Address (RPA). Central paket přijme, porovná adresu s uloženými spárovanými zařízeními a pokud najde shodu, iniciuje obnovení relace pomocí uloženého LTK. Pokud LTK souhlasí — šifrované spojení se vytvoří bez opakovaného pairingu.
Specifikace BLE definuje několik metod autentizace, které ovlivňují úroveň zabezpečení bondingu. Volba metody závisí na IO capabilities zařízení — přítomnost displeje, klávesnice, možnost potvrzení numerického porovnání. Bezpečný bonding vyžaduje použití metody alespoň Just Works pro nekritické aplikace a Numeric Comparison nebo Passkey Entry pro úlohy vyžadující ochranu proti Man-in-the-Middle útokům.
Just Works — metoda bez autentizace, používaná když jedno ze zařízení nemá displej ani klávesnici. Šifrovací klíče se přenášejí bez ověření totožnosti druhého zařízení — teploměr, pulzní oxymetr). Just Works je zranitelný vůči MITM útokům, proto se používá pouze u zařízení, kde kompromitace dat nepředstavuje hrozbu.
Numeric Comparison — metoda autentizace, při které obě zařízení zobrazí šestimístné číslo a uživatel musí potvrdit shodu. Tato metoda poskytuje ochranu proti MITM útokům a doporučuje se pro zařízení s displejem — chytré hodinky, fitness trackery, dálkové ovladače. Po potvrzení se bonding ukládá s maximální úrovní důvěry.
Passkey Entry vyžaduje zadání šestimístného PIN kódu na jednom ze zařízení. Obvykle kód vygeneruje jedno zařízení a zobrazí jej, zatímco uživatel jej zadá na druhém. Metoda se používá pro zdravotnická zařízení a IoT zámky, kde je vyžadována vysoká úroveň zabezpečení, ale jedno ze zařízení nemá displej pro Numeric Comparison.
Správa bondingu — je proces prohlížení, mazání a údržby uložených klíčů spárovaných zařízení. Při vývoji mobilních aplikací je důležité správně zpracovávat stavy spárovaných zařízení, zejména při obnovení továrního nastavení periferního zařízení nebo výměně jeho firmware. Při změně bonding klíčů na Peripheral je nutné smazat staré klíče na Central a provést opětovné párování.
iOS automaticky spravuje spárovaná zařízení pomocí systémového Core Bluetooth stacku. Vývojář nemá přímé API pro prohlížení nebo mazání jednotlivých spárovaných zařízení — správa se provádí přes systémová nastavení (Settings > Bluetooth > zařízení > Forget). Pokud je nutné programově vyčistit bonding, aplikace může uživatele přesměrovat do systémových nastavení Bluetooth pomocí UIApplication.openSettingsURLString.
Android poskytuje přímé API pro práci se spárovanými zařízeními prostřednictvím třídy BluetoothAdapter. Metoda getBondedDevices() vrací Set<BluetoothDevice> všech spárovaných zařízení. Pro smazání bondingu se používá metoda removeBond() přes reflexi nebo od Android 12+ oficiální API BluetoothDevice.removeBond().
val adapter = BluetoothAdapter.getDefaultAdapter()
val bondedDevices: Set<BluetoothDevice> = adapter.getBondedDevices()
bondedDevices.forEach { device ->
Log.d("Bonding", "Bonded device: ${device.name}, ${device.address}")
}
Implementace bondingu na straně Androidu vyžaduje správné zpracování BroadcastReceiver pro události BluetoothDevice.ACTION_BOND_STATE_CHANGED. Při prvním připojení k zařízení systém Android automaticky iniciuje bonding, pokud zařízení tuto možnost podporuje. Vývojář musí zpracovávat tři stavy: BOND_NONE (nespárováno), BOND_BONDING (probíhá párování), BOND_BONDED (spárováno).
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", "Spojení odstraněno")
}
}
}
Pro iniciaci bondingu v Androidu je nutné zavolat metodu createBond() na objektu BluetoothDevice. Metoda vrací boolean — true, pokud byl proces párování úspěšně spuštěn. Od Androidu 12 vyžaduje createBond() oprávnění BLUETOOTH_CONNECT a může být systémem zamítnuta, pokud aplikace nemá přístup k Bluetooth na pozadí.
fun initiateBonding(device: BluetoothDevice) {
if (device.bondState == BluetoothDevice.BOND_NONE) {
val success = device.createBond()
if (success) {
Toast.makeText(context, "Probíhá bonding", Toast.LENGTH_SHORT)
}
}
}
Vývojáři mobilních aplikací se často setkávají s typickými chybami při práci s bondingem BLE zařízení. Nesprávné zpracování stavů bondingu může vést k selhání připojení, nemožnosti opětovného párování nebo ztrátě dat. Podívejme se na nejčastější problémy a jejich řešení.
Po aktualizaci firmware BLE zařízení mohou být jeho bonding klíče resetovány, ale chytrý telefon nadále uchovává zastaralé klíče (stale bonding). Při pokusu o připojení se Central snaží obnovit relaci se starým LTK, Peripheral klíč odmítne a spojení se nevytvoří. Řešení — smazat bonding v chytrém telefonu přes Settings > Bluetooth > Forget Device a provést opětovné párování.
BLE čipy mají omezení na počet ukládaných bonding záznamů. Pro populární čipy Nordic nRF5x je limit 8-20 záznamů v závislosti na konfiguraci. Při překročení limitu zařízení přestává přijímat nová párování. Řešení — mazat nepoužívané bonding záznamy nebo používat systém klíčů s prioritním čištěním.
Při použití Privacy Feature (náhodné MAC adresy) zařízení pravidelně mění svou adresu. Pokud Central neuložil IRK, nemůže přiřadit novou náhodnou adresu ke známému zařízení. Řešení — správně implementovat ukládání IRK a používat jej pro rozlišení RPA při každé detekci zařízení.
Často kladené otázky
Bonding v Bluetooth Low Energy — je proces ukládání šifrovacích klíčů (LTK, IRK, CSRK) po dokončení relace pairingu pro automatické obnovení zabezpečeného spojení při následných připojeních bez opakovaného zadávání PIN nebo potvrzení.
Pairing — je dočasné sjednání klíčů pro aktuální relaci, které se při ukončení spojení smažou. Bonding zahrnuje celý proces pairingu plus uložení klíčů pro budoucí připojení. Bonding vyžadují zařízení, která se automaticky znovu připojují — sluchátka, hodinky, fitness trackery.
Na iPhone se smazání bondingu provádí přes systémová nastavení: Settings > Bluetooth > klepněte na ikonu informací (i) vedle zařízení > vyberte Forget This Device. Poté jsou šifrovací klíče smazány a při příštím připojení bude vyžadováno opětovné párování.
Počet spárovaných zařízení závisí na velikosti energeticky nezávislé paměti BLE čipu. Chytré telefony mohou ukládat stovky záznamů, zatímco levná BLE periferní zařízení jsou omezena na 8-20 záznamů. Při překročení limitu se staré záznamy přepisují nebo zařízení přestává přijímat nová párování.
Stale bonding — situace, kdy šifrovací klíče na jednom zařízení (obvykle Peripheral) byly resetovány (např. při přehrání firmware), zatímco na Central zůstaly staré klíče. V důsledku toho se spojení nevytvoří, dokud uživatel nesmaže stale bonding přes nastavení Bluetooth a neprovede opětovné párování.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také