Question

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

Était-ce utile?

La solution

Ce besoin est exactement pourquoi createInsecureRfcommSocketToServiceRecord() a été ajouté à BluetoothDevice à partir d'Android 2.3.3 (API Niveau 10) (Docs SDK) ... avant cela, il n'y avait pas de support SDK pour cela. Il a été conçu pour permettre à Android de se connecter à des périphériques sans interfaces utilisateur pour entrer un code PIN (comme un périphérique intégré), mais il est tout aussi utilisable pour configurer une connexion entre deux appareils sans entrée de broche utilisateur.

La méthode corollaire listenUsingInsecureRfcommWithServiceRecord() dans BluetoothAdapter est utilisé pour accepter ces types de connexions. Ce n'est pas une rupture de sécurité car les méthodes doivent être utilisées comme une paire. Vous ne pouvez pas l'utiliser pour simplement tenter de s'associer à n'importe quel ancien périphérique Bluetooth.

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

J'espère que cela pourra aider!

PS Il existe également des moyens de le faire sur de nombreux appareils avant 2.3 Utilisation de la réflexion, car le code existait ... mais je ne recommanderais pas nécessairement cela pour les applications de production distribuées en masse. Regarde ça Stackoverflow.

Autres conseils

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

  1. Pouvez-vous associer 2 appareils Bluetooth sans passer par une poignée de main de couple Bluetooth? Non, tu ne peux pas. C'est cuit dans le protocole, il n'y a donc aucun moyen de contourner cela.
  2. Pouvez-vous effectuer la poignée de main sans interface utilisateur? Oui, vous pouvez: c'est juste du code.

Je ne sais pas comment vous le faites dans Windows Land, mais dans * Nix Land, il y a des fonctions enfouies dans la pile Bluez qui vous permettent de recevoir des notifications sur le moment où un nouvel appareil apparaît, et l'envoyez le code de couple (il doit clairement y avoir Ces fonctions: c'est ce que l'interface utilisateur utilise). Compte tenu de suffisamment de temps et d'expérience, je suis sûr que vous pourriez comprendre comment rédiger votre propre version de l'application Bluetooth Paramètres qui: d'une manière ou d'une autre:

  • Détecté un nouvel appareil était arrivé
  • J'ai regardé l'adresse MAC nom / Bluetooth et ont vérifié une base de données interne pour le code de couple à utiliser.
  • Envoyé le code de couple et terminé l'opération

Tout sans avoir à faire apparaître une interface utilisateur.

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

Réponse courte: lorsque j'envoie des fichiers entre les appareils avec OBEX, je ne suis presque jamais invité à coupler, donc c'est certainement possible.

1) Une application et le périphérique lui-même peuvent chacun être définis sur des modes d'authentification nécessitant / non nécessaires, il n'y avait donc aucune exigence de couple. Par exemple, la plupart des serveurs OBEX (OPP) n'ont pas besoin d'aucune authentification, il n'est donc pas nécessaire de l'appariement / de la liaison.

Vraisemblablement, la réponse de "Wireless Designs" couvrait cette affaire.

2) Ensuite, si l'appariement était requis par l'appareil / l'application:

2.1) Avant V2.1 pour l'appariement, les deux périphériques devaient avoir une phrase passante / broches correspondante. Donc, cela a besoin d'une implication des utilisateurs (pour entrer dans les épingles) ou des connaissances dans le softwareto connaître la broche: soit défini dans l'application if pin callback send pin="1234", ou intelligemment dans le système d'exploitation comme Bluez et Win7 (voir Diaposité 20 sur mon Bluetooth dans Windows 7 Doc) qui a une logique comme: if(remotedevice=headset) then expectedPin ="0000". Je ne sais pas ce que fait Android

2.2) Dans V2.1, un couple simple sécurisé (SSP) a été ajouté. Qui change de couple à:

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 Guide de l'utilisateur Bluetoothwin32Feet.NET, voir aussi les sections SSP dans [1]

Donc, avoir un appariement, il faut des besoins non formulés "Justworks" ou "hors bande" par exemple votre suggestion NFC.

J'espère que cela pourra aider...

Oui, il est possible en théorie tel que défini par la spécification. Cependant, il n'y a pas encore de mise en œuvre pratique qui le permettrait.

Report: NFC Forum Connection Repandiver Spécifications techniqueshttp://www.nfc-forum.org/specs/spec_list/

Citant de la spécification concernant la sécurité -"Le protocole de transfert nécessite la transmission des données et des informations d'identification d'accès au réseau (les données de configuration de l'opérateur) pour permettre à un appareil de se connecter à un réseau sans fil fourni par un autre appareil. En raison de la proximité nécessaire pour la communication entre les périphériques NFC et les étiquettes, écoute de l'opérateur Les données de configuration sont difficiles, mais pas impossibles, sans reconnaissance par le propriétaire légitime des appareils. La transmission des données de configuration des opérateurs sur les appareils qui peuvent être amenés à proximité sont jugés légitimes dans le cadre de cette spécification. "

BT Version 2.0 ou moins - Vous devriez être en mesure de coupler / se lier à l'aide d'un code PIN standard, entré par programme, par exemple 1234 ou 0000. Ce n'est pas très sécurisé, mais de nombreux appareils BT le font.

BT Version 2.1 ou plus - Mode 4 Secure Secure Pailing "Just Works" Le modèle peut être utilisé. Il utilise un cryptage elliptique (quoi qu'il en soit) et est très sécurisé mais est ouvert à l'homme dans les attaques moyennes. Comparé à l'ancienne approche du code PIN «0000», il est léger des années à venir. Cela ne nécessite aucune entrée utilisateur.

C'est selon les spécifications Bluetooth, mais ce que vous pouvez utiliser dépend de la Verson de la norme Bluetooth que votre pile prend en charge et de l'API que vous avez.

Si vous demandez si vous pouvez coupler deux appareils sans que l'utilisateur n'approuve jamais l'appariement, non, il ne peut pas être fait, c'est une fonctionnalité de sécurité. Si vous êtes jumelé sur Bluetooth, il n'est pas nécessaire d'échanger des données via NFC, échangez simplement 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top