Bonding (pemasangan) di Bluetooth Low Energy adalah proses pembuatan koneksi permanen yang aman antara dua perangkat dengan menyimpan kunci kriptografi di memori non-volatile. Setelah bonding, perangkat dapat secara otomatis memulihkan koneksi terenkripsi saat menghubungkan ulang tanpa memasukkan PIN atau konfirmasi pengguna. Menurut Bluetooth SIG Core Specification v5.4 (2025), mekanisme bonding wajib untuk perangkat yang memerlukan koneksi ulang otomatis — headphone, pelacak kebugaran, sensor medis, dan aksesori IoT.
Poin Penting
Bonding — adalah perluasan dari proses pairing di Bluetooth Low Energy, di mana perangkat menyimpan kunci enkripsi untuk koneksi selanjutnya. Standar BLE mendefinisikan tiga mode keamanan: Security Mode 1 (enkripsi tanpa autentikasi), Security Mode 2 (penandatanganan data tanpa enkripsi) dan Security Mode 3 (enkripsi dengan autentikasi). Bonding relevan untuk mode dengan enkripsi yang memerlukan banyak koneksi tanpa negosiasi ulang kunci.
Tujuan utama bonding adalah pemulihan otomatis koneksi terenkripsi saat menghubungkan ulang perangkat. Saat pengguna mengeluarkan headphone dari casing dan memakainya, bonding memastikan koneksi instan ke smartphone tanpa perlu memilih ulang perangkat di menu Bluetooth. Menurut Apple Bluetooth Design Guidelines (2025), perangkat bonded harus terhubung dalam waktu maksimal 2 detik sejak terdeteksi.
Selama bonding, setiap perangkat menyimpan satu set materi kriptografi: Long Term Key (LTK) untuk enkripsi koneksi, Identity Resolving Key (IRK) untuk menyelesaikan alamat acak, Connection Signature Resolving Key (CSRK) untuk memverifikasi tanda tangan data. LTK — kunci utama sepanjang 128 bit, dihasilkan selama proses pairing dan digunakan untuk semua sesi terenkripsi selanjutnya.
| Kunci | Panjang | Fungsi |
|---|---|---|
| LTK | 128 bit | Enkripsi data setelah koneksi ulang |
| IRK | 128 bit | Menyelesaikan alamat privat acak (RPA) |
| CSRK | 128 bit | Menandatangani dan memverifikasi keaslian data |
Pairing — adalah kesepakatan sementara kunci untuk mengenkripsi sesi komunikasi saat ini. Saat koneksi berakhir, kunci enkripsi dihapus, dan pada koneksi berikutnya diperlukan proses pairing berulang. Bonding mencakup semua tahap pairing, tetapi juga menyimpan kunci untuk sesi selanjutnya. Praktis semua perangkat Bluetooth konsumen (headphone, speaker, jam tangan) menggunakan bonding, karena tanpanya setiap koneksi akan memerlukan memasukkan PIN lagi.
Proses pairing menurut spesifikasi BLE terdiri dari tiga fase. Fase 1 — pertukaran kemampuan perangkat (IO capabilities, dukungan autentikasi). Fase 2 — pembuatan dan pertukaran Short Term Key (STK) atau LTK, tergantung pada metode koneksi. Fase 3 — transport kunci: pertukaran LTK, IRK, CSRK antar perangkat. Jika perangkat menyimpan kunci setelah Fase 3 — ini adalah bonding. Jika tidak — hanya pairing.
| Parameter | Pairing | Bonding |
|---|---|---|
| Penyimpanan kunci | Tidak disimpan | Disimpan di NVRAM |
| Koneksi otomatis | Tidak | Ya |
| Memasukkan PIN ulang | Diperlukan | Tidak diperlukan |
| Penggunaan | Koneksi sporadis | Perangkat tetap |
Proses bonding dimulai setelah pairing berhasil diselesaikan, ketika salah satu perangkat mengirim permintaan untuk menyimpan kunci. Di BLE, Central (biasanya smartphone) dan Peripheral (perangkat yang dapat dikenakan) bertukar kunci melalui saluran aman yang dibuat di Fase 2. Setelah pertukaran kunci berhasil, setiap perangkat menyimpannya di memori non-volatile bersama dengan alamat MAC atau Identity Address pasangan.
Di sisi Central (iOS/Android), kunci disimpan di penyimpanan sistem Bluetooth. iOS menggunakan tumpukan sistem Core Bluetooth dengan manajemen bonding otomatis: pada koneksi pertama, kunci disimpan di NVRAM perangkat, dan koneksi berikutnya ke Peripheral yang sama terjadi secara otomatis. Pengembang tidak mengelola kunci secara langsung — tumpukan sistem Core Bluetooth memproses bonding secara otomatis saat menjalin koneksi dengan perangkat yang mendukung penyimpanan kunci.
Saat menghubungkan ulang, Peripheral mengirim paket iklan yang berisi alamat publiknya atau Resolvable Private Address (RPA). Central menerima paket, mencocokkan alamat dengan perangkat bonded yang disimpan dan, jika ditemukan kecocokan, memulai pemulihan sesi menggunakan LTK yang disimpan. Jika LTK cocok — koneksi terenkripsi dibuat tanpa pairing ulang.
Spesifikasi BLE mendefinisikan beberapa metode autentikasi yang mempengaruhi tingkat keamanan bonding. Pemilihan metode tergantung pada kemampuan IO perangkat — keberadaan layar, keyboard, kemampuan untuk mengonfirmasi perbandingan numerik. Bonding yang aman memerlukan penggunaan metode setidaknya Just Works untuk aplikasi non-kritis dan Numeric Comparison atau Passkey Entry untuk tugas yang memerlukan perlindungan terhadap serangan Man-in-the-Middle.
Just Works — metode tanpa autentikasi, digunakan ketika salah satu perangkat tidak memiliki layar atau keyboard. Kunci enkripsi dikirim tanpa verifikasi keaslian perangkat kedua — suhu, detak jantung). Just Works rentan terhadap serangan MITM, sehingga hanya diterapkan pada perangkat di mana kompromi data tidak menimbulkan ancaman.
Numeric Comparison — metode autentikasi di mana kedua perangkat menampilkan angka enam digit, dan pengguna harus mengonfirmasi kecocokan. Metode ini memberikan perlindungan terhadap serangan MITM dan direkomendasikan untuk perangkat dengan layar — jam tangan pintar, pelacak kebugaran, remote control. Setelah konfirmasi, bonding disimpan dengan tingkat kepercayaan maksimum.
Passkey Entry memerlukan memasukkan kode PIN enam digit di salah satu perangkat. Biasanya kode dibuat oleh satu perangkat dan ditampilkan di perangkat tersebut, dan pengguna memasukkannya di perangkat kedua. Metode ini diterapkan pada perangkat medis dan kunci IoT yang memerlukan tingkat keamanan tinggi, tetapi salah satu perangkat tidak memiliki layar untuk Numeric Comparison.
Manajemen bonding — proses melihat, menghapus, dan memelihara kunci yang disimpan dari perangkat yang dipasangkan. Dalam pengembangan seluler, penting untuk menangani status perangkat bonded dengan benar, terutama saat mengatur ulang pengaturan perangkat periferal atau mengganti firmware-nya. Saat kunci bonding berubah di Peripheral, kunci lama di Central harus dihapus dan pemasangan ulang harus dilakukan.
iOS secara otomatis mengelola perangkat bonded melalui tumpukan sistem Core Bluetooth. Pengembang tidak memiliki API langsung untuk melihat atau menghapus perangkat bonded individual — manajemen dilakukan melalui pengaturan sistem (Settings > Bluetooth > perangkat > Forget). Jika diperlukan pembersihan bonding secara terprogram, aplikasi dapat mengarahkan pengguna ke pengaturan sistem Bluetooth menggunakan UIApplication.openSettingsURLString.
Android menyediakan API langsung untuk bekerja dengan perangkat bonded melalui kelas BluetoothAdapter. Metode getBondedDevices() mengembalikan Set<BluetoothDevice> dari semua perangkat yang dipasangkan. Untuk menghapus bonding, gunakan metode removeBond() melalui refleksi atau di Android 12+ API resmi BluetoothDevice.removeBond().
val adapter = BluetoothAdapter.getDefaultAdapter()
val bondedDevices: Set<BluetoothDevice> = adapter.getBondedDevices()
bondedDevices.forEach { device ->
Log.d("Bonding", "Bonded device: ${device.name}, ${device.address}")
}
Implementasi bonding di sisi Android memerlukan penanganan yang benar dari BroadcastReceiver untuk peristiwa BluetoothDevice.ACTION_BOND_STATE_CHANGED. Saat koneksi pertama ke perangkat, sistem Android secara otomatis memulai bonding, jika perangkat mendukung kemampuan ini. Pengembang harus menangani tiga status: BOND_NONE (belum dipasangkan), BOND_BONDING (proses pemasangan), BOND_BONDED (dipasangkan).
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 dihapus")
}
}
}
Untuk memulai bonding di Android, panggil metode createBond() pada objek BluetoothDevice. Metode mengembalikan boolean — true, jika proses pemasangan berhasil dimulai. Mulai Android 12, createBond() memerlukan izin BLUETOOTH_CONNECT dan dapat ditolak oleh sistem jika aplikasi tidak memiliki akses latar belakang ke Bluetooth.
fun initiateBonding(device: BluetoothDevice) {
if (device.bondState == BluetoothDevice.BOND_NONE) {
val success = device.createBond()
if (success) {
Toast.makeText(context, "Bonding dimulai", Toast.LENGTH_SHORT)
}
}
}
Pengembang aplikasi seluler sering menghadapi kesalahan umum saat bekerja dengan bonding perangkat BLE. Penanganan status bonding yang tidak benar dapat menyebabkan kegagalan koneksi, ketidakmampuan untuk memasangkan ulang, atau kehilangan data. Mari kita lihat masalah yang paling umum dan solusinya.
Setelah memperbarui firmware perangkat BLE, kunci bonding-nya mungkin di-reset, tetapi smartphone terus menyimpan kunci usang (stale bonding). Saat mencoba koneksi, Central mencoba memulihkan sesi dengan LTK lama, Peripheral menolak kunci, dan koneksi tidak terbentuk. Solusi — hapus bonding di smartphone melalui Settings > Bluetooth > Forget Device dan lakukan pemasangan ulang.
Chip BLE memiliki batasan jumlah catatan bonding yang disimpan. Untuk chip Nordic nRF5x yang populer, batasnya adalah 8–20 catatan tergantung konfigurasi. Saat batas terlampaui, perangkat berhenti menerima pemasangan baru. Solusi — hapus catatan bonding yang tidak digunakan atau gunakan rantai kunci dengan pembersihan prioritas.
Saat menggunakan Privacy Feature (alamat MAC acak), perangkat secara periodik mengubah alamatnya. Jika Central tidak menyimpan IRK, ia tidak dapat mencocokkan alamat acak baru dengan perangkat yang dikenal. Solusi — implementasikan penyimpanan IRK dengan benar dan gunakan untuk menyelesaikan RPA setiap kali perangkat terdeteksi.
Pertanyaan yang Sering Diajukan
Bonding di Bluetooth Low Energy — proses menyimpan kunci enkripsi (LTK, IRK, CSRK) setelah sesi pairing berakhir untuk pemulihan otomatis koneksi aman pada koneksi berikutnya tanpa memasukkan PIN atau konfirmasi.
Pairing — kesepakatan sementara kunci untuk sesi saat ini, yang dihapus saat koneksi putus. Bonding mencakup proses pairing lengkap plus penyimpanan kunci untuk koneksi mendatang. Bonding diperlukan untuk perangkat yang terhubung secara otomatis — headphone, jam tangan, pelacak kebugaran.
Di iPhone, penghapusan bonding dilakukan melalui pengaturan sistem: Settings > Bluetooth > ketuk ikon informasi (i) di samping perangkat > pilih Forget This Device. Setelah itu kunci enkripsi dihapus, dan pada koneksi berikutnya diperlukan pemasangan ulang.
Jumlah perangkat bonded tergantung pada kapasitas memori non-volatile chip BLE. Smartphone dapat menyimpan ratusan catatan, sementara perangkat periferal BLE murah terbatas pada 8–20 catatan. Saat batas terlampaui, catatan lama ditimpa atau perangkat berhenti menerima pemasangan baru.
Stale bonding — situasi di mana kunci enkripsi di satu perangkat (biasanya Peripheral) telah di-reset (misalnya saat flashing ulang), tetapi di Central kunci lama masih tersisa. Akibatnya, koneksi tidak terbentuk sampai pengguna menghapus bonding usang melalui pengaturan Bluetooth dan melakukan pemasangan ulang.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga