web-dev-qa-db-ja.com

RAMを信頼しないOS?

すべてのRAMを暗号化してキーをCPUキャッシュに保存し、マシンがコールドブート攻撃に対して耐性を持つようにする)カーネルを作成することは可能ですか?

7
d33tah

L1キャッシュ内のデータは、L1キャッシュのみに残りません。ハードウェアがそれをメインにコピーしますRAM=透過的かつほぼ即座に。少なくとも最新のCPUを操作してください。機密データをRAMから除外したい場合は、レジスタのみに保持する必要があります。コンテキストスイッチも、指定されたRAMスペースにレジスタを自動的にフラッシュするため、問題になります。

理論的にはレジスタでのみ動作し、CPUでのみ暗号化と復号化を実行することは可能ですが、正しく実行することは困難であり(更新を伴うランダムアクセス暗号化は弱点なしに設計することが困難です)、非常に高価になります(多かれ少なかれ仮想マシンを実装する必要があり、各オペコードは復号化を伴うため、少なくとも50倍の速度低下が予想されます).

[〜#〜] tresor [〜#〜] プロジェクトはスコープがはるかに制限されているようです。 一般的なデータをRAMに漏洩することから保護する必要はなく、暗号化キーのみを保護します。私の意見では、これは要点を逃しています。 thatデータは機密であり、機密情報として保管する必要があるため、データを暗号化します。暗号化キーは機密性を高めるため、価値の高いターゲットですが、onlyターゲットではありません。

13
Tom Leek

...すべての[the] RAM=暗号化して、キーをCPUに保存します[?]

はい、CPUレジスタにキーを格納するカーネルを作成できます。 SSEプロセッサ(基本的に実行中のIntelアーキテクチャ)には、キーを格納できる128ビットの「XMM」レジスタがあり、最新のIntelチップはハードウェアベースのAESを実行できます。1つのレジスタ、1つのキー、1つのCPU命令。

多目的レジスターを失い、非常に頻繁にカーネルモードに入れ替える(大規模なパフォーマンスキラー)か、カーネルのキーで暗号化された独自のキーを各アプリケーションに与える必要がありますが、機能します。邪魔な点は、 コンテキストスイッチ は通常、レジスタ値をRAMに置くことです。どのアプリケーションでもすべての汎用レジスターを使用できるため、カーネル内のキーやその他のものはバンプする必要があります。

本当に必要なのは、リング0でのみアドレス指定できる永続的なレジスタです。これらは コントロールレジスタ として存在することはわかっていますが、汎用レジスタがそのために用意していることはわかりませんでした。次に、d33tahの [〜#〜] tresor [〜#〜] へのリンクを調べたところ、誰かが実際に実装していることがわかりました。警告などを読んでください。

6
Jeff Ferland