Domanda

Posso abbinare due dispositivi su Bluetooth senza la necessità di confermarlo nell'interfaccia utente, accettare per accoppiare questi dispositivi. Posso scambiare alcuni dati extra, ad esempio NFC, quindi abbinare in modo sicuro quei due dispositivi su Bluetooth senza alcuna azione utente extra?

È stato utile?

Soluzione

Questo bisogno è esattamente il motivo per cui createInsecureRfcommSocketToServiceRecord() è stato aggiunto a BluetoothDevice A partire da Android 2.3.3 (livello API 10) (Documenti SDK) ... prima non c'era supporto SDK per questo. È stato progettato per consentire ad Android di connettersi ai dispositivi senza interfacce utente per l'immissione di un codice PIN (come un dispositivo incorporato), ma è altrettanto utilizzabile per la configurazione di una connessione tra due dispositivi senza voce del pin utente.

Il metodo corollario listenUsingInsecureRfcommWithServiceRecord() in BluetoothAdapter viene utilizzato per accettare questi tipi di connessioni. Non è una violazione della sicurezza perché i metodi devono essere usati come coppia. Non puoi usarlo per tentare semplicemente di abbinare qualsiasi vecchio dispositivo Bluetooth.

Puoi anche fare comunicazioni a corto raggio rispetto a NFC, ma quell'hardware è meno importante sui dispositivi Android. Sicuramente scegli uno e non cercare di creare una soluzione che usi entrambi.

Spero possa aiutare!

PS Ci sono anche modi per farlo su molti dispositivi prima di 2.3 usando la riflessione, perché il codice esisteva ... ma non lo consiglierei necessariamente per le applicazioni di produzione distribuite in serie. Guarda questo Stackoverflow.

Altri suggerimenti

Bene, questo dovrebbe essere davvero suddiviso in 2 parti:

  1. Puoi abbinare 2 dispositivi Bluetooth senza passare attraverso una stretta di mano di abbinamento Bluetooth? No, non puoi. Questo è cotto nel protocollo, quindi non c'è modo di aggirare questo.
  2. Puoi eseguire la stretta di mano senza un'interfaccia utente? Sì, puoi: è solo un codice.

Non sono sicuro di come lo fai in Windows Land, ma in *Nix Land ci sono funzioni sepolte nello stack Bluez che ti consentono di ricevere notifiche su quando appare un nuovo dispositivo e inviarlo il codice di accoppiamento (chiaramente ci devono essere Queste funzioni: quelle sono ciò che l'interfaccia utente utilizza). Dato tempo e esperienza sufficienti, sono sicuro che potresti capire come scrivere la tua versione dell'app Bluetooth Impostazioni che in qualche modo:

  • Era arrivato un nuovo dispositivo
  • Ho guardato l'indirizzo MAC Nome/Bluetooth e ha verificato un database interno per l'utilizzo del codice di associazione.
  • Ha inviato il codice di associazione e completato l'operazione

Tutto senza dover riporre un'interfaccia utente.

Se vai avanti e scrivi il codice, mi piacerebbe mettermi le mani.

Risposta breve: quando invio file tra dispositivi con OBEX non mi viene mai richiesto di abbinare, quindi è certamente possibile.

1) Un'applicazione e il dispositivo stesso possono essere impostati su modalità di autenticazione necessarie/non necessarie, così spesso non vi era requisito per l'abbinamento. Ad esempio, la maggior parte dei server OBEX (OPP) non ha bisogno di alcuna autenticazione, quindi non è necessario l'abbinamento/il legame.

Presumibilmente la risposta di "Wireless Designs" stava coprendo quel caso.

2) Quindi se il dispositivo/app era richiesto dall'abbinamento:

2.1) Prima di V2.1 per l'accoppiamento, i due dispositivi dovevano avere passphrase/pin corrispondenti. Quindi questo è necessario coinvolgimento dell'utente (per inserire i pin) o conoscenza nel software conosce il pin: definito nell'app if pin callback send pin="1234", o intelligente nel sistema operativo come Bluez e Win7 (vedi Scivola 20 nel mio Bluetooth in Windows 7 Doc) che ha una logica come: if(remotedevice=headset) then expectedPin ="0000". Non so cosa fa Android

2.2) In v2.1 è stato aggiunto un accoppiamento semplice (SSP) sicuro. A quali cambia l'associazione a:

if (either is pre-v2.1) then
   Legacy
else if (Out-Of-Band channel) then
   OutOfBand
else if (neither have "Man-in-the-Middle Protection Required") then
   (i.e. both have "Man-in-the-Middle Protection _Not_ Required")
   Just-Works
else
   Depending on the two devices' "IO Capabilities", either NumericComparison or Passkey.
   Passkey is used when one device has KeyboardOnly -- and the peer device _isn't_ NoInputNoOutput.
endif

Da 32feet.net's Bluetoothwin32Authentication Guide, vedi anche le sezioni SSP in [1]

Quindi avere l'abbinamento non è necessario bisogni "Justworks" o "Out of Band", ad esempio il tuo suggerimento NFC.

Spero possa aiutare...

Sì, è possibile in teoria come definito dalla specifica. Tuttavia, non esiste ancora alcuna implementazione pratica, ciò consentirebbe questo.

Fare riferimento: Specifiche tecniche di consegna del forum NFChttp://www.nfc-forum.org/specs/spec_list/

Citando dalle specifiche relative alla sicurezza -"Il protocollo di consegna richiede la trasmissione di dati e credenziali di accesso alla rete (dati di configurazione del vettore) per consentire a un dispositivo di connettersi a una rete wireless fornita da un altro dispositivo. A causa della vicinanza necessaria per la comunicazione tra dispositivi NFC e tag, intercettando il vettore I dati di configurazione sono difficili, ma non impossibili, senza riconoscimento da parte del legittimo proprietario dei dispositivi. La trasmissione dei dati di configurazione del vettore su dispositivi che possono essere portati in prossimità è considerata legittima nell'ambito di questa specifica. "

BT versione 2.0 o meno: dovresti essere in grado di abbinare/legame utilizzando un codice PIN standard, immesso a livello di programmazione 1234 o 0000. Questo non è molto sicuro ma molti dispositivi BT lo fanno.

BT versione 2.1 o superiore - Modalità 4 Il modello "solo funziona" di accoppiamento semplice "solo funziona". Usa la crittografia ellittica (qualunque cosa sia) ed è molto sicuro ma è aperto all'uomo negli attacchi di mezzo. Rispetto al vecchio approccio del codice pin '0000', sono gli anni leggeri. Ciò non richiede alcun input utente.

Questo è secondo le specifiche Bluetooth, ma ciò che puoi usare dipende da quale versone dello standard Bluetooth supporta il tuo stack e quale API hai.

Se stai chiedendo se è possibile abbinare due dispositivi senza che l'utente abbia mai approvato l'abbinamento, no, non può essere fatto, è una funzione di sicurezza. Se sei associato su Bluetooth non è necessario scambiare dati su NFC, basta scambiare dati sul collegamento Bluetooth.

Non credo che tu possa aggirare la sicurezza Bluetooth passando un pacchetto di autenticazione su NFC, ma potrei sbagliarmi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top