android für - Bluetooth-Kopplung ohne Benutzerbestätigung




bt geht (6)

Kann ich zwei Geräte über Bluetooth miteinander verbinden, ohne dies in der Benutzeroberfläche bestätigen zu müssen, akzeptieren Sie die Kopplung dieser Geräte. Kann ich einige zusätzliche Daten beispielsweise über NFC austauschen und dann diese beiden Geräte über Bluetooth ohne zusätzliche Benutzeraktionen sicher miteinander verbinden?


Answers

Genau aus diesem Grund wurde createInsecureRfcommSocketToServiceRecord() zu BluetoothDevice hinzugefügt, das mit Android 2.3.3 (API Level 10) ( SDK Docs ) anfing, bevor es keine SDK-Unterstützung dafür gab. Es wurde entwickelt, um Android eine Verbindung zu Geräten ohne Benutzerschnittstellen für die Eingabe eines PIN-Codes (wie ein eingebettetes Gerät) zu ermöglichen, aber es kann auch zum Einrichten einer Verbindung zwischen zwei Geräten ohne Benutzer-PIN-Eingabe verwendet werden.

Die Korollar-Methode listenUsingInsecureRfcommWithServiceRecord() in BluetoothAdapter wird verwendet, um diese Arten von Verbindungen zu akzeptieren. Es ist keine Sicherheitsverletzung, da die Methoden als Paar verwendet werden müssen. Sie können damit nicht einfach versuchen, ein Pairing mit einem alten Bluetooth-Gerät durchzuführen.

Sie können auch Kurzstrecken-Kommunikation über NFC durchführen, aber diese Hardware ist auf Android-Geräten weniger verbreitet. Wählen Sie unbedingt eine aus und versuchen Sie nicht, eine Lösung zu erstellen, die beides verwendet.

Ich hoffe, das hilft!

PS Es gibt auch Möglichkeiten, dies auf vielen Geräten vor 2.3 mit Reflektion zu tun, weil der Code existiert ... aber ich würde dies nicht unbedingt für massenverteilte Produktionsanwendungen empfehlen. Sehen Sie sich diesen StackOverflow .


Nun, das sollte wirklich in 2 Teile aufgeteilt werden:

  1. Können Sie zwei Bluetooth-Geräte koppeln, ohne einen Bluetooth-Pairing-Handshake zu durchlaufen? Nein, das kannst du nicht. Das ist in das Protokoll eingebacken, so dass es keinen Weg gibt.
  2. Können Sie den Handshake ohne Benutzerschnittstelle durchführen? Ja, das kannst du: Das ist nur Code.

Ich bin nicht sicher, wie Sie es in Windows Land, aber in * nix Land gibt es Funktionen in der Bluez-Stack verborgen, die Sie Benachrichtigungen erhalten können, wenn ein neues Gerät erscheint, und senden Sie den Pairing-Code (eindeutig dort sein muss diese Funktionen: das sind, was die Benutzeroberfläche verwendet). Mit genügend Zeit und Erfahrung, bin ich mir sicher, dass Sie herausfinden könnten, wie Sie Ihre eigene Version der App Bluetooth-Einstellungen schreiben, die irgendwie:

  • Erkannt, dass ein neues Gerät angekommen ist
  • Sah die Name / Bluetooth-Mac-Adresse und überprüfte einige interne Datenbank für den Pairing-Code zu verwenden.
  • Hat den Kopplungscode gesendet und den Vorgang abgeschlossen

Alles ohne eine Benutzeroberfläche zu öffnen.

Wenn Sie fortfahren und den Code schreiben, würde ich es gerne in die Finger bekommen.


Kurze Antwort: Wenn ich Dateien zwischen Geräten mit OBEX sende, werde ich fast nie zum Pairen aufgefordert, also ist es durchaus möglich.

1) Eine Anwendung und das Gerät selbst können jeweils auf Authentifizierungsmodi eingestellt werden, die nicht benötigt werden, so dass häufig keine Paarung erforderlich ist. Zum Beispiel benötigen die meisten OBEX (OPP) Server überhaupt keine Authentifizierung, so dass kein Pairing / Bonden erforderlich ist.

Vermutlich hat "Wireless Designs" die Antwort auf diesen Fall gegeben.

2) Wenn das Pairing für das Gerät / die App erforderlich war:

2.1) Vor Version 2.1 für die Kopplung mussten die beiden Geräte übereinstimmende Passphrasen / PINs haben. Dies erforderte entweder Benutzereinbindung (Eingabe der PINs) oder Kenntnisse in der Software, um die PIN zu kennen: entweder in der App definiert, if pin callback send pin="1234" , oder Smart im Betriebssystem wie BlueZ und Win7 (siehe Folie 20 unter meine Bluetooth in Windows 7 doc ), die Logik wie if(remotedevice=headset) then expectedPin ="0000" hat: if(remotedevice=headset) then expectedPin ="0000" . Ich weiß nicht, was Android macht

2.2) In Version 2.1 wurde Secure Simple Pairing (SSP) hinzugefügt. Was ändert sich die Paarung zu:

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

Im BluetoothWin32Authentication-Benutzerhandbuch von 32feet.NET finden Sie auch die SSP-Abschnitte in [ 1 ].

Damit die Paarung nicht erforderlich ist, muss entweder "JustWorks" oder "Out-of-Band" verwendet werden, z. B. Ihr NFC-Vorschlag.

Ich hoffe, das hilft...


Ja, es ist theoretisch möglich, wie in der Spezifikation definiert. Bisher gibt es dafür noch keine praktische Umsetzung.

Siehe: NFC Forum Connection Handover Technische Spezifikation http://www.nfc-forum.org/specs/spec_list/

Zitat aus der Spezifikation bezüglich der Sicherheit - "Das Übergabeprotokoll erfordert die Übertragung von Netzwerkzugangsdaten und Berechtigungsnachweisen (die Trägerkonfigurationsdaten), damit ein Gerät eine Verbindung zu einem drahtlosen Netzwerk herstellen kann, das von einem anderen Gerät zur Verfügung gestellt wird NFC-Geräte und Tags, Abhören von Trägerkonfigurationsdaten ist schwierig, jedoch nicht unmöglich, ohne Erkennung durch den rechtmäßigen Besitzer der Geräte Die Übertragung von Trägerkonfigurationsdaten an Geräte, die in unmittelbare Nähe gebracht werden können, wird im Rahmen dieser Spezifikation als legitim erachtet . "


BT-Version 2.0 oder weniger - Sie sollten in der Lage sein, einen Standard-PIN-Code zu koppeln / zu verbinden, der programmatisch zB 1234 oder 0000 eingegeben wird. Dies ist nicht sehr sicher, aber viele BT-Geräte tun dies.

BT Version 2.1 oder höher - Mode 4 Secure Simple Pairing "funktioniert einfach" -Modell kann verwendet werden. Es verwendet eine elliptische Verschlüsselung (was auch immer das ist) und ist sehr sicher, aber offen für Man In The Middle Angriffe. Verglichen mit dem alten '0000' PIN-Code-Ansatz ist es Lichtjahre voraus. Dies erfordert keine Benutzereingabe.

Dies hängt von den Bluetooth-Spezifikationen ab, aber was Sie verwenden können, hängt davon ab, welche Version des Bluetooth-Standards Ihr Stack unterstützt und welche API Sie haben.


Great Work es funktioniert gut für mich bitte etwas Änderung in Ihrem Code es wird perfekt funktionieren ie

mPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); 

to 

mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);




android bluetooth nfc