web-dev-qa-db-ja.com

システム暗号化キーはRAM

スレッドのタイトルには、システム暗号化キーがRAMまたはCPUに保持され、ブート攻撃を使用して抽出できる期間を知りたいと書いてあります。 LinuxとLUKSの場合の暗号化は、CPUアフェイクによって処理される仮想メモリによって処理されることをどこかで読みました...

ディスクの暗号化またはシステムの暗号化がどのように機能するのか本当にわかりません。起動プロセス中にパスワードを入力すると、コンピューターをシャットダウンするまでシステムは完全に復号化されますか、それとも暗号化された状態であり、システムは常に暗号化を必要としますか?ドキュメントで作業するための鍵?最後のケースでは、キーがしばしばRAMまたはCPUを使用していて、したがって抽出可能であることが論理的です。

質問の背景は、ブート攻撃とDMA攻撃に抵抗するPCに小さな監視システムが欲しいということです。オフラインで写真を撮りたいのですが、インターネット接続が突然途切れる可能性があります。

DMA攻撃を不可能にするPCIスロットのないネットブックを考えており、Linuxカーネルにパッチを適用して、CPUに暗号化を処理させ、さらにRAMからスクリーンロッカーパスワードの残りを上書きするsdmemスクリプトを上書きします-これは十分ですか?

7

ディスク暗号化とは、ディスク上のデータを常に暗号化することです。復号化されたファイルをディスクに書き戻すと、そのデータが漏洩するリスクが発生し(その時点でマシンが盗まれた場合)、シャットダウン時に再度暗号化する必要があります。典型的な機械式ハードディスクは約120 MB/sでデータを読み書きするので、復号化プロセスがそれより高速であり、ディスクがボトルネックです。マシンを起動するとき、あなたは確かに15分間待たないでください。

これはすべて、ファイルが読み取られるときに解読がオンザフライで行われることを意味します。結果として、マシンが稼働している間は復号化が行われるため、復号化キーはRAMのどこかに存在し、そこにとどまる必要があります。

同様に、一部のファイルを変更して保存したい場合(次の再起動後に新しいファイルを取得するため)、暗号化キーを必ず使用する必要があります。

ただし、RAMにキーを保持しないことを想定できる(少なくとも)2つの方法があります。

  • 完全なファイルシステムを読み取り、RAMベースのディスクに復号化できます。そこでは、復号化が一度行われ、その後鍵が破棄される可能性があります。もちろん、これにより、ファイルシステムの合計サイズがRAMに収まるサイズに制限されます。 1または2ギガバイト。さらに、すべての書き込みは破棄されます(概念的には、変更を保存するために 非対称暗号化 を使用し、次回の起動時に暗号化されたファイルシステムに組み込むことができますが、設計と開発にかなりの労力がかかる可能性があります)。

  • [〜#〜] tresor [〜#〜] プロジェクトは、CPUレジスタにキーを保持し、これらのレジスタをRAMにフラッシュできないようにすることで暗号化と復号化を行うことを目的としています。これは コールドブート攻撃 に対する防御のためです。攻撃者は、前にあったように、CPUレジスタではなく、内容全体をよく見ることができますRAM=攻撃:DMA=を実行できる攻撃者は、レジスタからキーを抽出する悪意のあるコードを挿入できるため、保護が完全であると見なすことはできません。

考慮すべき重要なポイントは、ディスク暗号化を使用してデータの機密性を維持することですが、データにアクセスするときも、データをRAMそれを処理するために。たとえば、テキストドキュメントのコンテンツを見る場合、それを見ると、ドキュメントデータはビューアアプリケーション空間に暗号化されずに存在している必要があります。暗号化キーの保護はすべて問題ありませんが、攻撃者があなたのRAMを読み取ることができると想定されている場合、データを直接略奪する可能性があります。したがって、 dataの全体像をアドレス指定せずに暗号化キーの場所を特定することは重要です。ほとんどの実際的なコンテキストでは、コールドブートを心配することはあまり意味がありません。ディスク暗号化キーを取得する攻撃-世界中のすべてのTRESORが存在する場合でも、コールドブート攻撃は依然としてほとんど気になります。

9
Thomas Pornin