Linuxカーネルには乱数ジェネレータがあります。これをしばしばLRNG(Linux Random Number Generator)と呼びます。を呼び出して使用できますget_random_bytes()
。しかし、stack_canary
合計stack_top
はget_random_int()
。 Linuxカーネルには独自のLRNG(良い乱数ジェネレータ)がありますが、Linuxカーネルがそれを生成するのはなぜですかget_random_int()
?効率性のためではないかと思います。これは正しいですか?
答え1
ただソースコードを読む:
内部カーネル専用にランダムな単語を取得します。 urandomに似ていますが、目標はエントロピープールの消費を最小限に抑えることです。したがって、任意の値は暗号学的に安全ではないが、複数の用途に使用するにはエントロピーを消費するコストが高すぎる。
そのため、get_random_int
単に出力を得ないのですget_random_bytes
。実際、ここでの主張は次の2つの理由で間違っています。
- エントロピーは実際に枯渇しません。。これはカーネル内の偽の計算にすぎません。
- エントロピーが枯渇しても、一時的な構成ではなく暗号的に安全な疑似乱数ジェネレータを使用しない理由はありません。エントロピーを使い果たしたインスタンス以外のインスタンスを使用してください
/dev/random
。パフォーマンスが理由である可能性がありますが、ここでは適切なCSPRNG(例えば、Hash_DRBG / SHA-2)とMD5を使用した一時構成との間の差は小さくなります。
答え2
Linux の/dev/random
、/dev/urandom
とget_random_bytes()
は同じ内部エントロピープールにバインドされます。 RNGのみを使用すると、RNGが使い果たされ、ブロックが発生し、/dev/random
低/dev/urandom
エントロピー出力が生成される可能性が高くなります。これらの低いエントロピー条件は暗号化に問題を引き起こします。