Appariement Bluetooth sans confirmation de l'utilisateur

puis-je coupler deux appareils sur Bluetooth sans avoir besoin de confirmer cela dans l'interface utilisateur, accepter de coupler ces appareils. Puis-je échanger des données supplémentaires, par exemple NFC, et puis coupler en toute sécurité ces deux appareils sur Bluetooth sans aucune action supplémentaire de l'utilisateur?

31
demandé sur michael 2011-05-04 18:56:17

6 réponses

ce besoin est exactement la raison pour laquelle createInsecureRfcommSocketToServiceRecord() a été ajouté à BluetoothDevice à partir de Android 2.3.3 (niveau API 10) ( SDK Docs )...avant cela, il n'y avait pas de support SDK pour cela. Il a été conçu pour permettre à Android de se connecter à des appareils sans interfaces utilisateur pour entrer un code PIN (comme un appareil embarqué), mais il est tout aussi utilisable pour configurer une connexion entre deux appareils sans entrée de NIP utilisateur.

Le corollaire de la méthode listenUsingInsecureRfcommWithServiceRecord() BluetoothAdapter est utilisé pour accepter ces types de connexions. Ce n'est pas une brèche de sécurité parce que les méthodes doivent être utilisées comme une paire. Vous ne pouvez pas utiliser cela pour simplement essayer de jumeler avec n'importe quel vieux appareil Bluetooth.

vous pouvez également faire des communications de courte portée sur NFC, mais ce matériel est moins important sur les appareils Android. Choisissez-en une et n'essayez pas de créer une solution qui utilise les deux.

Espère que ça Aide!

P. S. Il y a aussi des moyens de le faire sur de nombreux appareils avant 2.3 en utilisant la réflexion, parce que le code existait...mais je ne le recommande pas nécessairement pour les applications de production à grande échelle. Voir ce StackOverflow .

53
répondu Devunwired 2017-05-23 12:18:00

Eh bien, cela devrait vraiment être divisé en 2 parties:

  1. pouvez-vous jumeler 2 appareils Bluetooth sans passer par une poignée de main Bluetooth? Non, tu ne peux pas. C'est inscrit dans le protocole, donc il n'y a pas d'autre solution.
  2. Pouvez-vous effectuer la poignée de main sans interface utilisateur? Oui, vous pouvez: c'est juste un code.

Je ne suis pas sûr comment vous le faites dans Windows land, mais dans * nix land Il ya fonctions enfouies dans la pile Bluez qui vous permettent de recevoir des notifications sur quand un nouvel appareil apparaît, et lui envoyer le code d'appariement (clairement il doit y avoir ces fonctions: ce sont ce que l'interface utilisateur utilise). Avec suffisamment de temps et d'expérience, je suis sûr que vous pourriez trouver comment écrire votre propre version de L'application de Réglages Bluetooth qui en quelque sorte:

  • détecté un nouveau dispositif était arrivé
  • a regardé le nom / adresse bluetooth mac et j'ai vérifié une base de données interne pour le code d'appariement à utiliser.
  • A Envoyé le code d'appariement et a complété l'opération

tout sans avoir à pop up une interface utilisateur.

si vous allez de l'avant et écrivez le code, j'aimerais mettre la main dessus.

4
répondu Femi 2011-05-04 16:16:57

courte réponse: Quand j'envoie des fichiers entre des périphériques avec OBEX, Je ne suis presque jamais invité à faire la paire, donc c'est certainement possible.

1) une application et le dispositif lui-même peuvent chacun être réglés à des modes d'authentification "need/not-need authentication", de sorte que souvent il n'y avait pas d'exigence d'appariement. Par exemple, la plupart des serveurs OBEX (OPP) n'ont pas besoin d'authentification du tout, de sorte qu'il n'y a pas besoin d'appariement/liaison.

présumément "Wireless Designs "' S réponse était couvrant ce cas.

2) alors si l'appariement était requis par le dispositif / app:

2.1) avant v2.1 pour l'appariement alors les deux appareils ont eu besoin d'avoir passphrase/PINs correspondant. Donc, soit cela nécessitait l'implication de l'utilisateur (pour entrer les PINs) ou la connaissance dans le softwareto connaître le PIN: soit défini dans l'application if pin callback send pin="1234" , ou smarts dans L'OS comme BlueZ et Win7 (voir Diapo 20 à mon Bluetooth dans Windows 7 doc ) qui a la logique comme: if(remotedevice=headset) then expectedPin ="0000" . Je ne sais pas ce que fait Androïde

2.2) dans v2.1 pairage simple sécurisé (SSP) a été ajouté. Qui change l'appariement en:

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

de 32feet.NET 's BluetoothWin32Authentication user guide , voir aussi les sections SSP en [ 1 ]

donc pour avoir l'appariement être des besoins non sollicités soit "JustWorks" ou "hors bande" par exemple votre NFC suggestion.

Espère que ça aide...

4
répondu alanjmcf 2011-05-04 19:39:11

Oui il est possible en théorie tel que défini par le cahier des charges. Toutefois, il n'y a pas encore de mise en œuvre pratique qui permettrait cela.

Consultez: le NFC Forum de Connexion de Transfert de Spécifications Techniques http://www.nfc-forum.org/specs/spec_list /

citant la spécification relative à la sécurité - "Le Transfert Protocole exige la transmission de l'accès au réseau de données et d'informations d'identification (le données de configuration de l'entreprise) pour permettre à un appareil de se connecter à un réseau sans fil fourni par un autre appareil. En raison de la proximité nécessaire à la communication entre les dispositifs NFC et les étiquettes, il est difficile, mais pas impossible, d'espionner les données de configuration du support sans la reconnaissance du propriétaire légitime des dispositifs. La Transmission des données de configuration du support à des dispositifs pouvant être rapprochés est considérée comme légitime dans le cadre de la présente spécification."

2
répondu Xabi 2011-05-04 16:08:58

BT Version 2.0 ou moins - vous devriez être en mesure de jumeler/coller en utilisant un code PIN standard, entré par programmation par exemple 1234 ou 0000. Ce n'est pas très sûr, mais de nombreux appareils BT le font.

version 2.1 ou supérieure de BT-le modèle de couplage simple sécurisé "just works" peut être utilisé en Mode 4. Il utilise le cryptage elliptique (peu importe ce que c'est) et est très sûr, mais est ouvert à L'homme dans les attaques du milieu. Par rapport à l'ancienne approche "0000" code pin, il est à des années-lumière d'avance. Ce ne nécessite aucune entrée utilisateur.

c'est selon les spécifications Bluetooth, mais ce que vous pouvez utiliser dépend de ce verson de la norme Bluetooth votre stack prend en charge et ce que L'API vous avez.

0
répondu Simon Peverett 2011-05-16 21:04:15

si vous demandez si vous pouvez coupler deux appareils sans que L'utilisateur n'approuve jamais le couplage, non il ne peut pas être fait, c'est une caractéristique de sécurité. Si vous êtes jumelé sur Bluetooth il n'est pas nécessaire d'échanger des données sur NFC, il suffit d'échanger des données sur le lien Bluetooth.

Je ne pense pas que vous puissiez contourner la sécurité Bluetooth en passant un paquet d'authentification sur NFC, mais je pourrais me tromper.

-2
répondu Chris 2011-05-04 15:07:21