Bonding (جفتسازی) در Bluetooth Low Energy فرآیند ایجاد یک اتصال دائمی و ایمن بین دو دستگاه با ذخیرهسازی کلیدهای کریپتوگرافیک در حافظه غیرفرار است. پس از bonding، دستگاهها میتوانند بدون ورود مجدد PIN یا تایید کاربر، اتصال شیفرهشده را در اتصال مجدد بهطور خودکار بازیابی کنند. بر اساس Bluetooth SIG Core Specification v5.4 (2025)، مکانیسم bonding برای دستگاههایی که نیازمند اتصال مجدد خودکار هستند اجباری است — گوشیهای بیسیم، ردگیرهای تناسند، حسگرهای پزشکی و لوازم جانبی IoT.
نکات کلیدی
Bonding — افزایشی از فرآیند pairing در Bluetooth Low Energy است که در آن دستگاهها کلیدهای شیفرینگ را برای اتصالهای بعدی ذخیره میکنند. استاندارد BLE سه حالت امنیتی را تعریف میکند: Security Mode 1 (شیفرینگ بدون احراز هویت)، Security Mode 2 (امضای دادهها بدون شیفرینگ) و Security Mode 3 (شیفرینگ با احراز هویت). Bonding در حالاتی با شیفرینگ که نیازمند اتصال چندگانه بدون توافق مجدد کلید هستند مورد استفاده است.
هدف اصلی bonding بازیابی خودکار اتصال شیفرهشده در اتصال مجدد دستگاهها است. کاربر گوشیهای بیسیم را از قابی خارج کرده و میگذارد، bonding اتصال فوری به سمارتفون را بدون نیاز به انتخاب مجدد دستگاه در منوی Bluetooth فراهم میکند. بر اساس Apple Bluetooth Design Guidelines (2025)، دستگاههای bonded باید طی زمان حداکثر 2 ثانیه از لحظه کشف اتصال برقرار کنند.
در طول bonding، هر دستگاه یک مجموعه از مواد کریپتوگرافیک را ذخیره میکند: Long Term Key (LTK) برای شیفرینگ اتصال، Identity Resolving Key (IRK) برای حل آدرسهای تصادفی، Connection Signature Resolving Key (CSRK) برای بررسی امضای دادهها. LTK — کلید اصلی با طول 128 بیت، تولیدشده در فرآیند pairing و مورد استفاده در تمامی جلسات شیفرهشده بعدی.
| کلید | طول | کاربرد |
|---|---|---|
| LTK | 128 بیت | شیفرینگ دادهها پس از اتصال مجدد |
| IRK | 128 بیت | حل آدرسهای تصادفی خصوصی (RPA) |
| CSRK | 128 بیت | امضای دادهها و بررسی اصالت |
Pairing — توافق موقتی کلیدها برای شیفرینگ جلسه ارتباطی فعلی است. وقتی اتصال پایان مییابد، کلیدهای شیفرینگ حذف میشوند و در اتصال بعدی فرآیند pairing مجدد مورد نیاز است. Bonding تمامی مراحل pairing را شامل شده و بهطور افزایشی کلیدها را برای جلسات بعدی ذخیره میکند. تقریباً تمامی دستگاههای Bluetooth مصرفی (گوشیهای بیسیم، بلندگوها، ساعتها) از bonding استفاده میکنند، زیرا بدون آن هر اتصال نیازمند ورود مجدد PIN میشد.
فرآیند pairing بر اساس مشخصات BLE از سه مرحله تشکیل شده است. مرحله 1 — تبادل قابلیتهای دستگاه (IO capabilities، پشتیبانی احراز هویت). مرحله 2 — تولید و تبادل Short Term Key (STK) یا LTK، بسته به روش اتصال. مرحله 3 — حمل کلید: تبادل LTK، IRK، CSRK بین دستگاهها. اگر دستگاهها کلیدها را پس از مرحله 3 ذخیره کردهاند — این bonding است. اگر نه — صرفاً pairing.
| پارامتر | Pairing | Bonding |
|---|---|---|
| ذخیرهسازی کلیدها | ذخیره نمیشوند | در NVRAM ذخیره میشوند |
| اتصال خودکار | خیر | بله |
| ورود مجدد PIN | نیاز است | نیاز نیست |
| کاربرد | اتصالهای گزرگی | دستگاههای دائمی |
فرآیند bonding پس از پایان موفقیتآمیز pairing آغاز میشود، وقتی یکی از دستگاهها درخواست ذخیره کلیدها را ارسال میکند. در BLE، Central (معمولاً سمارتفون) و Peripheral (دستگاه قابل پوشیدن) از طریق یک کانال ایمن که در مرحله 2 ایجاد شده است، کلیدها را مبادله میکنند. پس از تبادل موفق کلید، هر دستگاه آنها را در حافظه غیرفرار همراه با آدرس MAC یا Identity Address شریک ذخیره میکند.
در طرف Central (iOS/Android)، کلیدها در مخزن سیستمی Bluetooth ذخیره میشوند. iOS از پیشوان Core Bluetooth با مدیریت خودکار bonding استفاده میکند: در اولین اتصال، کلیدها در NVRAM دستگاه ذخیره میشوند و اتصالات بعدی به همان Peripheral بهطور خودکار انجام میشود. توسعهدهنده کلیدها را مستقیماً مدیریت نمیکند — پیشوان Core Bluetooth bonding را در طول اتصال با دستگاهی که از ذخیره کلید پشتیبانی میکند، بهطور خودکار انجام میدهد.
در اتصال مجدد، Peripheral بستههای تبلیغاتی را ارسال میکند که یا شامل آدرس عمومی آن یا Resolvable Private Address (RPA) است. Central بسته را دریافت کرده، آدرس را با دستگاههای bonded ذخیرهشده مقایسه میکند و اگر مطابقی پیدا کند، بازیابی جلسه را با استفاده از LTK ذخیرهشده آغاز میکند. اگر LTK مطابقت داشته باشد — اتصال شیفرهشده بدون pairing مجدد برقرار میشود.
مشخصات BLE چندین روش احراز هویت را تعریف میکند که بر سطح امنیت bonding تاثیر میگذارند. انتخاب روش بستگی به قابلیتهای IO دستگاهها دارد — وجود نمایشگر، صفحه کلید، امکان تایید مقایسه عددی. Bonding ایمن نیازمند استفاده از روش حداقل Just Works برای کاربردهای غیرحیاتی و Numeric Comparison یا Passkey Entry برای کارهایی که نیازمند حفاظت در برابر حملات Man-in-the-Middle هستند.
Just Works — روش بدون احراز هویت، در صورتی استفاده میشود که یکی از دستگاهها نمایشگر یا صفحه کلید نداشته باشد. کلیدهای شیفرینگ بدون بررسی اصالت دستگاه دوم انتقال مییابند — دما، ضربان قلب). Just Works در معرض حملات MITM قرار دارد، بنابراین فقط در دستگاههایی که افشای دادهها خطری ندارد استفاده میشود.
Numeric Comparison — روش احراز هویتی که در آن هر دو دستگاه یک عدد شش رقمی نمایش میدهند و کاربر باید یکسانی آنها را تایید کند. این روش حفاظت در برابر حملات MITM را فراهم میکند و برای دستگاههای با نمایشگر توصیه میشود — ساعتهای هوشمند، ردگیرهای تناسند، کنترلهای مجازی. پس از تایید، bonding با بیشترین سطح اعتماد ذخیره میشود.
Passkey Entry نیازمند ورود یک PIN شش رقمی در یکی از دستگاهها است. معمولاً کد توسط یک دستگاه تولید و روی آن نمایش داده میشود، و کاربر آن را در دستگاه دوم وارد میکند. این روش برای دستگاههای پزشکی و قفلهای IoT که نیازمند سطح بالای امنیت هستند استفاده میشود، اما یکی از دستگاهها نمایشگر برای Numeric Comparison ندارد.
مدیریت bonding — فرآیند مشاهده، حذف و نگهداری کلیدهای ذخیرهشده دستگاههای جفتشده است. در توسعه موبایل، مدیریت صحیح وضعیتهای bonded از اهمیت بالایی برخوردار است، بهویژه در صورت بازنشانی تنظیمات دستگاه پریفریال یا تغییر سیستمعامل آن. در صورت تغییر کلیدهای bonding در Peripheral، حذف کلیدهای قدیمی در Central و اجرای مجدد جفتسازی ضروری است.
iOS از طریق پیشوان سیستمی Core Bluetooth دستگاههای bonded را بهطور خودکار مدیریت میکند. توسعهدهنده API مستقیمی برای مشاهده یا حذف دستگاههای bonded ندارد — مدیریت از طریق تنظیمات سیستم انجام میشود (Settings > Bluetooth > دستگاه > Forget). اگر به صورت برنامهای پاک کردن bonding ضروری است، برنامه میتواند کاربر را به تنظیمات سیستم Bluetooth با استفاده از UIApplication.openSettingsURLString هدایت کند.
Android API مستقیم برای کار با دستگاههای bonded از طریق کلاس BluetoothAdapter فراهم میکند. روش getBondedDevices() یک Set<BluetoothDevice> از تمامی دستگاههای جفتشده بازمیگرداند. برای حذف bonding از روش removeBond() از طریق بازتاب یا Android 12+ 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}")
}
پیادهسازی bonding در طرف Android نیازمند پردازش صحیح BroadcastReceiver برای رویدادهای BluetoothDevice.ACTION_BOND_STATE_CHANGED است. در اولین اتصال به دستگاه، سیستم Android بهطور خودکار bonding را آغاز میکند، اگر دستگاه از این امکان پشتیبانی کند. توسعهدهنده باید سه وضعیت را مدیریت کند: BOND_NONE (جفت نشده)، BOND_BONDING (فرآیند جفتسازی)، BOND_BONDED (جفت شده).
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، باید روش createBond() را بر شیئ BluetoothDevice فراخوان کنید. روش یک boolean بازمیگرداند — true اگر فرآیند جفتسازی با موفقیت آغاز شده باشد. از Android 12 به بعد، createBond() نیازمند مجوز BLUETOOTH_CONNECT است و ممکن است توسط سیستم رد شود اگر برنامه دسترسی پسزمینه به Bluetooth نداشته باشد.
fun initiateBonding(device: BluetoothDevice) {
if (device.bondState == BluetoothDevice.BOND_NONE) {
val success = device.createBond()
if (success) {
Toast.makeText(context, "Bonding آغاز شد", Toast.LENGTH_SHORT)
}
}
}
توسعهدهندگان نرمافزارهای موبایل معمولاً با خطاهای رایج در کار با bonding دستگاههای BLE مواجه میشوند. پردازش نادرست وضعیتهای bonding میتواند منجر به مشکلات اتصال، عدم امکان جفتسازی مجدد یا از دست رفتن دادهها شود. بیشتر مشکلات رایج و راهحلهای آنها را بررسی میکنیم.
پس از بهروزرسانی سیستمعامل دستگاه BLE، کلیدهای bonding آن ممکن است بازنشانی شوند، اما سمارتفون به ذخیره کلیدهای منقضی (stale bonding) ادامه میدهد. در تلاش برای اتصال، Central سعی میکند جلسه را با LTK قدیمی بازیابی کند، Peripheral کلید را رد میکند و اتصال برقرار نمیشود. راهحل — حذف bonding در سمارتفون از طریق Settings > Bluetooth > Forget Device و انجام مجدد جفتسازی.
تراشهای BLE محدودیتی در تعداد ثبتهای bonding دارند. برای تراشهای محبوب Nordic nRF5x، محدودیت بستگی به پیکربندی 8–20 ثبت است. پس از تجاوز محدودیت، دستگاه از پذیرش جفتسازیهای جدید خودداری میکند. راهحل — حذف ثبتهای bonding استفادهنشده یا استفاده از زنجیره کلید با پاکسازی اولویتدار.
در صورت استفاده از Privacy Feature (آدرسهای MAC تصادفی)، دستگاه بهطور دورهای آدرس خود را تغییر میدهد. اگر Central IRK را ذخیره نکرده باشد، نمیتواند آدرس تصادفی جدید را با دستگاه شناختهشده مطابقت دهد. راهحل — ذخیره IRK را به صورت صحیح پیادهسازی کرده و از آن برای حل RPA در هر کشف دستگاه استفاده کنید.
پرسشهای متداول
Bonding در Bluetooth Low Energy فرآیند ذخیره کلیدهای شیفرینگ (LTK، IRK، CSRK) پس از پایان جلسه pairing برای بازیابی خودکار اتصال ایمن در اتصالات بعدی بدون ورود مجدد PIN یا تایید است.
Pairing — توافق موقتی کلیدها برای جلسه فعلی است که با پایان اتصال حذف میشوند. Bonding شامل فرآیند کامل pairing به علاوه ذخیره کلیدها برای اتصالات آینده است. Bonding برای دستگاههایی که خودکار اتصال میشوند ضروری است — گوشیهای بیسیم، ساعتها، ردگیرهای تناسند.
در iPhone، حذف bonding از طریق تنظیمات سیستم انجام میشود: Settings > Bluetooth > روی آیکون اطلاعات (i) در کنار دستگاه کلیک کنید > Forget This Device را انتخاب کنید. پس از آن کلیدهای شیفرینگ حذف شده و در اتصال بعدی جفتسازی مجدد مورد نیاز خواهد بود.
تعداد دستگاههای bonded بستگی به حافظه غیرفرار تراش BLE دارد. سمارتفونها میتوانند صدها ثبت ذخیره کنند، در حالی که دستگاههای پریفریال BLE ارزانقیمت به 8–20 ثبت محدود هستند. در صورت تجاوز از محدودیت، ثبتهای قدیمی روینویسی میشوند یا دستگاه از پذیرش جفتسازیهای جدید خودداری میکند.
Stale bonding وضعیتی است که کلیدهای شیفرینگ در یک دستگاه (معمولاً Peripheral) بازنشانی شدهاند (مثلاً در زمان بهروزرسانی سیستمعامل)، اما در Central کلیدهای قدیمی باقی مانده اند. در نتیجه، اتصال برقرار نمیشود تا کاربر bonding منقضی را از طریق تنظیمات Bluetooth حذف و جفتسازی مجدد انجام ندهد.
نتایج
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید