web-dev-qa-db-ja.com

/ dev / urandomを使用して暗号鍵を生成できますか?

何千もの暗号化キーを生成する必要があります。 Red Hatシステムで/ dev/urandomからビットを読み取るだけですか、それともPRNGで実行する必要がありますか?私の理解では、/ dev/urandomで十分なはずですが、ある程度の反論がありました。そのため、/ dev/urandomで十分であると言って、しっかりとした学術的参考文献を探しています。

このペーパーに注意してください: https://eprint.iacr.org/2013/338.pdf

2
vy32

/dev/urandomは適切な選択ですが、デフォルトのフラグを使用する getrandomシステムコール が理想的です。

参考文献については、 この記事 は厳密に言えば学術的なものではありませんが、かなり読みやすく、その説明を支持する多くの専門家を引用しています。ダニエル・バーンスタインの記事が引用しているこの一節は、再現する価値があります。

暗号学者は確かにこの迷信的なナンセンスに責任はありません。これについて少し考えてみてください。/dev/randomのマニュアルページを書いた人は誰でも、

  1. 1つの256ビットの/ dev/random出力を予測不可能なキーの無限のストリームに決定論的に拡張する方法を理解することはできません(これは、私たちが必要とするものです)。
  2. 我々canは、単一のキーを使用して多くのメッセージを安全に暗号化する方法を理解します(これは、SSL、PGPなどから必要なものです)。

暗号学者にとって、これは笑いテストにさえ合格しません。

リンクした記事は、実用的な記事ではなく、理論的な問題です。 Linux RNGの設計は厳密に言えば悪いというわけではありませんが、多くの点で最適ではありませんが、非常に狭いシナリオにのみ当てはまります。攻撃者が何らかの時点でRNGの状態を確認できた場合その実行では、(a)は新しい状態を見ることができなくなり、(b)エントロピー入力に影響を与えることができます。これはvery固有であり、通常の操作(敵がRNG状態を認識していない場合)から最短距離にあり、最悪のシナリオ(攻撃者がRNGを完全に危険にさらし、繰り返し状態を確認できる場合)。

3
Luis Casillas