Linuxのエントロピーのソース


9

/ dev / randomから1ギガバイト程度のランダムデータが必要で、1回限りのパッドに適しているとしましょう(/ dev / urandomはアウトです)。/dev / randomに十分なエントロピーをシードするにはどうすればよいですか?このための特定のコマンドとプログラムを探しています。何も買いたくない。Arch Linuxを使用しています。


そのようなプログラムは/ dev / randomを/ dev / urandomと同じ問題を持ち、使いたくないものに変えないでしょうか?それとも、デバイスやネットワークを介してエントロピーを増やすものを指しますか?
Anthon

@Anthonショットノイズ、熱ノイズ、デバイスなど、エントロピーソースからランダム性を抽出するための特定のプログラムについて話している...プログラム自体はランダム性を作成しません。
PyRulez 2015年

...たとえば、Here — type something:と入力してから、キーストローク間の時間の差分を、人間が制御できるよりも高い精度で測定するコマンドまたはプログラムですか。
G-Manは 'Reinstate Monica'


1
_'...ほぼすべての暗号化アルゴリズム...「のみ」が計算上のセキュリティを提供する」という主張の2つの例外の1つとして、ワンタイムパッドについて言及しています。ワンタイムパッドは無作為に使用できないと書いてあるので、私が見逃したことを引用できない限り、
役に立たない

回答:


4

追加のハードウェアを必要とせずにエントロピープールを増やすことができる2つのプログラムはrng-tools、とhavegedです。rng-tools最新のCPUとチップセットで利用可能なRNGを使用し、haveged最新のCPUランダム性(キャッシュ動作など)を使用します。どちらもArchで利用でき、Arch wikiにはそれらについて議論する興味深いページがあります。私はギガバイトのデータを生成するためにそれらを使用しようとしませんでしたが、それはかなりの時間で可能であるはずです。

あなたは何かを購入することを明示的に除外しますが、完全を期すために、LWNにはNeuGとのエントロピーに関する興味深い記事があります。これには、havegedおよびその他のさまざまなアプローチの説明が含まれます。10ドル未満でNeuGを実行できるSTM8Sボード、または35ドルでFST-01を購入できます。


4

残念ながら、/ dev / randomもワンタイムパッドでの使用には適していません。少なくとも、ほとんどの人がワンタイムパッドについて考えたり実装したりするときに想像できる種類のワンタイムパッド(セキュリティが保証されている)はそうではありません。以下の情報のほとんどは、http://www.2uo.de/myths-about-urandom/の(非常に長い)記事から要約されています。

問題は、/ dev / randomが真にランダムではないことです。CSPRNGを使用して出力を生成します。実際、/ dev / randomは/ dev / urandomとまったく同じCSPRNGを使用します。唯一の違いは、エントロピーの内部推定が不十分な場合、/ dev / randomがブロックすることです。

前の文の「見積もり」という単語が重要です。ほとんどの人は、この見積もりは常に正確で完璧だと考えていますが、実際にはまったく正確ではありません。見積もりが間違っていると、ワンタイムパッドのすべての証明可能なセキュリティ保証が失われ、残っているのは計算上のセキュリティだけです。/dev/urandomを使用した場合と同じです。

エントロピーの見積もりを少しだけ間違っても、ワンタイムパッドが少しだけ安全になるわけではありません。ワンタイムパッドの証明可能なセキュリティ保証は、全部かゼロかです。

この質問の前提は、/ dev / randomの問題をさらにエントロピーを追加することで「修正」できることです。残念ながら、この前提は間違っています。エントロピー源は、多くの場合、内部データへのアクセス権を持っているとRNGの出力を使用して、密かにこのデータをエクスポートすることができますので、エントロピーの悪質なソースは、全くのエントロピーよりはるかに劣っている-を参照してhttp://blog.cr.yp.to/20140205-entropy完全な議論のための.html(ここで要約するには長すぎます)。特に、(他のいくつかの回答で推奨されている)ハードウェアのエントロピーソースは、セキュリティの観点からは非常に悪い選択です。そのハードウェアは悪意のあることを行うための主要な位置にあり、本質的に監査不能だからです。


私はそれをよりエントロピーで修正しているとは言いませんでした、私はより大きな鍵のためにより多くを必要としました。それはそれが不完全であるという点では良い点です。代替案はありますか?
PyRulez 2015年

1
ハードウェアソースに関する最後のビットを除いて、これは良い答えです。エントロピーのハードウェアソースは、エントロピーを取得するための唯一の信頼できる監査可能な方法です。あなた(またはあなたが信頼する人)は、ソースを監査する必要があります。これには、設計情報があり、製造プロセスが設計情報を尊重していることを確認する必要があります。エントロピーのソースを組み合わせることもできるので、少なくとも1つのエントロピーが問題なければ、結果は問題ありません(NBを正しく組み合わせるには、NBが必要です)。
Gilles「SO-邪悪なことをやめる」

Gilles、私が投稿した2番目のリンクを読んでください。少なくとも1つのエントロピーソースが良好であれば、結果は良好であると主張するのは完全に誤りです。このリンクの目的は、この誤った主張を否定することです!
djao

さらに、ソースと製造プロセスを監査するだけでは不十分です。個々のデバイスを監査して、デバイスが製造プロセスに従って製造されたことを確認する必要があります。これは、チェックサムをチェックするだけのソフトウェアでの類似のタスクよりもはるかに難しいタスクです。
djao

代替案については、PCから1GBのランダムデータを取得する魔法の方法はありません。そのためにはハードウェアデバイスが必要になります(ただし、ハードウェアの監査が難しいと私が言ったことに注意してください)。/ dev / randomを使用したい場合は、/ dev / urandomも同様です。すべての暗号化アプリケーションで/ dev / randomよりも悪くはありません。
djao

3

HWコンポーネントが最良のアイデアのようです。いくつかのHWジェネレーターICが世の中に出回っていますが、彼らは来たらそれらを信頼する必要があります。

2つのおそらく良い解決策は、コンポーネントにノイズを発生させることです。2つの主要な解決策は、温度バイアスとダイオードで作成されたavancheノイズのようです(http://web.archive.org/web/20061117145903/http://willware.net:8080/hw-rng.htmlを参照

ジャイロや加速度計などのコンポーネントがより敏感になっているので、最高の感度で動作させ、LSB値を使用することも素晴らしいソリューションですが、AFAIKは誰もそれを監査していません。

RNGを実行しないことに関する多くの紙があるので面白いですが、HW実装はオープンで検証されていません


2

pycsprng.pyを使用できます。暗号的に安全ですか?よくわかりませんが、査読をお願いします。

python pycsprng.py | pv | dd of=data.file bs=1024 count=1000

へのパイプpvはオプションであり、転送されたデータ量を知るのに役立ちます。

ブロックサイズ(bs)が大きくなると、パフォーマンスが向上する場合があります。ブロックサイズを大きくする場合は、生成されるファイルが大きすぎないようにカウントを調整する必要があります。


3
それだけを使用し/dev/urandomます...
スティーブンキット

1
pycsprng.py文字通り、からランダム性を得る10 SLOCスクリプトですos.urandomドキュメントは、「返されたデータは、暗号化アプリケーションにとって十分に予測不可能でなければならない[...] UNIXのようなシステムでは、これはクエリを実行します/dev/urandom」と述べていますそれは実際にはあります(しかしそれは古いソースです)、そしてSecurity.SEはそれが暗号に大丈夫である言います。
gronostaj 2015年

ワンタイムパッド暗号ではありません!
PyRulez

0

マイクを接続しない場合にアナログマイクチャンネルから得られるものは、通常は静的なものです。たとえば、ホワイトニングの場合はbzip2にパイプし、それを別のランダム性のソース(ランダムまたは別のマイクジャック)と混合します。結果をopensslにパイプして適切な測定を行い、得られるものかなりランダムになるはずです。

ただし、結果のランダム性について、厳格で高速なセキュリティプロパティを証明することは困難です。


0

あなたは、Linuxカーネル2.6.9またはAMD64 / x86_64のプロセッサ、仮想または物理的な環境への以降を使用している場合は、試すことがncomputers.org/pandom、真の乱数生成器をその64件の申し出8 KiBの/ sのエントロピーubits / 64ビット通じ/dev/random

出力例


リンクが破壊され、バックアップが見つかりませんでした。
slm

0

100 MBのハードウェア生成ランダムデータを生成するには、次の方法があります。

  • コンピューターの内蔵マイク(ラップトップで利用可能)を使用して、20分の音声(96khz 16ビットモノラル)を録音します。〜220 MBのWAVファイルを取得します。

  • 不要なビットを破棄し、バイナリデータのビットをシャッフルします(これを行う多くの方法)。

  • シャッフルされたビットを〜100 MBのバイナリファイルとしてエクスポートする

これに関する記事は次のとおりです。オーディオ(およびコンピューターの内蔵マイク)を使用して真のエントロピーとランダムデータを生成する試み

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.