Appleの Secure Enclave に似たものをゼロから構築しようとしています。
私がやったことは、Arduino用のAESライブラリを使用してセキュリティアプライアンスを作成することです。ランダムな暗号キーとコードはチップに保存され、ロックされます(読み取り不可)。サービスは、USBシリアルポートを介してのみ提供されます。 set_salt
、set_IV
、encrypt
、decrypt
などのコマンドがいくつかあります。非常に遅い以外はすべてうまくいきましたが、Arduinoには何が期待できますか?
これを便利にするために、コンピューター/電話に保存されている個別のAESキーを暗号化するために使用することを計画しています。このキーは、アプリケーションデータの暗号化に使用されます。私の質問です。アプリケーションデータはArduinoによって直接暗号化されないため、これにはセキュリティリスクがありますか?アプリデータの暗号化に使用されるキーがメモリダンプを通じて公開される可能性があることは理解していますが、アプリケーションプログラマはこのリスクを最小限に抑えることができます。 Arduinoとアプリケーション間の通信も暗号化する必要があることも理解しています。しかし、これら2つのほかに、キーを公開するリスクが可能な他の穴はありますか?
まず、AppleのSecure Enclaveは、ブートローダーがAppleによって署名されたコードのみを実行することを保証するモジュールです。それはあなたがやっていることではありません、あなたは ハードウェアセキュリティモジュール(HSM) を構築しようとしています。
ご存知のように、これを行う適切な方法は、HSMがすべての暗号化操作を内部で実行することにより、デバイスからキーが出ないようにすることです-ご指摘のとおり、暗号化/復号化キーをデバイスに渡すと、今あなたのコントロールの外に。したがって、理想的には、暗号化処理をオンボードで実行するのに十分な速度のプロセッサが必要です。
とはいえ、暗号化されたAESキーをデバイスのデータの横に保存し、HSMを使用して復号化することは、Android Full Disk Encryptionが機能する方法だと思います)。 フルディスク暗号化のAndroid Devページ を読んでアイデアを提案することをお勧めします。
この回答を拡張して、より広いコンテキストを提供します。
この質問は、あなたの「脅威モデル」が何であるか(つまり、「どのような種類の攻撃から保護しようとしているのですか?」) @JeffMedenと@supercatのコメントで指摘されているように、必要なセキュリティのレベルは、保護しようとしているものと、それをどのように保護するかによって異なります。
AESキーをメモリダンプから保護したいとおっしゃっていました。 AESキーは貴重ですが、キー自体が重要なのではなく、保護している情報が重要であるためです。あなたが言った:
アプリデータの暗号化に使用されるキーがメモリダンプを通じて公開される可能性があることを理解しています
これは考えるべきことですが、データ自体がメモリダンプを通じて公開される可能性がある場合は、ほとんど関係ありません。しかし、あなたが言うように、
しかし、アプリケーションプログラマはこのリスクを最小限に抑えることができます。
HSMがAESキーを復号化する場合でも、データを直接復号化する場合でも、いったんそれをユーザープログラムに戻すと、その保護を制御できなくなります。
結論:脅威モデルにPCで復号化されたデータの処理が含まれている一方で、メモリダンプを実行するのに十分強力な誰かから上記のデータを保護している場合、 USB周辺機器でできることは何もありません。また、PCで実行されているソフトウェアを記述する必要があります。
その行を下っていき始めると、 Trusted Execution Environment が発明されて、プレーンテキストデータのすべての処理が実際にはセキュアプロセッサ内で行われ、結果のみが "信頼できない」PC。
ここでのもう1つの大きな問題は、そのようなデバイスは気性に耐えられないということです。デバイスに物理的にアクセスできる人はだれでも、コードをバイパスして任意のシークレットを直接読み取ることができます。
確かなハッカーは、デバイスを再プログラムして(機能を開いたままにした場合)、上記と同じようにすることもできます。
既存のTPM、スマートカード、またはHVMソリューションを使用する代わりに、ホイールを再発明することの価値は何でしょうか。