ユーザー確認なしのBluetoothペアリング
質問
ユーザーインターフェイスでこれを確認する必要なく、Bluetooth上の2つのデバイスをペアリングできますか?このデバイスのペアリングを受け入れてください。 NFCなど、追加のデータを交換してから、これらの2つのデバイスを追加のユーザーアクションなしで安全にペアリングできますか?
解決
この必要性がまさにその理由です createInsecureRfcommSocketToServiceRecord()
に追加されました BluetoothDevice
Android 2.3.3から始まる(APIレベル10)(SDKドキュメント)...それ以前は、これに対するSDKサポートはありませんでした。 Androidは、PINコード(組み込みデバイスなど)を入力するためにユーザーインターフェイスのないデバイスに接続できるように設計されていますが、ユーザーPINエントリのない2つのデバイス間の接続を設定するのと同じくらい使用できます。
帰結方法 listenUsingInsecureRfcommWithServiceRecord()
の BluetoothAdapter
これらのタイプの接続を受け入れるために使用されます。メソッドはペアとして使用する必要があるため、セキュリティ侵害ではありません。これを使用して、古いBluetoothデバイスと単純にペアリングしようとすることはできません。
NFCを介して短距離通信を行うこともできますが、そのハードウェアはAndroidデバイスではあまり目立ちません。間違いなく1つを選んで、両方を使用するソリューションを作成しようとしないでください。
それが役立つことを願っています!
PSコードが存在していたため、反射を使用する前に多くのデバイスでこれを行う方法もあります...しかし、私は必ずしも大量分散生産アプリケーションにこれをお勧めしません。これを参照してください スタックオーバーフロー.
他のヒント
まあ、これは本当に2つの部分に分割されるべきです:
- Bluetoothのペアリングハンドシェイクを通過せずに、2つのBluetoothデバイスをペアリングできますか?いいえ、できません。それはプロトコルに焼き付けられているので、これを回避する方法はありません。
- ユーザーインターフェイスなしで握手を実行できますか?はい、できます:それは単なるコードです。
Windows Landでどのように行うかはわかりませんが、 *nix Landには、新しいデバイスが表示されたときの通知を受け取ってペアリングコードを送信できるように、Bluezスタックに埋め込まれた関数があります(明らかに必要です。これらの機能:それらはユーザーインターフェイスが使用するものです)。十分な時間と経験を考えると、どうにかしてBluetooth設定アプリの独自のバージョンを作成する方法を理解できると確信しています。
- 検出された新しいデバイスが到着しました
- 名前/Bluetooth Macアドレスを見て、使用するペアリングコードの内部データベースを確認しました。
- ペアリングコードを送信し、操作を完了しました
すべてユーザーインターフェイスをポップアップする必要はありません。
あなたが先に進んでコードを書いたら、私はそれを手に入れたいと思います。
簡単な答え:OBEXを使用してデバイス間でファイルを送信すると、ペアリングを促されることはほとんどないので、確かに可能です。
1)アプリケーションとデバイス自体をそれぞれ設定することができます/ニード認証モードを必要とするため、ペアリングの要件はありませんでした。たとえば、ほとんどのOBEX(OPP)サーバーは認証をまったく必要としないため、ペアリング/ボンディングは必要ありません。
おそらく「ワイヤレスデザイン」の答えがそのケースをカバーしていた。
2)デバイス/アプリでペアリングが必要な場合:
2.1)ペアリング用のV2.1の前に、2つのデバイスが一致するパスフレーズ/ピンを持つ必要がありました。したがって、これには(ピンを入力するために)ユーザーの関与が必要なか、ソフトウェアの知識がピンを知っています:アプリで定義されています if pin callback send pin="1234"
, 、またはbluezやwin7のようなOSのスマート(参照 Windows 7 DocのBluetoothで20をスライドさせます)次のようなロジックがあります: if(remotedevice=headset) then expectedPin ="0000"
. 。 Androidが何をしているのかわからない
2.2)v2.1で安全な単純ペアリング(SSP)が追加されました。ペアリングを次のように変更します。
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
から 32feet.netのbluetoothwin32authenticationユーザーガイド, 、[]のSSPセクションも参照してください。1]
したがって、ペアリングを採用していないことは、「JustWorks」または「帯域外」のいずれかのNFC提案のいずれかを必要とします。
それが役立つことを願っています...
はい、理論的には仕様で定義されています。ただし、これを許可する実用的な実装はまだありません。
参照:NFCフォーラム接続ハンドオーバー技術仕様http://www.nfc-forum.org/specs/spec_list/
セキュリティに関する仕様から引用 -「ハンドオーバープロトコルでは、1つのデバイスが別のデバイスが提供するワイヤレスネットワークに接続できるようにするために、ネットワークアクセスデータと資格情報(キャリア構成データ)の送信が必要です。NFCデバイスとタグ間の通信に必要な近接性のため、キャリアの盗聴構成データは困難ですが、デバイスの正当な所有者による認識がなければ不可能ではありません。キャリア構成データを近接にすることができるデバイスへの送信は、この仕様の範囲内で合法と見なされます。」
BTバージョン2.0以下 - 標準のピンコードを使用してペア/ボンドを使用できるはずです。プログラムではプログラムで入力しました。たとえば1234または0000です。これはそれほど安全ではありませんが、多くのBTデバイスがこれを行います。
BTバージョン2.1以下-Mode 4セキュアシンプルペアリング「Just Work」モデルを使用できます。楕円形の暗号化(それが何であれ)を使用し、非常に安全ですが、中間攻撃では人に開かれています。古い「0000」ピンコードアプローチと比較して、それは数年先です。これには、ユーザーの入力は必要ありません。
これはBluetooth仕様によるものですが、使用できるものは、スタックがサポートしているBluetooth標準のVersonとAPIを持っているものによって異なります。
ユーザーがペアリングを承認せずに2つのデバイスをペアリングできるかどうかを尋ねている場合、それはできません。これはセキュリティ機能です。 Bluetoothでペアになっている場合は、NFCを介してデータを交換する必要はありません。Bluetoothリンクでデータを交換するだけです。
NFCを介して認証パケットを渡すことでBluetoothセキュリティを回避できるとは思いませんが、間違っている可能性があります。