キャッシングのランダム性のセキュリティへの影響

Oct 08 2020

一般的なケースでランダム性をキャッシュするのは悪い考えですか?私の気持ちはイエスですが、その理由を明確にするのに苦労しています。

シナリオ:

選択したプログラミング言語(ノードなど)は、ネイティブ呼び出しを使用してランダムバイトを生成します(uuidの作成など)。オペレーティングシステムにアクセスしても、ランダムバイトを予測することは非常に困難です。

呼び出しにはオーバーヘッドがあり、実行時間を短縮するためにメモリキャッシュが導入されます。したがって、必要に応じて(つまり、uuidが必要になるたびに)OSからランダムなバイトを取得する代わりに、キャッシュが空の場合にのみ取得されます。

ランダムバイトは、実行中のプログラムのメモリにあります。理論的には、メモリを検査することでアクセスできます。一般的なケース(これはライブラリによって行われ、ランダム性がどのように使用されているかわからない場合)、これは悪い考えですか?もしそうなら、なぜですか?

免責事項:私はこのgithubの問題についての良い議論を本当に探しています https://github.com/uuidjs/uuid/issues/527 [毎週3600万ダウンロード]

回答

2 theoneandonly2 Oct 08 2020 at 03:18

良いランダムビットがたくさんあると仮定すると、ランダム性のキャッシュに関連する落とし穴はすべて、悪意のあるアクセスの可能性に起因します。つまり、ランダム性のキャッシュに本質的に問題はありませんが、攻撃対象領域が大きくなります。開発者がメモリが安全な保管場所であると信じるのに十分な理由がある場合、このアプローチは安全です。

これについての1つの考え方は、ワンタイムパッド(OTP)の歴史的な使用を振り返ることです。OTPは、軍隊がメッセージを暗号化および復号化するために使用し、今日でも解読不能と見なされています。この場合のコードは紙に保存されていました(キャッシュに類似しています)。ただし、このプロセスを破ることができないようにするために必要なルールは次のとおりです。

  • キーは本当にランダムでなければなりません。
  • キーは、少なくとも平文と同じ長さである必要があります。
  • キーの全部または一部を再利用しないでください
  • キーは完全に秘密にしておく必要があります。

キャッシュされたランダムバイトについて同じことを保証できる限り、ランダム性は問題ありません。