26

crypto.pseudoRandomBytescryptographically-strongの代わりにノードを使用することが (セキュリティの観点から) どのような状況で許容されますcrypto.randomBytesか?

私はpseudoRandomBytes、より予測可能であるという犠牲を払ってパフォーマンスが向上すると思います(間違っています)が、ドキュメントには、それがどれほど弱いかについてはあまり言及されていません。

pseudoRandomBytes具体的には、CSRF トークンの生成に使用してよいかどうか疑問に思っています。

4

3 に答える 3

17

明確にするために、どちらも同じパフォーマンスを持っています:

var crypto = require ("crypto")
var speedy = require ("speedy");

speedy.run ({
    randomBytes: function (cb){
        crypto.randomBytes (256, cb);
    },
    pseudoRandomBytes: function (cb){
        crypto.pseudoRandomBytes (256, cb);
    }
});

/*
File: t.js

Node v0.10.25
V8 v3.14.5.9
Speedy v0.1.1

Tests: 2
Timeout: 1000ms (1s 0ms)
Samples: 3
Total time per test: ~3000ms (3s 0ms)
Total time: ~6000ms (6s 0ms)

Higher is better (ops/sec)

randomBytes
  58,836 ± 0.4%
pseudoRandomBytes
  58,533 ± 0.8%

Elapsed time: 6318ms (6s 318ms)
*/
于 2013-08-08T16:40:41.547 に答える
0

他の言語の標準的な PRNG 実装のようなものであれば、デフォルトでシードされていないか、タイムスタンプなどの単純な値によってシードされている可能性があります。とにかく、シードは非常に簡単に推測できます。

于 2013-08-08T15:43:59.587 に答える