randomBytesとpseudoRandomBytesの違い 質問する

randomBytesとpseudoRandomBytesの違い 質問する

どのような状況でノードのcrypto.pseudoRandomBytes暗号的に強力なcrypto.randomBytes?

pseudoRandomBytes 予測可能性を犠牲にしてパフォーマンスが向上すると 想定しています 正しくない) ですが、ドキュメントでは、それがどれほど強力でないかについてはあまり言及されていません。

pseudoRandomBytes具体的には、 CSRF トークンを生成するために を使用しても問題ないかどうか疑問に思っています。

ベストアンサー1

それが判明したとして、デフォルトのOpenSSL(これはノードにバンドルされていますが、自分で構築した場合は、さまざまなエンジンを構成する)、ランダムデータを生成するアルゴリズムrandomBytesRAND_bytes)とpseudoRandomBytes( )の両方でまったく同じですRAND_pseudo_bytes

2 つの呼び出しの唯一の違いは、使用しているノードのバージョンによって異なります。

  • node v0.12 以前では、randomBytesエントロピー プールに十分なデータがまだシードされていない場合はエラーを返します。pseudoRandomBytesエントロピー プールが適切にシードされていない場合でも、常にバイトを返します。
  • ノード v4 以降では、randomBytesエントロピー プールに十分なデータが格納されるまで戻りません。これには数ミリ秒しかかかりません (システムが起動した直後でない限り)。

エントロピープールに十分なデータが投入されると、それが「枯渇」することは決してないので、randomBytesとの間には実質的な違いはまったくありません。pseudoRandomBytes エントロピープールがいっぱいになると

ランダム データの生成にまったく同じアルゴリズムが使用されるため、2 つの呼び出し間でパフォーマンスに違いはありません (1 回限りのエントロピー プール シーディングを除く)。

おすすめ記事