3

os.urandomまたはssl.RAND_bytes : 暗号化の目的でランダムなバイトを生成する場合、どちらがより推奨されますか?

どちらも優れていない場合、どのようなトレードオフがあり、違いに関してそれぞれに何が期待されますか?

ssl.RAND_bytes は Python 3 にのみ存在することに注意してください。

4

1 に答える 1

2

ssl.RAND_bytes使用する前にシードする必要があります。ですから、一人で頼ることはできませんssl.RAND_bytesos.urandomとはどちら`ssl.RAND_bytes疑似乱数ジェネレーターです。PRNG は決定論的です。同じデータをシードすると、疑似乱数バイトの同じストリームが返されます。オブザーバーがシード値を知らない場合、これらのバイトは真のランダムと区別できないはずです。os.urandomただし、通常は、オペレーティング システム内のエントロピー ソースを使用して (再) シードされます。

したがって、 よりもを使用os.urandomすることをお勧めしssl.RAND_bytesます。まず、すでにシードされています (オペレーティング システムによって再シードされます)。さらに、SSL ライブラリへの追加の依存関係は必要ありません。欠点はパフォーマンスかもしれません。データを取得するたびにシステムコールが必要になるため、十分ssl.RAND_bytesに大きな値でシードを使用する方がおそらく高速です。os.urandomos.urandom

于 2013-08-07T21:32:27.183 に答える