0

ランダムなキーを打って「エントロピーを生成する」ようにユーザーに促すPGPを覚えている人はいますか?

PGP は、収集されたエントロピーを測定し、クールな小さなプログレス バーでユーザーに示し、内部でキー ストロークの時間を計り、何らかの処理を行い、これを何かのシードとして使用します。

Python で同様の「エントロピー コレクション」ステップを実行するクイック ルーチン (コンソール アプリ) を作成したいのですが、いくつかの問題に関して途方に暮れています。

  1. タイミングの最良の方法
  2. 個々のキーストロークを収集する最良の方法
  3. クールなプログレスバーをユーザーに表示する最良の方法
  4. 処理ステップに関するアイデア、または PGP ステップの実際の詳細。

上記のベストとは:

  • 最もタイトでクリーンなコード
  • 最も正確 (ピコ秒などのタイミングなど)
  • ほとんどのpythonic/機能的で、標準ライブラリを使用しています
4

1 に答える 1

0

そうそう:

def gen_user_random():
    from Fourganizical import pack8
    import time,sys
    print 'Hey there user, start a-bashing that keyboard to make some randomness.'
    keystimes = []
    lasttime = None
    while len(keystimes) < 20:
            key = getch()
            timenow = (time.time() + time.clock())
            if lasttime:
                    timesince = timenow-lasttime
                    keystimes.append(int(timesince*100000000000000000))
            lasttime = timenow
    print 'Check out this *nasty* random number you made!'
    rnum = int(''.join([str(x) for x in keystimes]))
    print rnum
    print 'And OMG here is that *nasty* set of bytes it made!'
    rbytes = pack8(rnum)
    print
    sys.stdout.write(''.join(rbytes))
    print
    print
    return keystimes

これにより、非常に厄介なランダム性が作成されます。

pack8は、任意の長さの整数を取り、基数 256 でバイトのシーケンスとして出力します。

于 2013-02-28T08:02:17.703 に答える