Puis-je coupler deux appareils via Bluetooth sans avoir besoin de le confirmer dans l'interface utilisateur, accepte de coupler ces appareils. Puis-je échanger des données supplémentaires sur, par exemple NFC, puis coupler en toute sécurité ces deux appareils via Bluetooth sans aucune action supplémentaire de l'utilisateur?
Ce besoin est exactement la raison pour laquelle createInsecureRfcommSocketToServiceRecord()
a été ajoutée à BluetoothDevice
à partir de Android 2.3.3 (API Level 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 PIN (comme un appareil intégré), mais tout aussi utilisable pour établir une connexion entre deux appareils sans utilisateur PIN entry.
La méthode corollaire listenUsingInsecureRfcommWithServiceRecord()
dans BluetoothAdapter
est utilisée pour accepter ces types de connexions. Ce n'est pas une faille de sécurité car les méthodes doivent être utilisées par paire. Vous ne pouvez pas l'utiliser pour simplement essayer de vous associer à un ancien appareil Bluetooth.
Vous pouvez également faire des communications à courte portée via 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 ça t'as aidé!
P.S. Il existe également des moyens de le faire sur de nombreux appareils avant 2.3 en utilisant la réflexion, car le code existait ... mais je ne le recommanderais pas nécessairement pour les applications de production de masse. Voir ceci StackOverflow .
Eh bien, cela devrait vraiment être divisé en 2 parties:
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 lorsqu'un nouveau périphérique apparaît et de lui envoyer le code de couplage (il doit clairement y avoir ces fonctions: c'est 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 Paramètres Bluetooth qui:
Le tout sans avoir à ouvrir une interface utilisateur.
Si vous allez de l'avant et écrivez le code, j'AIMERAIS y mettre la main.
Réponse courte: lorsque j'envoie des fichiers entre des appareils avec OBEX, je ne suis presque jamais invité à associer, c'est donc certainement possible.
1) Une application et le périphérique lui-même peuvent chacun être réglés sur les modes d'authentification nécessaires/inutiles, donc souvent il n'y avait aucune exigence de couplage. Par exemple, la plupart des serveurs OBEX (OPP) ne nécessitent aucune authentification, il n'y a donc pas besoin de couplage/liaison.
On peut supposer que la réponse de "Wireless Designs" couvrait ce cas.
2) Si l'appairage était requis par l'appareil/l'application:
2.1) Avant la v2.1 pour le couplage, les deux appareils devaient avoir une phrase de passe/PIN correspondante. Donc, cela nécessitait soit la participation de l'utilisateur (pour saisir les codes PIN) soit des connaissances dans le logiciel pour connaître le code PIN: soit défini dans l'application if pin callback send pin="1234"
, Soit intelligent dans le système d'exploitation comme BlueZ et Win7 (voir Diapositive 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 Android fait
2.2) Dans la v2.1 Secure Simple Pairing (SSP) a été ajouté. Ce 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
À partir de guide de l'utilisateur BluetoothWin32Authentication de 32feet.NET , consultez également les sections SSP dans [ 1 ]
Donc, pour que l'appairage soit spontané, il faut soit "JustWorks" soit "Hors bande", par exemple votre suggestion NFC.
J'espère que ça t'as aidé...
Oui, cela est possible en théorie comme défini par la spécification. Cependant, il n'y a pas encore de mise en œuvre pratique qui permettrait cela.
Reportez-vous à: NFC Spécifications techniques de transfert de connexion au forum http://www.nfc-forum.org/specs/spec_list/
Citant la spécification concernant la sécurité - "Le protocole de transfert nécessite la transmission des données d'accès au réseau et des informations d'identification (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 grande proximité nécessaire à la communication entre NFC appareils et balises, l'écoute clandestine des données de configuration de l'opérateur est difficile, mais pas impossible, sans reconnaissance par le propriétaire légitime des appareils. Transmission des données de configuration de l'opérateur aux appareils pouvant être rapprochés est considérée comme légitime dans le cadre de cette spécification. "
BT version 2.0 ou inférieure - Vous devriez pouvoir vous coupler/lier en utilisant un code standard PIN, 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 supérieure - Le mode 4 Secure Pairing Pairing "fonctionne juste" peut être utilisé. Il utilise le cryptage elliptique (quel qu'il soit) et est très sécurisé mais est ouvert aux attaques Man In The Middle. Par rapport à l'ancienne approche du code PIN "0000", elle est à des années-lumière. Cela ne nécessite aucune entrée utilisateur.
Ceci est conforme aux spécifications Bluetooth, mais ce que vous pouvez utiliser dépend de la version de la norme Bluetooth prise en charge par votre pile et de l'API que vous avez.