2017-12-12 10 views
0

Pythonの3 random.random()は、毎回の使用前に高いエントロピーの種がシードされていればセキュリティに十分ですか?分布の形状を確認すること以外の方法を知り、検証する方法。は、すべての使用の前に高いエントロピーの種がシードされている場合、セキュリティに十分なPythonの3つのrandom.randomです。

したがって、random.randomを使用して、エントロピーソースを配列の項目の中の多くの選択肢に変換することについての質問です。

たとえば、9k語の辞書があり、ランダムに18語を選択したいとしましょう。私たちは他の誰かがピュータンのrandom.random()で遊ぶことでそれらを見つけることができないようにします。

dic = ["word1", "word2", ... , "word19k"] 
while(true): 
    seed = os.urandom(50) 
    random.seed(seed) 
    print(random.choice(dic)) 
+0

[暗号で安全に暗号化された乱数を作成するにはどうすればいいですか?](https://stackoverflow.com/questions/20936993/how-can-i-create-a-random-number-that -is-cryptographically-secure-in-python) –

+0

Thx COLDSPEED、それは私がそれが良い解決策であると理解していますが、私が探しているものではありません。私はrandom.random()の種を入れるために非常に高いエントロピーの種を使用して変更するには多くの費用がかかりますので、選択する前にセキュリティを評価する必要があります。 – PyWebDesign

+2

「高いエントロピーの種」という意味に依存します。エントロピーが非常に高く、種が本当にランダムである(そして広い範囲から引き出される)場合、もちろん安全ですが、その段階でPython乱数ジェネレータは余分な仲介人になります。 –

答えて

2

Python documentation of random specifies:このモジュールの疑似乱数発生器は、セキュリティ目的のために使用すべきではありません警告

。暗号的に安全な疑似乱数ジェネレータが必要な場合は、os.urandom()またはSystemRandomを使用します。

質問のコメントに記載されているように、乱数を生成する(暗号化の目的で)より安全で安全な方法はos.urandom()です。乱数発生器は、均一な分布を生成した場合、他の場所で尋ねた後、全体の操作は無用ですが、セキュリティ上のリスクを導入しないように

>>> import os 
>>> os.urandom(10) 
'm\xd4\x94\x00x7\xbe\x04\xa2R' 
>>> type(os.urandom(10)) 
<type 'str'> 
>>> map(ord, os.urandom(10)) 
[65, 120, 218, 135, 66, 134, 141, 140, 178, 25] 
+0

こんにちは、ありがとう、これは私が必要とするものではありません。 解決策をrandom.random()のシードとして導入するための質問コードの例を変更しました。私はrandom.random()の種を入れるために非常に高いエントロピーの種を使用して変更するには多くの費用がかかりますので、選択する前にセキュリティを評価する必要があります。 – PyWebDesign

+1

貧弱な選択がなされた場合、それらを訂正するための費用がかかる。 – zaph

1

[OK]をリンク質問から

サンプルコード。

のように、ランダムジェネレータに世代ごとに新しいシードが設定されている場合は、これは単純な無駄な変換x => f(x)を適用するようなものです。

高いエントロピーを使用し、それをpython random.random ou random.choiceに渡すと、この質問に対する応答は非常に簡単です。これは、種の品質と同じくらい安全です。実行中のシステムの優先度を変更することを推奨しません。

応答の他の部分は、そうしないでください、役に立たないです。 random.choiceの代わりにpickを保護するためのより良い方法を使用してください。

関連する問題