絶対に安全なファイルシステム

この投稿に基づきます。 仮想の侵入者から保護する必要があるシステムがあるとします。 また、攻撃者がデータキャリアへの物理的アクセスを取得し、さらに不快なことに、物理的アクセス(物理的手段を適用する可能性がある)を直接取得できるとします。 次の条件を満たしている必要があります。







私はこれをどのように実装できるか知っていると思います。







まず第一に、上記および上記のすべては、そのようなファイルシステムを作成する可能性を議論すること以外は何も求めない理論的な考慮事項にすぎないことを言いたいと思います。



したがって、最初はディスクは固定サイズのブロックのセットで表され、ブロックは連続して0からNまで番号を付けることができます。ブロック番号iと特定のキーKを受け取る特定の関数F(i、K)があるとします。 0 <= i <= Nの場合、結果は[0..N]の範囲にあり、iが異なると結果は異なります。 つまり、関数Fは、キーKに応じて「論理」ブロック番号を「物理」に変換します。このような関数は、たとえばiのビットを並べ替えることで構築できます。



まず、キーK1を生成し、Fを使用して「混合」ディスク上にファイルシステムを作成します。 それをいくつかのデータで満たし、それを「オープン」と呼びます。 データは、特定のアルゴリズムに従って暗号化されます(以下について)。 攻撃者に安全に通知できるキーK1。 これらのデータがFS上のM []ブロックの特定のセットを占有すると仮定します。



次のステップでは、M []に含まれるブロックが既知のセットiに対応するようにキーK2を生成します。たとえば、i = N-Nm ... Nです。ここで、NmはM []のブロック数です。 将来的には、これらのブロックは使用しません。 これはおそらく最も重要なステップですが、FSでブロック単位でファイルを配置するアルゴリズムが非常に簡単な場合は、簡単に行うことができます。



残りの場所では、ブロックi = 0 ... N-Nm-1に、閉じられるデータ、つまり攻撃者のアクセスが除外されるべき場所を配置します。 データは暗号化されます。



暗号化アルゴリズムについて。 FS上のデータを破壊せずに変更できないようにするには、非対称公開キー暗号化を使用する必要があります。 この場合、「公開鍵」は読み取り(データの復号化)に使用され、「秘密」は書き込み(暗号化)に使用されます。 「公開データ」を復号化するために使用される公開鍵は攻撃者に報告できますが、秘密鍵を与えるべきではありません(これは難しい、はい、しかしかなり可能です)。 攻撃者はFSの開いている部分からデータを読み取ることはできますが、変更することはできません。



FSの閉じた部分の暗号化アルゴリズムは、暗号化されたデータのエントロピーができるだけ大きくなるようにする必要があります。 つまり そのため、暗号化されたデータブロックは、乱数で詰まったブロックと区別できません。 ファイルを削除するときに、ファイルシステムが解放されたブロックを「ガベージ」でブロックする場合、隠しデータを持つブロックは、K1キーを使用する場合の単純なフリーブロックと変わりません。



したがって、攻撃者がディスクとあなたを乗っ取った場合、K1と公開鍵を安全に伝えて、「open」セクションからデータを読み取ることができます。 ディスク上の他のデータの存在は安全に拒否でき、K2と2番目の暗号化キーのセットを知らずに存在を証明することは不可能です。 また、「オープン」セクションのデータを変更することは不可能であるため、もちろん、これらの非常に攻撃者のレコードに「プライベート」キーを伝えることを拒否するためです。



同様のアイデアを思いついたのは私が最初ではないと思うので、読者の誰かがこれの既存の実装を指摘してくれたら、とても感謝します。



All Articles