Bonding: cos’è, processo e sicurezza dell’abbinamento BLE

Autore: IT Sectr Pubblicato: 2026-07-16 Tempo di lettura: 10 min

Bonding (abbinamento) in Bluetooth Low Energy è il processo di creazione di una connessione sicura permanente tra due dispositivi mediante l’archiviazione di chiavi crittografiche in memoria non volatile. Dopo il bonding, i dispositivi possono ripristinare automaticamente una connessione crittografata alla riconnessione senza dover reinserire il PIN o la conferma dell’utente. Secondo la Bluetooth SIG Core Specification v5.4 (2025), il meccanismo di bonding è obbligatorio per i dispositivi che richiedono la riconnessione automatica — cuffie, tracker fitness, sensori medici e accessori IoT.

Punti chiave

  • Bonding è l’archiviazione a lungo termine delle chiavi di crittografia tra dispositivi BLE dopo la fine di una sessione.
  • A differenza del pairing, il bonding consente di ripristinare automaticamente le connessioni crittografate senza conferme ripetute.
  • Il processo di bonding include lo scambio di chiavi LTK, IRK, CSRK e la loro memorizzazione nella memoria di entrambi i dispositivi.
  • iOS gestisce i dispositivi associati tramite Impostazioni > Bluetooth con possibilità di eliminare le chiavi memorizzate.
  • Su Android, la gestione del bonding avviene tramite BluetoothAdapter e l’API getBondedDevices().

Cos’è il Bonding in BLE?

Bonding è un’estensione del processo di pairing in Bluetooth Low Energy, in cui i dispositivi archiviano chiavi di crittografia per connessioni successive. Lo standard BLE definisce tre modalità di sicurezza: Security Mode 1 (crittografia senza autenticazione), Security Mode 2 (firma dei dati senza crittografia) e Security Mode 3 (crittografia con autenticazione). Il bonding è rilevante per le modalità con crittografia dove sono necessarie connessioni ripetute senza rinnovo delle chiavi.

Perché serve il Bonding

Lo scopo principale del bonding è il ripristino automatico delle connessioni crittografate quando i dispositivi si riconnettono. Quando un utente toglie gli auricolari dalla custodia e li indossa, il bonding garantisce una connessione immediata allo smartphone senza dover selezionare nuovamente il dispositivo dal menu Bluetooth. Secondo le Apple Bluetooth Design Guidelines (2025), i dispositivi associati devono connettersi entro non più di 2 secondi dal rilevamento.

Quali dati vengono archiviati durante il Bonding

Durante il bonding, ogni dispositivo archivia un insieme di materiali crittografici: Long Term Key (LTK) per la crittografia della connessione, Identity Resolving Key (IRK) per risolvere gli indirizzi casuali e Connection Signature Resolving Key (CSRK) per verificare le firme dei dati. LTK è la chiave primaria a 128 bit generata durante il pairing e utilizzata per tutte le successive sessioni crittografate.

ChiaveLunghezzaScopo
LTK128 bitCrittografia dei dati dopo la riconnessione
IRK128 bitRisoluzione degli indirizzi privati casuali (RPA)
CSRK128 bitFirma e verifica dell’autenticità dei dati

Bonding vs Pairing: qual è la differenza

Pairing è la negoziazione temporanea di chiavi per crittografare la sessione di comunicazione corrente. Quando la connessione termina, le chiavi di crittografia vengono eliminate e la connessione successiva richiede un nuovo processo completo di pairing. Bonding include tutte le fasi del pairing ma archivia inoltre le chiavi per sessioni future. Praticamente tutti i dispositivi Bluetooth di consumo (cuffie, altoparlanti, orologi) utilizzano il bonding perché senza di esso, ogni connessione richiederebbe il reinserimento del PIN.

Tre fasi del Pairing e del Bonding

Il processo di pairing secondo la specifica BLE consiste in tre fasi. Fase 1 — scambio delle capacità del dispositivo (capacità IO, supporto all’autenticazione). Fase 2 — generazione e scambio di Short Term Key (STK) o LTK, a seconda del metodo di abbinamento. Fase 3 — trasporto delle chiavi: scambio di LTK, IRK, CSRK tra i dispositivi. Se i dispositivi hanno archiviato le chiavi dopo la Fase 3 — questo è bonding. Se no — è semplicemente pairing.

ParametroPairingBonding
Archiviazione chiaviNon archiviateArchiviate in NVRAM
Riconnessione automaticaNo
Reinserimento PINRichiestoNon richiesto
UtilizzoConnessioni occasionaliDispositivi permanenti

Come funziona il processo di Bonding

Il processo di bonding viene avviato dopo il completamento con successo del pairing, quando un dispositivo invia una richiesta di archiviazione delle chiavi. In BLE, il Central (di solito uno smartphone) e il Peripheral (dispositivo indossabile) scambiano chiavi attraverso il canale sicuro stabilito nella Fase 2. Dopo il riuscito scambio di chiavi, ogni dispositivo le archivia in memoria non volatile insieme all’indirizzo MAC o all’Identity Address del partner.

Archiviazione delle chiavi lato Central

Sul lato Central (iOS/Android), le chiavi vengono archiviate nell’archivio Bluetooth di sistema. iOS utilizza lo stack di sistema Core Bluetooth con gestione automatica del bonding: al primo abbinamento, le chiavi vengono salvate nella NVRAM del dispositivo e le connessioni successive allo stesso Peripheral avvengono automaticamente. Lo sviluppatore non gestisce le chiavi direttamente — lo stack di sistema Core Bluetooth gestisce il bonding automaticamente quando si connette a un dispositivo che supporta l’archiviazione delle chiavi.

Ripristino della connessione tramite Bonding

Alla riconnessione, il Peripheral invia pacchetti pubblicitari contenenti il suo indirizzo pubblico o un Resolvable Private Address (RPA). Il Central riceve il pacchetto, confronta l’indirizzo con i dispositivi associati archiviati e, se trova una corrispondenza, avvia il ripristino della sessione utilizzando il LTK archiviato. Se il LTK corrisponde, la connessione crittografata viene stabilita senza ripetere il pairing.

Metodi di autenticazione nel Bonding

La specifica BLE definisce diversi metodi di autenticazione che influenzano il livello di sicurezza del bonding. La scelta del metodo dipende dalle capacità IO dei dispositivi — se hanno display, tastiera o la possibilità di confermare il confronto numerico. Un bonding sicuro richiede l’uso almeno di Just Works per applicazioni non critiche e Numeric Comparison o Passkey Entry per attività che richiedono protezione dagli attacchi Man-in-the-Middle.

Just Works

Just Works è un metodo senza autenticazione utilizzato quando uno dei dispositivi non ha display o tastiera. Le chiavi di crittografia vengono trasmesse senza verificare l’identità del secondo dispositivo — sensori di temperatura, cardiofrequenzimetri. Just Works è vulnerabile agli attacchi MITM, quindi viene utilizzato solo per dispositivi in cui la compromissione dei dati non rappresenta una minaccia.

Numeric Comparison

Numeric Comparison è un metodo di autenticazione in cui entrambi i dispositivi mostrano un numero di sei cifre e l’utente deve confermare la corrispondenza. Questo metodo fornisce protezione contro gli attacchi MITM ed è raccomandato per dispositivi con display — smartwatch, tracker fitness, telecomandi. Dopo la conferma, il bonding viene archiviato con il massimo livello di fiducia.

Passkey Entry

Passkey Entry richiede l’inserimento di un PIN a sei cifre su uno dei dispositivi. Di solito, il codice viene generato da un dispositivo e visualizzato su di esso, mentre l’utente lo inserisce sul secondo dispositivo. Questo metodo viene utilizzato per dispositivi medici e serrature IoT dove è richiesto un alto livello di sicurezza ma uno dei dispositivi non ha display per Numeric Comparison.

Gestione dei dispositivi associati in iOS e Android

La gestione del bonding è il processo di visualizzazione, eliminazione e manutenzione delle chiavi archiviate dei dispositivi abbinati. Nello sviluppo mobile, è importante gestire correttamente gli stati dei dispositivi associati, specialmente quando un dispositivo periferico viene resettato o il suo firmware viene sostituito. Quando le chiavi di bonding sul Peripheral cambiano, le vecchie chiavi sul Central devono essere rimosse e deve essere effettuato un nuovo abbinamento.

Gestione in iOS

iOS gestisce automaticamente i dispositivi associati attraverso lo stack di sistema Core Bluetooth. Lo sviluppatore non ha un’API diretta per visualizzare o eliminare singoli dispositivi associati — la gestione avviene attraverso le impostazioni di sistema (Impostazioni > Bluetooth > dispositivo > Forget). Se è necessario cancellare il bonding a livello di programma, l’app può indirizzare l’utente alle impostazioni Bluetooth di sistema utilizzando UIApplication.openSettingsURLString.

Gestione in Android

Android fornisce un’API diretta per lavorare con i dispositivi associati attraverso la classe BluetoothAdapter. Il metodo getBondedDevices() restituisce un Set<BluetoothDevice> di tutti i dispositivi abbinati. Per rimuovere il bonding, il metodo removeBond() viene utilizzato tramite riflessione o, su Android 12+, l’API ufficiale 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}")
}

Esempio pratico di implementazione del Bonding

L’implementazione del bonding su Android richiede la corretta gestione del BroadcastReceiver per gli eventi BluetoothDevice.ACTION_BOND_STATE_CHANGED. Al primo collegamento a un dispositivo, il sistema Android avvia automaticamente il bonding se il dispositivo supporta questa capacità. Lo sviluppatore deve gestire tre stati: BOND_NONE (non abbinato), BOND_BONDING (abbinamento in corso), BOND_BONDED (abbinato).

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", "Associazione rimossa")
        }
    }
}

Avviare il Bonding su Android

Per avviare il bonding su Android, il metodo createBond() deve essere chiamato sull’oggetto BluetoothDevice. Il metodo restituisce un booleano — true se il processo di abbinamento è stato avviato con successo. A partire da Android 12, createBond() richiede l’autorizzazione BLUETOOTH_CONNECT e può essere rifiutato dal sistema se l’app non ha accesso Bluetooth in background.

kotlin
fun initiateBonding(device: BluetoothDevice) {
    if (device.bondState == BluetoothDevice.BOND_NONE) {
        val success = device.createBond()
        if (success) {
            Toast.makeText(context, "Bonding avviato", Toast.LENGTH_SHORT)
        }
    }
}

Errori comuni nel lavoro con Bonding

Gli sviluppatori di app mobili incontrano spesso errori comuni quando lavorano con il bonding di dispositivi BLE. Una gestione errata degli stati di bonding può portare a fallimenti di connessione, impossibilità di riabbinare o perdita di dati. Esaminiamo i problemi più frequenti e le loro soluzioni.

Reset del firmware del Peripheral e stale bonding

Dopo un aggiornamento del firmware di un dispositivo BLE, le sue chiavi di bonding possono essere resettate, ma lo smartphone continua a memorizzare le vecchie chiavi (stale bonding). Quando si tenta di connettere, il Central cerca di ripristinare la sessione con il vecchio LTK, il Peripheral rifiuta la chiave e la connessione fallisce. La soluzione è rimuovere il bonding sullo smartphone tramite Impostazioni > Bluetooth > Forget Device ed effettuare un nuovo abbinamento.

Limite del numero di dispositivi associati

I chip BLE hanno un limite sul numero di record di bonding archiviabili. Per i popolari chip Nordic nRF5x, il limite è di 8-20 record a seconda della configurazione. Quando il limite viene superato, il dispositivo smette di accettare nuovi abbinamenti. La soluzione è rimuovere i record di bonding inutilizzati o utilizzare un portachiavi con pulizia prioritaria.

Problemi con la funzione Privacy

Quando si utilizza la funzione Privacy (indirizzi MAC casuali), il dispositivo cambia periodicamente il suo indirizzo. Se il Central non ha archiviato l’IRK, non può associare il nuovo indirizzo casuale a un dispositivo noto. La soluzione è implementare correttamente l’archiviazione IRK e utilizzarlo per risolvere RPA ad ogni rilevamento del dispositivo.

Domande frequenti

Cos’è il Bonding in BLE?

Bonding in Bluetooth Low Energy è il processo di archiviazione delle chiavi di crittografia (LTK, IRK, CSRK) dopo la fine di una sessione di pairing, per ripristinare automaticamente una connessione sicura alle successive riconnessioni senza dover reinserire il PIN o conferma.

In cosa si differenzia Bonding da Pairing?

Pairing è la negoziazione temporanea di chiavi per la sessione corrente, che vengono eliminate alla rottura della connessione. Bonding include il processo completo di pairing più l’archiviazione delle chiavi per connessioni future. Il bonding è necessario per i dispositivi che si riconnettono automaticamente — cuffie, orologi, tracker fitness.

Come rimuovere il Bonding su un iPhone?

Su un iPhone, la rimozione del bonding viene effettuata tramite le impostazioni di sistema: Impostazioni > Bluetooth > toccare l’icona delle informazioni (i) accanto al dispositivo > scegliere Forget This Device. Dopo di che, le chiavi di crittografia vengono eliminate e la prossima connessione richiederà un nuovo abbinamento.

Quanti dispositivi possono essere in Bonding?

Il numero di dispositivi associati dipende dalla capacità della memoria non volatile del chip BLE. Gli smartphone possono memorizzare centinaia di record, mentre i periferici BLE economici sono limitati a 8-20 record. Quando il limite viene superato, i vecchi record vengono sovrascritti o il dispositivo smette di accettare nuovi abbinamenti.

Cos’è lo stale bonding?

Stale bonding è una situazione in cui le chiavi di crittografia su un dispositivo (di solito il Peripheral) sono state resettate (ad esempio, dopo un aggiornamento del firmware), mentre il Central conserva ancora le vecchie chiavi. Di conseguenza, la connessione non può essere stabilita fino a quando l’utente non rimuove lo stale bonding tramite le impostazioni Bluetooth ed effettua un nuovo abbinamento.

Riepilogo

  • Bonding è un meccanismo chiave del BLE per ripristinare automaticamente le connessioni crittografate senza reinserimento del PIN.
  • Pairing e bonding differiscono nell’archiviazione delle chiavi: nel pairing le chiavi durano una sessione, nel bonding vengono archiviate permanentemente.
  • Il processo di bonding include lo scambio e l’archiviazione di tre tipi di chiavi: LTK (crittografia), IRK (identificazione), CSRK (firma).
  • Il metodo di autenticazione Numeric Comparison fornisce protezione dagli attacchi MITM ed è raccomandato per dispositivi con display.
  • iOS gestisce il bonding automaticamente tramite Core Bluetooth, mentre Android fornisce l’API createBond() e removeBond().
  • Lo stale bonding dopo un aggiornamento del firmware del Peripheral è un problema comune risolto rimuovendo il dispositivo dall’elenco Bluetooth.
  • Il numero di dispositivi associati su un chip BLE periferico è limitato a 8-20 record a seconda del modello.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche