5

OTP メソッドを使用して暗号化を作成しようとしています。セキュリティ理論に沿って、平文のドキュメントをメモリにのみ保存し、物理ドライブに書き込まないようにする必要があります。tmpnam コマンドは必要なもののようですが、私が見る限り、ファイルは RAM ではなくディスクに保存されます。

C++ を使用して、ファイルが RAM にのみ存在できるようにする (プラットフォームに依存しない) メソッドはありますか? できればRAMディスク方式は避けたいです。

ありがとう

編集: ありがとう、それは私にとって単なる学習です。私は暗号化が初めてで、さまざまな方法で作業しているだけです。実際にはそれらの多くを使用する予定はありません (特に OTP は、元のファイルサイズが 2 倍になるためです)。 "パッド")。

正直なところ、私は Linux ユーザーなので、Windows を捨てることはそれほど悪くはありません。FUSE は「学習」には少しやり過ぎに思えるので、今のところ RAM ディスクの使用を検討しています。

4

5 に答える 5

12

簡単な答えは次のとおりです。いいえ、プラットフォームに依存しない方法はありません。データをメモリのみに保持する場合でも、仮想メモリ マネージャーによってディスクにスワップ アウトされるリスクがあります。

Windows では、VirtualLock()を使用してメモリを強制的に RAM に保持できます。CryptProtectMemory()を使用して、他のプロセスがそれを読み取らないようにすることもできます。

POSIX システム (BSD、Linux など) ではmlock()、RAM のメモリをロックするために使用できます。

于 2009-02-15T21:21:29.860 に答える
5

メモリ内ストリーム (stringstream など) をカウントしない限り、そうではありません。

特にセキュリティ上の理由からではありません。仮想メモリシステム上のディスクに任意のデータをスワップできます。

一般に、セキュリティが心配な場合は、アクセスを制御するためにプラットフォーム固有の方法を使用する必要があります。データを RAM に保持しても、誰もが読み取れるのであれば、何のメリットがありますか?

于 2009-02-15T21:16:26.643 に答える
3

TrueCryptのソース コードを見たいと思うかもしれません。ファイル システム レベルでコードを取得するのが最善の策かもしれません。

于 2009-02-15T21:26:21.270 に答える
1

std::stringstreamまたは のいずれかを使用fmemopenすると、ファイルのようにメモリ ブロックにアクセスできます。(セキュリティのために) スワップ アウトされるのを避けたい場合は、よりも のバッファmlockでおそらく最も使いやすいものを使用してください。との組み合わせは、おそらくカスタム アロケーター (テンプレート パラメーターとして使用) を介して行う必要があります。fmemopenstd::stringstreammlockstd::stringstream

于 2009-02-16T00:10:26.383 に答える
1

OTP は、決して繰り返さないことを保証できる膨大な量のエントロピーがない限り、任意のファイルに対するひどい暗号化方法です(これが「ワンタイム」と呼ばれる理由です!)

メモリにのみ存在するファイルのようなオブジェクトを作成したいが、Windows は気にしない場合は、カスタム FUSE ファイルシステム ( http://fuse.sourceforge.net/ ) を作成することを検討します。このようにして、ディスクに書き込まれるものと書き込まれないものを保証し、すべてのプログラムからファイルにアクセスできます。

于 2009-02-15T21:16:52.947 に答える