os.urandomまたはssl.RAND_bytes : 暗号化の目的でランダムなバイトを生成する場合、どちらがより推奨されますか?
どちらも優れていない場合、どのようなトレードオフがあり、違いに関してそれぞれに何が期待されますか?
ssl.RAND_bytes は Python 3 にのみ存在することに注意してください。
os.urandomまたはssl.RAND_bytes : 暗号化の目的でランダムなバイトを生成する場合、どちらがより推奨されますか?
どちらも優れていない場合、どのようなトレードオフがあり、違いに関してそれぞれに何が期待されますか?
ssl.RAND_bytes は Python 3 にのみ存在することに注意してください。
ssl.RAND_bytes
使用する前にシードする必要があります。ですから、一人で頼ることはできませんssl.RAND_bytes
。os.urandom
とはどちら`ssl.RAND_bytes
も疑似乱数ジェネレーターです。PRNG は決定論的です。同じデータをシードすると、疑似乱数バイトの同じストリームが返されます。オブザーバーがシード値を知らない場合、これらのバイトは真のランダムと区別できないはずです。os.urandom
ただし、通常は、オペレーティング システム内のエントロピー ソースを使用して (再) シードされます。
したがって、 よりもを使用os.urandom
することをお勧めしssl.RAND_bytes
ます。まず、すでにシードされています (オペレーティング システムによって再シードされます)。さらに、SSL ライブラリへの追加の依存関係は必要ありません。欠点はパフォーマンスかもしれません。データを取得するたびにシステムコールが必要になるため、十分ssl.RAND_bytes
に大きな値でシードを使用する方がおそらく高速です。os.urandom
os.urandom