Bonding: що це, процес і безпека сполучення BLE

Автор: IT Sectr Опубліковано: 2026-07-16 Час читання: 10 хв

Bonding (сполучення) в Bluetooth Low Energy — це процес створення постійного захищеного з'єднання між двома пристроями зі збереженням криптографічних ключів в енергонезалежній пам'яті. Після bonding пристрої можуть автоматично відновлювати шифроване з'єднання при повторному підключенні без повторного введення PIN або підтвердження користувачем. За даними Bluetooth SIG Core Specification v5.4 (2025), механізм bonding є обов'язковим для пристроїв, що потребують автоматичного перепідключення — навушників, фітнес-трекерів, медичних датчиків та IoT-аксесуарів.

Головне

  • Bonding — це довготривале збереження ключів шифрування між BLE-пристроями після завершення сесії.
  • На відміну від pairing, bonding дозволяє автоматично відновлювати шифроване з'єднання без повторного підтвердження.
  • Процес bonding включає обмін ключами LTK, IRK, CSRK та їх збереження в пам'яті обох пристроїв.
  • iOS керує bonded пристроями через Settings > Bluetooth з можливістю видалення збережених ключів.
  • Для Android керування bonding здійснюється через BluetoothAdapter та API getBondedDevices().

Що таке Bonding в BLE?

Bonding — це розширення процесу pairing в Bluetooth Low Energy, при якому пристрої зберігають ключі шифрування для наступних підключень. Стандарт BLE визначає три режими безпеки: Security Mode 1 (шифрування без аутентифікації), Security Mode 2 (підпис даних без шифрування) та Security Mode 3 (шифрування з аутентифікацією). Bonding актуальний для режимів з шифруванням, коли потрібне багаторазове підключення без повторного узгодження ключів.

Навіщо потрібен Bonding

Основне призначення bonding — автоматичне відновлення шифрованого з'єднання при повторному підключенні пристроїв. Коли користувач дістає навушники з кейса та одягає їх, bonding забезпечує миттєве підключення до смартфону без необхідності повторного вибору пристрою в меню Bluetooth. За даними Apple Bluetooth Design Guidelines (2025), bonded пристрої повинні підключатися за час не більше 2 секунд з моменту виявлення.

Які дані зберігаються при Bonding

При bonding кожен пристрій зберігає набір криптографічних матеріалів: Long Term Key (LTK) для шифрування з'єднання, Identity Resolving Key (IRK) для розпізнавання випадкових адрес та Connection Signature Resolving Key (CSRK) для перевірки підписів даних. LTK — основний ключ довжиною 128 біт, що генерується в процесі pairing і використовується для всіх подальших шифрованих сесій.

КлючДовжинаПризначення
LTK128 бітШифрування даних після повторного підключення
IRK128 бітРозпізнавання випадкових приватних адрес (RPA)
CSRK128 бітПідпис та перевірка справжності даних

Bonding vs Pairing: в чому різниця

Pairing — це тимчасове узгодження ключів для шифрування поточної сесії зв'язку. Коли з'єднання завершується, ключі шифрування видаляються, і при наступному підключенні потрібен повторний процес pairing. Bonding включає всі етапи pairing, але додатково зберігає ключі для наступних сесій. Практично всі споживчі Bluetooth-пристрої (навушники, колонки, годинники) використовують bonding, оскільки без нього кожне підключення вимагало б повторного введення PIN-коду.

Три фази Pairing та Bonding

Процес pairing за специфікацією BLE складається з трьох фаз. Фаза 1 — обмін можливостями пристроїв (IO capabilities, підтримка аутентифікації). Фаза 2 — генерація та обмін Short Term Key (STK) або LTK, залежно від методу сполучення. Фаза 3 — транспорт ключів: обмін LTK, IRK, CSRK між пристроями. Якщо пристрої зберегли ключі після Фази 3 — це bonding. Якщо ні — це просто pairing.

ПараметрPairingBonding
Зберігання ключівНе зберігаютьсяЗберігаються в NVRAM
АвтопідключенняНіТак
Повторне введення PINПотрібнеНе потрібне
ВикористанняЕпізодичні підключенняПостійні пристрої

Як працює процес Bonding

Процес bonding ініціюється після успішного завершення pairing, коли один із пристроїв надсилає запит на збереження ключів. У BLE Central (зазвичай смартфон) та Peripheral (носимий пристрій) обмінюються ключами через захищений канал, встановлений на Фазі 2. Після успішного обміну ключами кожен пристрій зберігає їх в енергонезалежній пам'яті разом з MAC-адресою або Identity Address партнера.

Зберігання ключів на стороні Central

На стороні Central (iOS/Android) ключі зберігаються в системному сховищі Bluetooth. iOS використовує системний стек Core Bluetooth з автоматичним керуванням bonding: при першому сполученні ключі зберігаються в NVRAM пристрою, і наступні підключення до того ж Peripheral відбуваються автоматично. Розробник не керує ключами безпосередньо — системний стек Core Bluetooth обробляє bonding автоматично при встановленні з'єднання з пристроєм, який підтримує збереження ключів.

Відновлення з'єднання через Bonding

При повторному підключенні Peripheral надсилає рекламні пакети, що містять або його публічну адресу, або Resolvable Private Address (RPA). Central отримує пакет, зіставляє адресу зі збереженими bonded пристроями і, якщо знаходить збіг, ініціює відновлення сесії з використанням збереженого LTK. Якщо LTK збігається — шифроване з'єднання встановлюється без повторного pairing.

Методи аутентифікації при Bonding

Специфікація BLE визначає кілька методів аутентифікації, які впливають на рівень безпеки bonding. Вибір методу залежить від IO capabilities пристроїв — наявності дисплея, клавіатури, можливості підтвердження числового порівняння. Безпечний bonding вимагає використання методу не нижче Just Works для некритичних застосувань та Numeric Comparison або Passkey Entry для завдань, що потребують захисту від Man-in-the-Middle атак.

Just Works

Just Works — метод без аутентифікації, що використовується, коли один із пристроїв не має дисплея або клавіатури. Ключі шифрування передаються без перевірки справжності другого пристрою — температура, пульсометр. Just Works піддається MITM-атакам, тому застосовується тільки для пристроїв, де компрометація даних не становить загрози.

Numeric Comparison

Numeric Comparison — метод аутентифікації, при якому обидва пристрої відображають шестизначне число, і користувач повинен підтвердити збіг. Цей метод забезпечує захист від MITM-атак і рекомендується для пристроїв з дисплеєм — смарт-годинників, фітнес-трекерів, пультів керування. Після підтвердження bonding зберігається з максимальним рівнем довіри.

Passkey Entry

Passkey Entry вимагає введення шестизначного PIN-коду на одному з пристроїв. Зазвичай код генерується одним пристроєм і відображається на ньому, а користувач вводить його на другому. Метод застосовується для медичних пристроїв та IoT-замків, де потрібен високий рівень безпеки, але один із пристроїв не має дисплея для Numeric Comparison.

Керування bonded пристроями в iOS та Android

Керування bonding — це процес перегляду, видалення та обслуговування збережених ключів сполучених пристроїв. У мобільній розробці важливо коректно обробляти стани bonded пристроїв, особливо при скиданні налаштувань периферійного пристрою або заміні його прошивки. При зміні bonding-ключів на Peripheral необхідно видалити старі ключі на Central та виконати повторне сполучення.

Керування в iOS

iOS автоматично керує bonded пристроями через системний Core Bluetooth стек. Розробник не має прямого API для перегляду або видалення окремих bonded пристроїв — керування здійснюється через системні налаштування (Settings > Bluetooth > пристрій > Forget). Якщо необхідно програмно очистити bonding, додаток може відправити користувача в системні налаштування Bluetooth з використанням UIApplication.openSettingsURLString.

Керування в Android

Android надає прямий API для роботи з bonded пристроями через клас BluetoothAdapter. Метод getBondedDevices() повертає Set<BluetoothDevice> всіх сполучених пристроїв. Для видалення bonding використовується метод removeBond() через рефлексію або Android 12+ офіційний API BluetoothDevice.removeBond().

kotlin
val adapter = BluetoothAdapter.getDefaultAdapter()
val bondedDevices: Set<BluetoothDevice> = adapter.getBondedDevices()
bondedDevices.forEach { device ->
    Log.d("Bonding", "Bonded device: ${device.name}, ${device.address}")
}

Практичний приклад реалізації Bonding

Реалізація bonding на стороні Android вимагає коректної обробки BroadcastReceiver для подій BluetoothDevice.ACTION_BOND_STATE_CHANGED. При першому підключенні до пристрою система Android автоматично ініціює bonding, якщо пристрій підтримує цю можливість. Розробник повинен обробляти три стани: BOND_NONE (не сполучено), BOND_BONDING (процес сполучення), BOND_BONDED (сполучено).

kotlin
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 видалено")
        }
    }
}

Ініціювання Bonding на Android

Для ініціювання bonding на Android необхідно викликати метод createBond() на об'єкті BluetoothDevice. Метод повертає boolean — true, якщо процес сполучення запущено успішно. Починаючи з Android 12, createBond() вимагає дозвіл BLUETOOTH_CONNECT і може бути відхилений системою, якщо додаток не має фонового доступу до Bluetooth.

kotlin
fun initiateBonding(device: BluetoothDevice) {
    if (device.bondState == BluetoothDevice.BOND_NONE) {
        val success = device.createBond()
        if (success) {
            Toast.makeText(context, "Bonding ініційовано", Toast.LENGTH_SHORT)
        }
    }
}

Типові помилки при роботі з Bonding

Розробники мобільних додатків часто стикаються з типовими помилками при роботі з bonding BLE-пристроїв. Некоректна обробка станів bonding може призвести до збоїв підключення, неможливості повторного сполучення або втрати даних. Розглянемо найбільш часті проблеми та їх рішення.

Скидання прошивки Peripheral та stale bonding

Після оновлення прошивки BLE-пристрою його bonding-ключі можуть бути скинуті, але смартфон продовжує зберігати застарілі ключі (stale bonding). При спробі підключення Central намагається відновити сесію зі старим LTK, Peripheral відхиляє ключ, і з'єднання не встановлюється. Рішення — видалити bonding на смартфоні через Settings > Bluetooth > Forget Device та виконати повторне сполучення.

Ліміт кількості bonded пристроїв

BLE-чипи мають обмеження на кількість збережених bonding-записів. Для популярних чипів Nordic nRF5x ліміт становить 8-20 записів залежно від конфігурації. При перевищенні ліміту пристрій перестає приймати нові сполучення. Рішення — видаляти невикористовувані bonding-записи або використовувати зв'язку ключів з пріоритетним очищенням.

Проблеми з Privacy Feature

При використанні Privacy Feature (випадкові MAC-адреси) пристрій періодично змінює свою адресу. Якщо Central не зберіг IRK, він не може зіставити нову випадкову адресу з відомим пристроєм. Рішення — правильно реалізувати зберігання IRK та використовувати його для розпізнавання RPA при кожному виявленні пристрою.

Часто задавані питання

Що таке Bonding в BLE?

Bonding в Bluetooth Low Energy — це процес збереження ключів шифрування (LTK, IRK, CSRK) після завершення сесії pairing для автоматичного відновлення захищеного з'єднання при наступних підключеннях без повторного введення PIN або підтвердження.

Чим Bonding відрізняється від Pairing?

Pairing — це тимчасове узгодження ключів для поточної сесії, які видаляються при розриві з'єднання. Bonding включає повний процес pairing плюс збереження ключів для майбутніх підключень. Bonding потрібен пристроям, які автоматично перепідключаються — навушникам, годинникам, фітнес-трекерам.

Як видалити Bonding на iPhone?

На iPhone видалення bonding виконується через системні налаштування: Settings > Bluetooth > натисніть значок інформації (i) поруч із пристроєм > виберіть Forget This Device. Після цього ключі шифрування видаляються, і при наступному підключенні знадобиться повторне сполучення.

Скільки пристроїв може бути в Bonding?

Кількість bonded пристроїв залежить від обсягу енергонезалежної пам'яті BLE-чипа. Смартфони можуть зберігати сотні записів, в той час як бюджетні BLE-периферійні пристрої обмежені 8-20 записами. При перевищенні ліміту старі записи перезаписуються або пристрій перестає приймати нові сполучення.

Що таке stale bonding?

Stale bonding — ситуація, коли ключі шифрування на одному пристрої (зазвичай Peripheral) були скинуті (наприклад, при перепрошивці), а на Central залишилися старі ключі. В результаті з'єднання не встановлюється до тих пір, поки користувач не видалить stale bonding через налаштування Bluetooth та не виконає повторне сполучення.

Підсумки

  • Bonding — ключовий механізм BLE для автоматичного відновлення шифрованих з'єднань без повторного введення PIN.
  • Pairing і bonding відрізняються збереженням ключів: при pairing ключі живуть одну сесію, при bonding — зберігаються постійно.
  • Процес bonding включає обмін та збереження трьох типів ключів: LTK (шифрування), IRK (ідентифікація), CSRK (підпис).
  • Метод аутентифікації Numeric Comparison забезпечує захист від MITM-атак і рекомендується для пристроїв з дисплеєм.
  • iOS керує bonding автоматично через Core Bluetooth, Android надає API createBond() та removeBond().
  • Stale bonding після перепрошивки Peripheral — часта проблема, яка вирішується видаленням пристрою зі списку Bluetooth.
  • Кількість bonded пристроїв на периферійному BLE-чипі обмежена 8-20 записами залежно від моделі.

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також