Bonding (eşleştirme) Bluetooth Low Energy'de, şifreleme anahtarlarını kalıcı olmayan bellekte depolayarak iki cihaz arasında kalıcı güvenli bir bağlantı oluşturma sürecidir. Bonding'den sonra cihazlar, PIN yeniden girişi veya kullanıcı onayı olmadan yeniden bağlantıda otomatik olarak şifreli bir bağlantıyı geri yükleyebilir. Bluetooth SIG Core Specification v5.4 (2025)'e göre, bonding mekanizması otomatik yeniden bağlantı gerektiren cihazlar için zorunludur — kulaklıklar, fitness takip cihazları, tıbbi sensörler ve IoT aksesuarları.
Ana noktalar
Bonding, Bluetooth Low Energy'de pairing sürecinin bir uzantısıdır ve cihazların sonraki bağlantılar için şifreleme anahtarlarını depolamasıdır. BLE standardı üç güvenlik modu tanımlar: Security Mode 1 (kimlik doğrulama olmadan şifreleme), Security Mode 2 (şifreleme olmadan veri imzalama) ve Security Mode 3 (kimlik doğrulama ile şifreleme). Bonding, anahtar yeniden oluşturma olmadan tekrarlanan bağlantıların gerektiği şifreleme modları için geçerlidir.
Bonding'in temel amacı, cihazlar yeniden bağlandığında şifreli bağlantıların otomatik olarak geri yüklenmesidir. Kullanıcı kulaklıkları kutusundan çıkarıp taktığında, bonding Bluetooth menüsünden cihazı tekrar seçmeye gerek kalmadan akıllı telefona anında bağlantı sağlar. Apple Bluetooth Design Guidelines (2025)'e göre, bağlı cihazlar keşfedildikten sonra en fazla 2 saniye içinde bağlanmalıdır.
Bonding sırasında, her cihaz bir dizi şifreleme malzemesi depolar: bağlantı şifrelemesi için Long Term Key (LTK), rastgele adresleri çözmek için Identity Resolving Key (IRK) ve veri imzalarını doğrulamak için Connection Signature Resolving Key (CSRK). LTK, pairing sırasında oluşturulan ve sonraki tüm şifreli oturumlar için kullanılan 128 bitlik birincil anahtardır.
| Anahtar | Uzunluk | Amaç |
|---|---|---|
| LTK | 128 bit | Yeniden bağlantı sonrası veri şifreleme |
| IRK | 128 bit | Rastgele özel adresleri (RPA) çözme |
| CSRK | 128 bit | Veri imzalama ve doğrulama |
Pairing, mevcut iletişim oturumunu şifrelemek için anahtarların geçici olarak müzakere edilmesidir. Bağlantı sona erdiğinde, şifreleme anahtarları silinir ve sonraki bağlantı için yeniden tam bir pairing süreci gerekir. Bonding, tüm pairing aşamalarını içerir ancak gelecekteki oturumlar için anahtarları ek olarak depolar. Neredeyse tüm tüketici Bluetooth cihazları (kulaklıklar, hoparlörler, saatler) bonding kullanır çünkü onsuz her bağlantı PIN yeniden girişi gerektirir.
BLE spesifikasyonuna göre pairing süreci üç aşamadan oluşur. Aşama 1 — cihaz yeteneklerinin değişimi (IO yetenekleri, kimlik doğrulama desteği). Aşama 2 — eşleştirme yöntemine bağlı olarak Short Term Key (STK) veya LTK oluşturma ve değişimi. Aşama 3 — anahtar taşıma: cihazlar arasında LTK, IRK, CSRK değişimi. Cihazlar Aşama 3'ten sonra anahtarları depoladıysa — bu bonding'dir. Depolamadıysa — bu sadece pairing'dir.
| Parametre | Pairing | Bonding |
|---|---|---|
| Anahtar depolama | Depolanmaz | NVRAM'de depolanır |
| Otomatik yeniden bağlantı | Hayır | Evet |
| PIN yeniden girişi | Gerekli | Gerekli değil |
| Kullanım | Ara sıra bağlantılar | Kalıcı cihazlar |
Bonding süreci, pairing başarıyla tamamlandıktan sonra, bir cihazın anahtar depolama isteği göndermesiyle başlatılır. BLE'de, Central (genellikle bir akıllı telefon) ve Peripheral (giyilebilir cihaz), Aşama 2'de kurulan güvenli kanal üzerinden anahtarları değiştirir. Başarılı anahtar değişiminden sonra, her cihaz bunları ortağın MAC adresi veya Identity Address'i ile birlikte kalıcı olmayan bellekte depolar.
Central tarafında (iOS/Android), anahtarlar sistem Bluetooth deposunda saklanır. iOS, otomatik bonding yönetimi ile Core Bluetooth sistem yığını kullanır: ilk eşleştirmede anahtarlar cihazın NVRAM'ine kaydedilir ve aynı Peripheral'a sonraki bağlantılar otomatik olarak gerçekleşir. Geliştirici anahtarları doğrudan yönetmez — Core Bluetooth sistem yığını, anahtar depolamayı destekleyen bir cihaza bağlanırken bonding'i otomatik olarak işler.
Yeniden bağlantıda, Peripheral genel adresini veya bir Resolvable Private Address (RPA) içeren reklam paketleri gönderir. Central paketi alır, adresi depolanan bağlı cihazlarla karşılaştırır ve bir eşleşme bulursa, depolanan LTK'yı kullanarak oturum kurtarmayı başlatır. LTK eşleşirse, şifreli bağlantı yeniden pairing olmadan kurulur.
BLE spesifikasyonu, bonding'in güvenlik seviyesini etkileyen birkaç kimlik doğrulama yöntemi tanımlar. Yöntemin seçimi, cihazların IO yeteneklerine — ekranları, klavyeleri veya sayısal karşılaştırmayı onaylama yeteneklerine bağlıdır. Güvenli bonding, kritik olmayan uygulamalar için en azından Just Works ve Man-in-the-Middle saldırılarına karşı koruma gerektiren görevler için Numeric Comparison veya Passkey Entry kullanılmasını gerektirir.
Just Works, cihazlardan birinin ekranı veya klavyesi olmadığında kullanılan kimlik doğrulamasız bir yöntemdir. Şifreleme anahtarları, ikinci cihazın kimliği doğrulanmadan iletilir — sıcaklık sensörleri, kalp atış monitörleri. Just Works, MITM saldırılarına karşı savunmasızdır, bu nedenle yalnızca veri tehlikeye atmasının tehdit oluşturmadığı cihazlar için kullanılır.
Numeric Comparison, her iki cihazın altı haneli bir sayı gösterdiği ve kullanıcının eşleşmeyi onaylaması gereken bir kimlik doğrulama yöntemidir. Bu yöntem MITM saldırılarına karşı koruma sağlar ve ekranı olan cihazlar için önerilir — akıllı saatler, fitness takip cihazları, uzaktan kumandalar. Onaydan sonra, bonding maksimum güven seviyesiyle depolanır.
Passkey Entry, cihazlardan birinde altı haneli bir PIN girilmesini gerektirir. Genellikle kod bir cihaz tarafından oluşturulur ve üzerinde görüntülenir, kullanıcı ise ikinci cihazda girer. Bu yöntem, yüksek güvenlik gerektiren ancak cihazlardan birinin Numeric Comparison için ekranı olmayan tıbbi cihazlar ve IoT kilitleri için kullanılır.
Bonding yönetimi, eşleştirilmiş cihazların depolanan anahtarlarını görüntüleme, silme ve bakımını yapma sürecidir. Mobil geliştirmede, özellikle bir çevre birimi sıfırlandığında veya ürün yazılımı değiştirildiğinde, bağlı cihaz durumlarını doğru şekilde ele almak önemlidir. Peripheral'deki bonding anahtarları değiştiğinde, Central'daki eski anahtarlar kaldırılmalı ve yeni bir eşleştirme yapılmalıdır.
iOS, bağlı cihazları sistem Core Bluetooth yığını aracılığıyla otomatik olarak yönetir. Geliştiricinin tek tek bağlı cihazları görüntülemek veya silmek için doğrudan bir API'si yoktur — yönetim sistem ayarları (Ayarlar > Bluetooth > cihaz > Forget) aracılığıyla yapılır. Bonding'in programlama yoluyla temizlenmesi gerekiyorsa, uygulama UIApplication.openSettingsURLString kullanarak kullanıcıyı sistem Bluetooth ayarlarına yönlendirebilir.
Android, BluetoothAdapter sınıfı aracılığıyla bağlı cihazlarla çalışmak için doğrudan bir API sağlar. getBondedDevices() yöntemi, eşleştirilmiş tüm cihazların Set<BluetoothDevice> değerini döndürür. Bonding'i kaldırmak için removeBond() yöntemi yansıma yoluyla veya Android 12+'da resmi API BluetoothDevice.removeBond() kullanılır.
val adapter = BluetoothAdapter.getDefaultAdapter()
val bondedDevices: Set<BluetoothDevice> = adapter.getBondedDevices()
bondedDevices.forEach { device ->
Log.d("Bonding", "Bonded device: ${device.name}, ${device.address}")
}
Android'de bonding uygulaması, BluetoothDevice.ACTION_BOND_STATE_CHANGED olayları için BroadcastReceiver'ın doğru şekilde işlenmesini gerektirir. Bir cihaza ilk bağlantıda, Android sistemi cihaz bu yeteneği destekliyorsa otomatik olarak bonding'i başlatır. Geliştirici üç durumu işlemelidir: BOND_NONE (eşleştirilmemiş), BOND_BONDING (eşleştiriliyor), BOND_BONDED (eşleştirilmiş).
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", "Bağlantı kaldırıldı")
}
}
}
Android'te bonding başlatmak için BluetoothDevice nesnesinde createBond() yöntemi çağrılmalıdır. Yöntem bir boole değeri döndürür — eşleştirme süreci başarıyla başlatıldıysa true. Android 12'den itibaren createBond(), BLUETOOTH_CONNECT izni gerektirir ve uygulamanın arka planda Bluetooth erişimi yoksa sistem tarafından reddedilebilir.
fun initiateBonding(device: BluetoothDevice) {
if (device.bondState == BluetoothDevice.BOND_NONE) {
val success = device.createBond()
if (success) {
Toast.makeText(context, "Bonding başlatıldı", Toast.LENGTH_SHORT)
}
}
}
Mobil uygulama geliştiricileri, BLE cihaz bonding'i ile çalışırken sıklıkla yaygın hatalarla karşılaşır. Bonding durumlarının yanlış işlenmesi, bağlantı hatalarına, yeniden eşleştirememeye veya veri kaybına yol açabilir. En sık karşılaşılan sorunları ve çözümlerini inceleyelim.
Bir BLE cihazı ürün yazılımı güncellemesinden sonra, bonding anahtarları sıfırlanabilir ancak akıllı telefon eski anahtarları (stale bonding) depolamaya devam eder. Bağlanmaya çalışıldığında, Central eski LTK ile oturumu geri yüklemeye çalışır, Peripheral anahtarı reddeder ve bağlantı başarısız olur. Çözüm, Ayarlar > Bluetooth > Cihazı Unut üzerinden akıllı telefonda bonding'i kaldırmak ve yeni bir eşleştirme yapmaktır.
BLE yongalarının depolanabilir bonding kaydı sayısında bir sınırı vardır. Popüler Nordic nRF5x yongaları için sınır, yapılandırmaya bağlı olarak 8-20 kayıttır. Sınır aşıldığında, cihaz yeni eşleştirmeleri kabul etmeyi durdurur. Çözüm, kullanılmayan bonding kayıtlarını kaldırmak veya temizlemeli öncelik tabanlı bir anahtar halkası kullanmaktır.
Gizlilik Özelliği (rastgele MAC adresleri) kullanıldığında, cihaz periyodik olarak adresini değiştirir. Central IRK'yı depolamadıysa, yeni rastgele adresi bilinen bir cihazla eşleştiremez. Çözüm, IRK depolamayı doğru şekilde uygulamak ve her cihaz keşfinde RPA'yı çözmek için kullanmaktır.
Sıkça Sorulan Sorular
Bluetooth Low Energy'de Bonding, bir pairing oturumu sona erdikten sonra şifreleme anahtarlarını (LTK, IRK, CSRK) depolayarak, sonraki yeniden bağlantılarda PIN yeniden girişi veya onay olmadan otomatik olarak güvenli bir bağlantıyı geri yükleme sürecidir.
Pairing, mevcut oturum için anahtarların geçici müzakeresidir ve bağlantı koptuğunda silinir. Bonding, tam pairing süreci artı gelecekteki bağlantılar için anahtar depolamayı içerir. Bonding, otomatik olarak yeniden bağlanan cihazlar için gereklidir — kulaklıklar, saatler, fitness takip cihazları.
Bir iPhone'da bonding kaldırma, sistem ayarları aracılığıyla yapılır: Ayarlar > Bluetooth > cihazın yanındaki bilgi simgesine (i) dokunun > Forget This Device'ı seçin. Bundan sonra şifreleme anahtarları silinir ve sonraki bağlantı yeni bir eşleştirme gerektirir.
Bağlı cihazların sayısı, BLE yongasının kalıcı olmayan bellek kapasitesine bağlıdır. Akıllı telefonlar yüzlerce kayıt depolayabilirken, düşük maliyetli BLE çevre birimleri 8-20 kayıtla sınırlıdır. Sınır aşıldığında, eski kayıtlar üzerine yazılır veya cihaz yeni eşleştirmeleri kabul etmeyi durdurur.
Stale bonding, bir cihazdaki (genellikle Peripheral) şifreleme anahtarlarının (örneğin, ürün yazılımı güncellemesinden sonra) sıfırlandığı, ancak Central'ın hala eski anahtarları sakladığı bir durumdur. Sonuç olarak, kullanıcı Bluetooth ayarlarından stale bonding'i kaldırıp yeni bir eşleştirme yapana kadar bağlantı kurulamaz.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun