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