0

私は尋ねられます:

ラズベリーパイを使用して、/ dev/randomと/dev/urandomのランダム性を決定するPythonスクリプトを記述します。バイトを読み取り、結果をヒストグラム化します。matplotlibでプロットします。あなたの答えには、Pythonスクリプトを含めてください。

私は現在、「ランダム性を決定する」という言い回しに迷っています。

私はurandomとrandomから次のように読み取ることができます:

#rb - reading as binary
devrndm = open("/dev/random", 'rb')
#read to a file instead of mem?
rndmdata = devrndm.read(25) #read 25bytes

また

with open("/dev/random", 'rb') as f:
    print repr(f.read(10))

この演習の目的は、urandomの方が高速で、ランダムよりもプールが大きいことを確認することだったと思います。ただし、15を超えるものを読み込もうとすると、読む時間が指数関数的に増加するようです。

だから私は今、「ランダム性」を比較する方法に迷っています。urandomとrandomの両方をそれぞれのファイルに読み込んだ場合、どうすればそれらを比較できますか?

4

2 に答える 2

3

あなたの経験はまさに彼らが探しているものかもしれません。urandom(4)のマニュアルページから:

読み取られると、/ dev / randomデバイスは、エントロピープール内のノイズの推定ビット数内のランダムバイトのみを返します。/ dev / randomは、ワンタイムパッドやキー生成などの非常に高品質のランダム性を必要とする用途に適している必要があります。エントロピープールが空の場合、/ dev / randomからの読み取りは、追加の環境ノイズが収集されるまでブロックされます。

/ dev / urandomデバイスからの読み取りは、エントロピーの待機をブロックしません。

ブロッキングについて少し注意してください。urandomはしません、ランダムはします。特に埋め込みコンテキストでは、追加のエントロピーを取得するのが難しい場合があり、これにより、表示されるブロッキングが発生します。

于 2013-02-06T21:11:43.997 に答える
2

それは次のように単純でしょうか:

In [664]: f = open("/dev/random", "rb")
In [665]: len(set(f.read(256)))
Out[665]: 169


In [666]: ff = open("/dev/urandom", "rb")
In [667]: len(set(ff.read(256)))
Out[667]: 167


In [669]: len(set(f.read(512)))
Out[669]: 218

In [670]: len(set(ff.read(512)))
Out[670]: 224

すなわち。256バイトを要求しても、256の一意の値は返されません。したがって、256の飽和点に達するまで、一意のカウントに対して増加するサンプルサイズをプロットできます。

于 2013-02-06T21:22:37.783 に答える