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 در مقایسه با 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 دستگاه‌ها دارد — وجود نمایشگر، صفحه کلید، امکان تایید مقایسه عددی. 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 از طریق پیشوان سیستمی Core Bluetooth دستگاه‌های bonded را به‌طور خودکار مدیریت می‌کند. توسعه‌دهنده 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 و 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 کلیدهای قدیمی باقی مانده اند. در نتیجه، اتصال برقرار نمی‌شود تا کاربر 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 از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید