どうやら、/ dev/randomはハードウェア割り込みまたは物理ハードウェアの同様の予測不可能な側面に基づいています。仮想マシンには物理ハードウェアがないため、cat /dev/random
仮想マシン内では何も生成されません。私はUbuntuサーバー11.04をホストおよびゲストとして、libvirt/KVMと共に使用しています。
VM内にKerberosを設定する必要がありますが、krb5_newrealm
システムが生成していないため、「ランダムデータのロード」が永久にハングします。
誰かがこれを回避する方法を知っていますか?ホストの/ dev/random(とてもおしゃべりです)をvmに渡して、vmがランダムデータを使用できるようにすることは可能ですか?
いくつかの代替ソフトウェアがあることを読みましたが、それらは十分にランダムではないため、暗号学には適していません。
編集:vmのcat/dev/randomは非常にゆっくりと出力を生成するようです。 「ランダムデータの読み込み」が行われている間、約2時間待機して領域を設定しました。結局、それは継続するのに十分になりました。私はまだこれを加速する方法に興味があります。
「うまくいく」はずです。 vmには専用の物理ハードウェアはありませんが、ランダム性の非常に優れたいくつかのソースにアクセスできます。たとえば、CPUのTSCを使用して、仮想ディスクからの読み取りの時間を計ることができます。これにより、最終的にタイミング物理ディスクが10億分の1秒に巻き上げられます。これらのタイミングは、予測できないハードドライブの乱気流せん断に依存します。
同様のロジックがネットワークトラフィックに適用されます。インターフェースが仮想化されていても、パケットが物理ネットワークから発信されている(そしてボックスにローカルではない、たとえば別のvmから発信されている)限り、パケットタイミングはネットワークカード上の水晶発振器間の位相オフセットに依存しますTSCを駆動する水晶発振器。これは、2つの水晶の微視的なゾーンの温度変化に依存します。これも予測できません。
何らかの理由で機能しない場合、最も簡単な解決策は、エントロピーをマイニングしてシステムプールに追加するプログラムを作成することです。ネットワークインターフェイスは、最も信頼できるソースです。たとえば、次のようなコードを記述できます。
1)TSCに問い合わせます。
2)同じ物理マシン上にないことがわかっているサーバーにDNSクエリを発行します。
3)クエリが完了したら、TSCをクエリします。
4)これを数回繰り返し、すべてのTSC値を累積します。
5)蓄積されたTSC関数に対して安全なハッシュを実行します。
6)セキュアハッシュ関数の出力をシステムのエントロピープールに渡します。
7)エントロピープールレベルを監視し、それが低くなるまで待ちます。その場合は、手順1に戻ります。
Linuxには、プールにエントロピーを追加したり、プールのレベルを確認したりするための単純なIOCTL呼び出しがあります。おそらくrngd
があります。これは、パイプからエントロピーを取得してシステムプールに供給することができます。 TSCであろうと、独自のエントロピーソースからの「wget」リクエストであろうと、任意のソースからパイプを埋めることができます。
私は、暗号化操作(TLSハンドシェイク、ケルベロスなど)を実行するすべてのヘッドレスサーバーでhasgedを使用しています。ほとんどのUbuntuバージョンのパッケージリポジトリにあるはずです。 http://packages.ubuntu.com/search?keywords=haveged&searchon=names&suite=all§ion=all
havegedはHAVAGEアルゴリズムを使用して、最新のプロセッサーの内部状態からエントロピーを抽出します。これは詳細な説明です: http://www.irisa.fr/caps/projects/hipsor/
生成されたエントロピーのランダム性は、entパッケージで確認できます。私のシステムでは、老人から生成されたエントロピーは、entによるすべてのランダム性テストに合格しました
ええ、あなたはそれをシードすることができます:
http://manpages.ubuntu.com/manpages/jaunty/man4/random.4.html
それを/ dev/urandomに入れるだけで、エントロピープールがシードされます。私はこれを確認することができました:
root@mx01-ewr:/proc/sys/kernel/random# cat entropy_avail
128
root@mx01-ewr:/proc/sys/kernel/random# cat /dev/xvda >/dev/urandom &
[1] 16187 # just using this as a source of data, you could do ssh hostIP 'cat /dev/random' >... etc
root@mx01-ewr:/proc/sys/kernel/random# cat entropy_avail
1221
root@mx01-ewr:/proc/sys/kernel/random# cat entropy_avail
1398
Sshコマンドにルーターを経由させると、エントロピーが生成されます* :)
これは私のために働いた
VM内でkrb5_newrealmを実行すると、(「Loading random data」メッセージが表示された後)完了するまでに時間がかかる場合があります。次のハックを使用すると、処理を少し高速化できます。
$ Sudo aptitude install rng-tools -y
$ Sudo rngd -r /dev/urandom -o /dev/random # don't do this in production!
http://fossies.org/linux/john/doc/Kerberos-Auditing-HOWTO.md に投稿
X86の答えは、あなたのVMがRdRandまたはRdSeedをトラップしないことを確認することです。あなたはVMを信頼しますが、これはその1つです。
ポストSnady Bridge CPUで十分に新しいRNGdは、RdRandまたはRdSeedを使用し(または指示することができます)、トラップされていないRdRandまたはRdSeedがVMにエントロピーを取得します。/dev/randomは、エントロピーの実際の(仮想ではない)ソースを処理します。
これは偶然ではありません。これは、Intelアーキテクチャのドキュメントにあります。
デバイスベースのハードウェアエントロピーソース(IEがカーネルドライバーを使用してそれを共有する)の場合、VMが物理ソースを正しく仮想化するために必要です。これを行うかどうか、そしてそうする場合、どのデバイス。
RNGdに以下のdrngオプションがない場合は、更新してください。ハードウェアに高速ハードウェアRNGがない場合は、運命にあるので、セキュリティの目的で別のハードウェアを使用することを検討してください。
# rngd --help
Usage: rngd [OPTION...]
Check and feed random data from hardware device to kernel entropy pool.
-b, --background Become a daemon (default)
**-d, --no-drng=1|0 Do not use drng as a source of random number input**
(default: 0)
-f, --foreground Do not fork and become a daemon
-n, --no-tpm=1|0 Do not use tpm as a source of random number input
(default: 0)
-o, --random-device=file Kernel device used for random number output
(default: /dev/random)
-p, --pid-file=file File used for recording daemon PID, and multiple
exclusion (default: /var/run/rngd.pid)
-q, --quiet Suppress error messages
-r, --rng-device=file Kernel device used for random number input
(default: /dev/hwrng)
-s, --random-step=nnn Number of bytes written to random-device at a time
(default: 64)
-v, --verbose Report available entropy sources
-W, --fill-watermark=n Do not stop feeding entropy to random-device until
at least n bits of entropy are available in the
pool (default: 2048), 0 <= n <= 4096
-?, --help Give this help list
--usage Give a short usage message
-V, --version Print program version
Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.
Report bugs to Jeff Garzik <[email protected]>.
また、krb5_newrealmのハングにも問題がありました。上記の答えに基づいて、これは私にとってうまくいきました:
cat /dev/sda > /dev/urandom
ランダムデータの必要性が完了したら、それを強制終了することができます。/dev/sdaにはおそらく必要以上のデータがあります。
注:この方法で生成されたランダムデータが実際にどれほどランダムかはわかりません。