簡潔な質問:システムを別のコンピュータにコピーして実行することができないように(非常に難しいように)、パーティション暗号化をハードウェアに接続することは可能ですか?
完全な物語:デバイス内部でLinuxが動作する小型組込みPCを開発しました。デバイスの電源が入ると、内蔵PCが起動し、電源が切れるまでユーザーにデータが表示されます。
このPCのソフトウェアは私たちのビジネス競争上の優位性であるため、できるだけアクセスできないようにしたい(PSを参照)。
だからアイデアは、システムフラッシュメモリまたは少なくともその一部を暗号化することです。ただし、これにより、フラッシュメモリ全体をコピーすることが可能になります。次に、次のアイデアは、暗号化をハードウェアに接続することです。しかし、どのように?
PS:すべてがリバースエンジニアリングのテーマであることを知っています。しかし、それでもリバースエンジニアリングが日常的な製品になるようにしておく理由はありません。
PPS私は盗作について妄想的な人ではありません。残念ながら、私たちは競争相手がその名前でスキルを盗むことを試みることを知っています =)
答え1
以下を使用して、暗号化されたデータを特定のデバイスにバインドできます。信頼できるプラットフォームモジュール(総生産管理).これらのことはかなり一般的です。x86過去のノートブックも多くのサーバーにインストールできます。
TPMを使用すると、モジュールにのみ存在する暗号化キーを生成し、そのキーを使用してデータを暗号化できます。バックアップできないキーを生成する場合は、そのキーを介してのみデータを暗号化できます。 TPMこれにより、元のストレージデバイスをコピーしても役に立ちません。 Linuxでは、次のものを使用できます。パンツこれを管理するため。
ARMプラットフォームでは、保存されたキーを使用して同様の操作を実行できます。信頼エリア、しかし、詳細はわかりません。
答え2
フラッシュメモリが内蔵されているマイクロプロセッサは外部から読み取ることができません。多くの最新のARMチップにはこの機能があります。対応するフラッシュメモリには、外部ストレージへのアクセスに必要なコードと暗号化キーを入れることができます。
答え3
この場合、内蔵PCが動作するためにはこれらの秘密を知る必要があるため、暗号化の秘密に実際に依存することはできず、攻撃者もこれを知ることができます。
1つの解決策は、外部から読めない秘密を見つけるか生成することです(@psusiが提案したものと似ています)。お持ちのハードウェアが何であるかを正確に知らないと、推奨事項を提示するのは難しいです。おそらく、プロセッサのシリアル番号は良い選択かもしれませんが、JTAGを介して読み取ることができるかどうか疑問に思います。
この問題を解決する別の方法は難読化です。復号化プロセスで始まるコード(およびパスワードのソースを明確にするコード)ではなく、プログラムの任意の部分で複数のパスワードを使用するコードを開発する必要があります。たとえば、バッファサイズをどこかにハードコーディングする代わりに、プロセッサのシリアル番号のn番目のビットに1000を掛けて使用できます。これにより、さまざまなハードウェア構成でコードが破損する可能性があり、攻撃者がどの秘密をどのように使用するかを知る前に多くのデバッグが必要になります。
より詳細な回答が必要な場合は、詳細も提供する必要があります。脅威モデルは何ですか(類似したハードウェアへの違法コピー、独自のアルゴリズムの分解など)。あなたのハードウェアは何ですか?関連する制限は何ですか? (JTAGピンを切り取ることができないと言われましたが、その理由は何ですか?)
答え4
私のサーバーは、CPUタイプ、使用可能なメモリ、ネットワークMACアドレスなどのハードウェアデータに基づいて暗号化キーを生成します。これにより、コンピュータは監督なしで自己再起動でき、ディスクを削除して別のサーバーに挿入すると復号化できなくなります。それ自体。
ただし、組み込みシステムまたはルートアクセス権を持っているどこでもdmsetup table --showkeys
。
だから私の考えでは、最良の選択肢は、ハードウェアに暗号化を適用することです。
2番目に良いオプションは、上記のコマンドが使用されている暗号化キーを照会できないように、カーネルに何らかの方法でパッチを適用することですdmsetup
。また、鍵生成がカーネル自体に焼かれ、暗号鍵を取得できなくなる可能性があります。 Initramfsでも同様です。
メモリダンプからそれを得ることはまだ可能ですが、それはまだあなたができる最善です...
もちろん、実行中のシステムですべてのデータが暗号化されていないことを確認し、誰かがアクセス権を取得して暗号化されていないビューをコピーできる場合、これはすべて意味がありません。