Bonding (juftlash) Bluetooth Low Energy da ikki qurilma o'rtasida kriptografik kalitlarni o'chmaydigan xotirada saqlash bilan doimiy himoyalangan ulanish yaratish jarayonidir. Bondingdan so'ng qurilmalar foydalanuvchining PINni qayta kiritishi yoki tasdiqlashisiz avtomatik ravishda shifrlangan ulanishni tiklashi mumkin. Bluetooth SIG Core Specification v5.4 (2025) ga ko'ra, bonding mexanizmi avtomatik qayta ulanishni talab qiladigan qurilmalar uchun majburiydir — naushniklar, fitnes trekerlar, tibbiy sensorlar va IoT aksessuarlari.
Asosiy ma'lumotlar
Bonding — Bluetooth Low Energy da pairing jarayonining kengaytmasi bo'lib, unda qurilmalar keyingi ulanishlar uchun shifrlash kalitlarini saqlaydi. BLE standarti uchta xavfsizlik rejimini belgilaydi: Security Mode 1 (autentifikatsiyasiz shifrlash), Security Mode 2 (shifrlamasdan ma'lumotlarni imzolash) va Security Mode 3 (autentifikatsiya bilan shifrlash). Bonding kalitlarni qayta kelishmasdan ko'p marta ulanish talab qilinadigan shifrlash rejimlari uchun dolzarbdir.
Bondingning asosiy maqsadi qurilmalarning qayta ulanishida shifrlangan ulanishni avtomatik tiklash dir. Foydalanuvchi naushniklarni qutidan chiqarib taqqanda, bonding Bluetooth menyusida qurilmani qayta tanlamasdan smartfonga tezkor ulanishni ta'minlaydi. Apple Bluetooth Design Guidelines (2025) ga ko'ra, bonded qurilmalar aniqlangan paytdan boshlab 2 soniyadan ko'p bo'lmagan vaqt ichida ulanishi kerak.
Bonding paytida har bir qurilma kriptografik materiallar to'plamini saqlaydi: ulanishni shifrlash uchun Long Term Key (LTK), tasodifiy manzillarni hal qilish uchun Identity Resolving Key (IRK), ma'lumotlar imzolarini tekshirish uchun Connection Signature Resolving Key (CSRK). LTK — 128 bit uzunlikdagi asosiy kalit, pairing jarayonida yaratiladi va barcha keyingi shifrlangan seanslar uchun ishlatiladi.
| Kalit | Uzunlik | Vazifasi |
|---|---|---|
| LTK | 128 bit | Qayta ulanishdan keyin ma'lumotlarni shifrlash |
| IRK | 128 bit | Tasodifiy shaxsiy manzillarni (RPA) hal qilish |
| CSRK | 128 bit | Ma'lumotlarni imzolash va haqiqiyligini tekshirish |
Pairing — joriy aloqa seansini shifrlash uchun kalitlarni vaqtinchalik kelishishdir. Ulanish tugagach, shifrlash kalitlari o'chiriladi va keyingi ulanishda qayta pairing jarayoni talab qilinadi. Bonding pairingning barcha bosqichlarini o'z ichiga oladi, lekin qo'shimcha ravishda kalitlarni keyingi seanslar uchun saqlaydi. Deyarli barcha iste'mol Bluetooth qurilmalari (naushniklar, kolonkalar, soatlar) bondingdan foydalanadi, chunki usiz har bir ulanish PINni qayta kiritishni talab qiladi.
BLE spetsifikatsiyasi bo'yicha pairing jarayoni uch bosqichdan iborat. 1-bosqich — qurilma imkoniyatlarini almashish (IO capabilities, autentifikatsiyani qo'llab-quvvatlash). 2-bosqich — Short Term Key (STK) yoki LTK ni yaratish va almashish, ulanish usuliga qarab. 3-bosqich — kalit tashish: LTK, IRK, CSRK ni qurilmalar o'rtasida almashish. Agar qurilmalar 3-bosqichdan keyin kalitlarni saqlagan bo'lsa — bu bonding. Agar yo'q bo'lsa — bu oddiy pairing.
| Parametr | Pairing | Bonding |
|---|---|---|
| Kalitlarni saqlash | Saqlamaydi | NVRAM da saqlaydi |
| Avtomatik ulanish | Yo'q | Ha |
| Qayta PIN kiritish | Talab qilinadi | Talab qilinmaydi |
| Foydalanish | Epizodik ulanishlar | Doimiy qurilmalar |
Bonding jarayoni pairing muvaffaqiyatli tugaganidan so'ng, qurilmalardan biri kalitlarni saqlash so'rovini yuborganda boshlanadi. BLE da Central (odatda smartfon) va Peripheral (taqiladigan qurilma) 2-bosqichda o'rnatilgan himoyalangan kanal orqali kalitlarni almashadi. Muvaffaqiyatli kalit almashinuvidan so'ng, har bir qurilma ularni o'chmaydigan xotirada hamkorning MAC manzili yoki Identity Address bilan birga saqlaydi.
Central (iOS/Android) tomonda kalitlar Bluetooth tizim omborida saqlanadi. iOS avtomatik bonding boshqaruvi bilan Core Bluetooth tizim stekidan foydalanadi: birinchi ulanishda kalitlar qurilmaning NVRAM ida saqlanadi va keyingi ulanishlar avtomatik ravishda amalga oshiriladi. Dasturchi kalitlarni bevosita boshqarmaydi — Core Bluetooth tizim steki kalitlarni saqlashni qo'llab-quvvatlaydigan qurilmaga ulanishda bondingni avtomatik ravishda boshqaradi.
Qayta ulanishda Peripheral o'zining umumiy manzilini yoki Resolvable Private Address (RPA) ni o'z ichiga olgan reklama paketlarini yuboradi. Central paketni qabul qiladi, manzilni saqlangan bonded qurilmalar bilan solishtiradi va agar moslik topsa, saqlangan LTK yordamida seansni tiklashni boshlaydi. Agar LTK mos kelsa — shifrlangan ulanish qayta pairing siz o'rnatiladi.
BLE spetsifikatsiyasi bonding xavfsizlik darajasiga ta'sir qiluvchi bir nechta autentifikatsiya usullarini belgilaydi. Usulni tanlash qurilmalarning IO imkoniyatlariga bog'liq — ekran, klaviatura mavjudligi, raqamli taqqoslashni tasdiqlash imkoniyati. Xavfsiz bonding muhim bo'lmagan ilovalar uchun Just Works va Man-in-the-Middle hujumlaridan himoya talab qiladigan vazifalar uchun Numeric Comparison yoki Passkey Entry usulidan foydalanishni talab qiladi.
Just Works — autentifikatsiyasiz usul, qurilmalardan birida ekran yoki klaviatura bo'lmaganda qo'llaniladi. Shifrlash kalitlari ikkinchi qurilmaning haqiqiyligi tekshirilmasdan uzatiladi — harorat, puls). Just Works MITM hujumlariga moyil, shuning uchun faqat ma'lumotlarning buzilishi xavf tug'dirmaydigan qurilmalarda qo'llaniladi.
Numeric Comparison — ikkala qurilma olti xonali raqamni ko'rsatadigan va foydalanuvchi moslikni tasdiqlashi kerak bo'lgan autentifikatsiya usuli. Bu usul MITM hujumlaridan himoya qiladi va ekranli qurilmalar — aqlli soatlar, fitnes trekerlar, masofadan boshqarish pultlari uchun tavsiya etiladi. Tasdiqlashdan so'ng bonding maksimal ishonch darajasi bilan saqlanadi.
Passkey Entry qurilmalardan birida olti xonali PIN kodini kiritishni talab qiladi. Odatda kod bir qurilma tomonidan yaratiladi va unda ko'rsatiladi, foydalanuvchi esa uni ikkinchi qurilmada kiritadi. Usul tibbiy qurilmalar va IoT qulflari uchun qo'llaniladi, bu erda yuqori xavfsizlik talab qilinadi, lekin qurilmalardan birida Numeric Comparison uchun ekran yo'q.
Bondingni boshqarish — bu saqlangan juftlashgan qurilma kalitlarini ko'rish, o'chirish va ularga xizmat ko'rsatish jarayonidir. Mobil dasturlashda bonded qurilmalarning holatlarini to'g'ri boshqarish muhim, ayniqsa periferik qurilmaning sozlamalari qayta tiklanganda yoki uning dasturiy ta'minoti almashtirilganda. Peripheral da bonding kalitlari o'zgartirilganda, Central da eski kalitlarni o'chirish va qayta juftlashni amalga oshirish kerak.
iOS Core Bluetooth tizim steki orqali bonded qurilmalarni avtomatik boshqaradi. Dasturchining alohida bonded qurilmalarni ko'rish yoki o'chirish uchun to'g'ridan-to'g'ri API si yo'q — boshqarish tizim sozlamalari orqali amalga oshiriladi (Settings > Bluetooth > qurilma > Forget). Agar bondingni dasturiy tozalash kerak bo'lsa, ilova foydalanuvchini UIApplication.openSettingsURLString yordamida Bluetooth tizim sozlamalariga yo'naltirishi mumkin.
Android BluetoothAdapter klassi orqali bonded qurilmalar bilan ishlash uchun to'g'ridan-to'g'ri API ni taqdim etadi. getBondedDevices() metodi barcha juftlashgan qurilmalarning Set<BluetoothDevice> ini qaytaradi. Bondingni o'chirish uchun removeBond() metodi refleksiya yoki Android 12+ rasmiy BluetoothDevice.removeBond() API si orqali qo'llaniladi.
val adapter = BluetoothAdapter.getDefaultAdapter()
val bondedDevices: Set<BluetoothDevice> = adapter.getBondedDevices()
bondedDevices.forEach { device ->
Log.d("Bonding", "Bonded device: ${device.name}, ${device.address}")
}
Bondingni amalga oshirish Android tomonda BluetoothDevice.ACTION_BOND_STATE_CHANGED hodisalari uchun BroadcastReceiver ni to'g'ri qayta ishlashni talab qiladi. Qurilmaga birinchi ulanishda Android tizimi avtomatik ravishda bondingni boshlaydi, agar qurilma bu imkoniyatni qo'llab-quvvatlasa. Dasturchi uchta holatni boshqarishi kerak: BOND_NONE (juftlanmagan), BOND_BONDING (juftlash jarayoni), BOND_BONDED (juftlangan).
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 o'chirildi")
}
}
}
Android da bondingni boshlash uchun BluetoothDevice obyektida createBond() metodini chaqirish kerak. Metod boolean qiymatini qaytaradi — true, agar juftlash jarayoni muvaffaqiyatli boshlangan bo'lsa. Android 12 dan boshlab, createBond() BLUETOOTH_CONNECT ruxsatini talab qiladi va agar ilova Bluetooth ga fon kirishiga ega bo'lmasa, tizim tomonidan rad etilishi mumkin.
fun initiateBonding(device: BluetoothDevice) {
if (device.bondState == BluetoothDevice.BOND_NONE) {
val success = device.createBond()
if (success) {
Toast.makeText(context, "Bonding boshlandi", Toast.LENGTH_SHORT)
}
}
}
Mobil ilova dasturchilari ko'pincha BLE qurilmalarining bondingi bilan ishlashda odatiy xatolarga duch kelishadi. Bonding holatlarini noto'g'ri qayta ishlash ulanishdagi nosozliklarga, qayta juftlashning imkonsizligiga yoki ma'lumotlarning yo'qolishiga olib kelishi mumkin. Eng keng tarqalgan muammolar va ularning echimlarini ko'rib chiqamiz.
BLE qurilmasining dasturiy ta'minoti yangilanganidan so'ng uning bonding kalitlari qayta tiklanishi mumkin, ammo smartfon eskirgan kalitlarni (stale bonding) saqlashda davom etadi. Ulanishga urinishda Central eski LTK bilan seansni tiklashga harakat qiladi, Peripheral kalitni rad etadi va ulanish o'rnatilmaydi. Yechim — smartfonda Settings > Bluetooth > Forget Device orqali bondingni o'chiring va qayta juftlashni amalga oshiring.
BLE chiplari saqlangan bonding yozuvlari sonida cheklovga ega. Mashhur Nordic nRF5x chiplari uchun chegara konfiguratsiyaga qarab 8–20 yozuvni tashkil qiladi. Chegara oshib ketganda, qurilma yangi juftlashlarni qabul qilishni to'xtatadi. Yechim — foydalanilmayotgan bonding yozuvlarini o'chiring yoki ustuvor tozalash bilan kalitlar bog'lamidan foydalaning.
Privacy Feature (tasodifiy MAC manzillari) ishlatilganda, qurilma vaqti-vaqti bilan o'z manzilini o'zgartiradi. Agar Central IRK ni saqlamagan bo'lsa, u yangi tasodifiy manzilni taniqli qurilma bilan bog'lay olmaydi. Yechim — IRK ni saqlashni to'g'ri amalga oshiring va uni har bir qurilmani aniqlashda RPA ni hal qilish uchun ishlating.
Tez-tez beriladigan savollar
Bonding Bluetooth Low Energy da — pairing seansi tugaganidan keyin shifrlash kalitlarini (LTK, IRK, CSRK) saqlash jarayoni bo'lib, keyingi ulanishlarda PINni qayta kiritmasdan yoki tasdiqlamasdan himoyalangan ulanishni avtomatik tiklash uchun.
Pairing — joriy seans uchun kalitlarni vaqtinchalik kelishish, ular ulanish uzilganda o'chiriladi. Bonding to'liq pairing jarayonini o'z ichiga oladi va qo'shimcha ravishda kalitlarni kelajakdagi ulanishlar uchun saqlaydi. Bonding avtomatik ulanadigan qurilmalar — naushniklar, soatlar, fitnes trekerlar uchun talab qilinadi.
iPhone da bondingni o'chirish tizim sozlamalari orqali amalga oshiriladi: Settings > Bluetooth > qurilma yonidagi ma'lumot (i) belgisini bosing > Forget This Device ni tanlang. Shundan so'ng shifrlash kalitlari o'chiriladi va keyingi ulanishda qayta juftlash talab qilinadi.
Son BLE chipining o'chmaydigan xotira hajmiga bog'liq. Smartfonlar yuzlab yozuvlarni saqlashi mumkin, arzon BLE periferik qurilmalari esa 8–20 yozuv bilan cheklangan. Chegara oshib ketganda, eski yozuvlar ustiga yoziladi yoki qurilma yangi juftlashlarni qabul qilishni to'xtatadi.
Stale bonding — bir qurilmada (odatda Peripheral) shifrlash kalitlari qayta tiklangan (masalan, dasturiy ta'minot yangilanishi paytida), ammo Central da eski kalitlar qolgan holatdir. Natijada, foydalanuvchi Bluetooth sozlamalari orqali eskirgan bondingni o'chirib, qayta juftlashni amalga oshirmaguncha ulanish o'rnatilmaydi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.