0

私はこの興味深い一口/dev/urandomに出くわしたときよりも速い代替手段を探していました:

非常に優れた非ランダムだがほぼランダムなビットを生成するための1つの優れたトリックは、/ dev / randomのエントロピーを使用して高速対称ストリーム暗号(私のお気に入りはblowfish)をシードし、その出力をそれを必要とするアプリケーションにリダイレクトすることです。

これは初心者のテクニックではありませんが、2行または3行のシェルスクリプトといくつかのクリエイティブなパイプを使用して簡単にセットアップできます。

さらなる調査により、セキュリティに関するシュナイアーからのこのコメントが得られました。

「エントロピーを注入」する場合、それを行う方法はいくつかありますが、より良い方法の1つは、高速ストリーム暗号全体に「拡散」し、非決定論的サンプリングシステムと結合することです。

私が間違っている場合は訂正してください。ただし、ランダムビットを生成するこの方法は/dev/urandom、速度とセキュリティの点で単純に優れているようです。

だから、これが実際のコードについての私の見解です:

time dd if=/dev/zero bs=1M count=400 | openssl bf-ofb -pass pass:`cat /dev/urandom | tr -dc [:graph:] | head -c56` > /dev/null

この速度テストは400MBのゼロを取り、疑似ランダムで印刷可能な文字で作られた448ビットのキーを使用してblowfishを使用して暗号化します。これが私のネットブックの出力です:

400+0レコードイン400+0レコードアウト419430400バイト(419 MB)コピー、14.0068秒、29.9MB/秒

実際の0m14.025sユーザー0m12.909ssys0m2.004s

それは素晴らしいことです!しかし、それはどのくらいランダムですか?結果を次の場所にパイプしてみましょうent

エントロピー=バイトあたり8.000000ビット。

最適な圧縮により、この419430416バイトファイルのサイズが0%削減されます。

419430416サンプルのカイ2乗分布は250.92であり、ランダムにこの値を50.00パーセント超えることがあります。

データバイトの算術平均値は127.5091(127.5 =ランダム)です。Piのモンテカルロ値は3.141204882(エラー0.01パーセント)です。シリアル相関係数は-0.000005です(完全に無相関= 0.0)。

よさそうだ。ただし、私のコードには明らかな欠陥がいくつかあります。

  1. /dev/urandom初期エントロピーソースに使用します。
  2. 印刷可能な文字のみが使用されるため、キー強度は448ビットと同等ではありません。
  3. エントロピーを「拡散」するために、暗号を定期的に再シードする必要があります。

それで、私は自分が正しい方向に進んでいるかどうか疑問に思いました。そして、誰かがこれらの欠陥のいずれかを修正する方法を知っているなら、それは素晴らしいことです。また、、、、、またはDBAN以外の場合は、ディスクを安全にワイプするために使用するものを共有していただけ/dev/urandomますか?sfillbadblocks

ありがとうございました!

編集:ストリーム暗号としてblowfishを使用するようにコードを更新しました。

4

1 に答える 1

1

ディスクを安全に消去したいだけの場合は、書き込むデータのランダム性についてそれほど心配する必要はありません。重要なことは、可能な限りすべてに書き込みを行うことです。おそらく数回です。あなたの「対戦相手」が大規模な政府組織であり、データの回復に専念するための余裕のあるリソースを持っていない限り、それ以上のものはやり過ぎです (そして、彼らがデータを読み取ることができるかどうかは明確ではありません - 最近のディスク密度ではそうではありません)。現在使用されています)。私は GNU の「shred」プログラムを使用しましたが、それについてはさりげなく気にしているだけです。そのとき、私はディスク システムをディスク ドライブにフォーマットし、準ランダム データを含む単一のファイルでいっぱいにして、それを細断処理しました。ほとんどやり過ぎだったと思います。

Schneier の「Cryptography Engineering」の本を読んだほうがいいのではないでしょうか?

于 2010-09-01T07:49:22.517 に答える