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 removed")
        }
    }
}

Инициирование 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 initiated", 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 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

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