2016-07-29 28 views
1

これは非常に特殊なケースかもしれませんが、誰かが私を助けてくれることを願っています。iOSのBluetooth経由でのTLSのような暗号化ですか?

私はBluetooth経由で周辺機器と話をする必要があります。ファームウェアを制御するデバイス。問題は次のとおりです。送信される情報が機密扱いになるため、誰も盗聴することがないようにする必要があります。つまり、暗号化された通信が必要です。

Bluetooth LE 4.2では暗号化がサポートされていますが、6sより古いiPhoneをサポートする必要があります。つまり、BLE 4.2はなく、暗号化は組み込まれていません。

つまり、暗号化を自分で構築する必要があります。周辺の開発者と私は、TLSハンドシェイクを使用して鍵交換を通信することで合意しました。

私は最後の数日間、解決策を探し、これに対処するために過ごしました。しかし、これは多くの人々が取り組んできたわけではない非常に特殊なケースであるようです。私が見つけることができるライブラリはすべてソケットに依存しています。 iOS用のソケットについては、Bluetooth以外のIPネットワーキングしか見つけられませんでした。

このようなBluetooth通信の経験がある人はいますか?それとも他の提案ですか?たぶん私は見落としているいくつかの明白な解決策?

感謝:)

+0

暗号化されたGATT属性は、iphone4以上、およびiPad mini以降(つまり、BLEを搭載したデバイス)でサポートされています。 BLE 4.2では、接続全体を暗号化するための暗号化とサポートが強化されていますが、主な目的はペアリング中のMITM攻撃に対する保護です。これはあなたにとって大きなリスクですか? – Paulw11

+0

周辺機器にどれくらいのRAM /コードスペースがあり、どのくらいの速さであなたのCPUがありますか? – Emil

+0

Pre-v4.2 BLEはAES-CCM暗号化をサポートしていますが、盗聴に対する保護は限られています。すなわち、盗聴者がiPhoneと周辺機器との間のペアリングプロセス中に存在していた場合、共有鍵を取得し、将来の暗号化通信中に聴取することができる。ペアリングプロセス中に盗聴者が存在しなかった場合、暗号化されたデータを解読することはできません。 – Preeti

答えて

3

TLSで全体の基盤は、信頼の上に構築、すなわち証明書、証明書発行局と認証チェーン、および送受信されたすべてのデータが認証されていることを確認すること。あなたはセキュリティ全体が認証部分に依存していると言うことができます。暗号化自体は非常に簡単です。あなたが答えなければならない1つの質問は次のとおりです:

あなたのプロトコルを模倣する周辺機器、すなわちあなたが製造していない周辺機器に接続することは可能でしょうか?そうでない場合、あなたの構内では、各周辺機器に秘密鍵などの(固有の)秘密が必要です。対応する公開鍵は、あなた自身のCAによって署名することができます。 CAの公開鍵は、スマートフォンアプリにバンドルすることができます(アプリ内には1つのキーしか必要ではなく、すべての周辺機器用に1つ必要です)。こうすることで、接続する周辺機器があなたの会社によって作成されていることを確認できます。この公開鍵は、であり、周辺機器の識別子はである必要があります。ペリフェラル内に秘密/公開鍵のペアがなく、パスキーの比較ができず、共通の対称鍵がない場合、私が知っている限り、中間者攻撃を避けることは不可能です。

各スマートフォンも最初は認証されていないため、後でセッションを再開する必要がある場合は、周辺機器の各スマートフォンに割り当てられた一意のIDを保存する必要があります。これを考慮して

、あなたは基本的に3つの異なるオプションがあります。

  1. はBLEのではなく、ソケット上ですべてのパケットを送信するためにmbedtlsのようないくつか存在TLSサーバソフトウェアを変更してください。私は、ソケットをブロックするという概念に基づいているようだから、これは自明ではないかもしれないと感じています。
  2. https://tools.ietf.org/html/rfc5246のTLS仕様を読んで、必要な機能だけを備えた最小限のTLSサーバーを実装してください。これは、RSA、AES、SHA-2、ECDHE、X.509証明書解析コード(ここではそれらを見つけることができます:https://tls.mbed.org/source-code)のような既存のビルディングブロックを使用し、最小限の実装だけを行う場合は、 )。
  3. TLSで重要な部分を抽出し、すべてのネゴシエーションパラメータなしで簡略化したプロトコルを作成します(ハードコード化できるため)。たとえば、すべての種類のメッセージ(ClientHelloなど)を解析したり、フラグメンテーションを処理したりする必要はありません。ランダム値、証明書、署名付きデータ、暗号化されたデータを直接送信するだけです。