1

GNU/Linux で libgcrypt 1.5.0 を使用して、小さな aes256-cbc ファイル暗号化ソフトウェアを開発しています。

安全なメモリとディスクにスワップアウトされたデータについて疑問があります。

このコードがあるとしましょう:

char *crypto_key;
crypto_key = gcry_malloc_secure(256);

これら 2 つのことを行うことは有用であり、必要ですか?

1)そのメモリのページングを許可しない: mlock(crypto_key, size)

2)情報がコア ダンプに書き込まれないようにするには、次のコマンドを使用します。

struct rlimit limit;
limit.rlim_cur = 0;
limit.rlim_max = 0;
if (setrlimit(RLIMIT_CORE, &limit) != 0) {
    /* Handle error */
}
4

1 に答える 1

1

ページ ファイル (またはコード ダンプ) へのメモリ領域の書き込みを防止しないと、機密データ (キー) がディスクに書き込まれたままになり、データの閲覧/取得を意図していない人物によって発見される可能性があります。必要/有用かどうかはアプリケーションによって異なります。そうしないと、秘密鍵や暗号化されていないデータがラップトップのハード ドライブに長時間放置されたままになり、誰かがラップトップを盗んでそこからキーやデータを取得する可能性があります。物理的に安全なコンピューターでの私的使用の場合は、必要ないかもしれません (しかし、万一に備えたほうがよいため、これは良い習慣です)。

メモリ (割り当てられた crypto_key) を自分でロックする必要はありません。libgcrypt がロックします (ライブラリを適切に初期化したと仮定します)。また、解放されたメモリをクリア/上書きする必要があります。

元の暗号化されていないファイルは、キーとともにマシン上で引き続き利用できる可能性が高いため、コア ダンプを防止するのはやり過ぎかもしれません。達成しようとしているセキュリティのレベルによって異なります。ダンプ ファイルがない場合は、削除することも忘れません。

通常、マシンのユーザー/管理者は、コア ダンプを実行しないようにマシンを構成する必要があります。ツール プログラムは、設定を変更することになっているものではありません (権限を昇格させないと変更できない可能性があります)。

于 2013-02-04T10:53:42.487 に答える