web-dev-qa-db-ja.com

仮想マシンで/ dev / urandomを再シードするのにどれくらいの時間がかかりますか?

_/dev/random_と_/dev/urandom_の違いについては、たくさん読んだことがあります。一般的なアドバイスは_/dev/urandom_を使用することです。説明-256ビットの「適切な」ランダム性は、ほとんどすべての暗号化アプリケーションに必要なものすべてである-私には理にかなっています。
役立つ情報源:
- https://pthree.org/2014/07/21/the-linux-random-number-generator/
- http://www.2uo.de/myths-about-urandom/

最初の起動直後の仮想マシン(VM)またはライブCDの状態は、_/dev/urandom_が適切にシードされていない可能性があるため、このガイドラインでは異常なEdgeケースとして識別されることがあります。

_/dev/urandom_の他のすべての可能な使用のコンテキストでは、これがエッジのケースであることがわかります。ただし、VMを初めて使用する場合、firstのいずれかがたとえば、SSHキーを生成するために_/dev/urandom_を呼び出すことができます。

したがって、VMについて最悪の場合(たとえば、クローンされた、または再起動後に新しくシードされたランダムが無効である)と想定する場合、_/dev/urandom_でいいですか?

laziestすべきことは、VMを少しの間走らせて、ランダムなイベントが発生するまで入力プールを再シードしました。厄介なのは、アイドルVMがこれを非常にゆっくりと実行することです。

これが発生するまでにかかる時間をテストしたかったので、次のようにしてみました。

このコマンドは、プールから32バイト/ 256ビットを引き出します(16進数で表示します)。
_head -c 32 </dev/random | xxd -p_

入力プールのエントロピーカウントが最小レベル(_cat /proc/sys/kernel/random/entropy_avail_で表示可能)になると、新しいランダムイベントが入力プールに入るまで上記のコマンドはブロックされます。これは、上記のコマンドを繰り返し実行して時間を計り、randomtestというファイルに結果を書き込むと、入力プールの再充填にかかる時間を示すことを示唆しています。

私はそうする1行のコマンドを書いてみました:
for n in {1..10}; do (/usr/bin/time -f "%E Real" sh -c 'printf "%-10s" $(head -c 32 </dev/random | xxd -p)' 2>&1) >> randomtest; done

より読みやすく:

_for n in {1..10};
do (/usr/bin/time -f "%E Real" sh -c \
    'printf "%-10s" $(head -c 32 </dev/random | xxd -p)' 2>&1) \
    >> randomtest; 
done
_

プロセスの開始(上記のcatコマンドでさえ)は入力プールを引き出すので、これは控えめな見積もりを提供することを知っています。それだけの価値があるので、上記のコマンドを非アクティブなVMで実行しました。新しい32バイトシーケンス間の時間は、それぞれ15〜20分で安定していました。

私の質問:

  • このコマンドの出力は、私が思っていることをうまくテストしていますか?
  • 同じことをテストするもっと簡単な方法はありますか?
  • VM=アイドル状態にすることとは異なり、入力プールを更新して_/dev/urandom_を再シードするための別の/より良い「怠惰な」方法はありますか?
15
SauceCode

私はurandomrandomの間の微妙な違いについては専門家ではありませんが、あなたの説明に基づいて、あなたのテストは入力プールを補充する時間を正しく概算しているようです。この種のテストを行うツールについては知りません。

古くなった状態がランダムデータの品質に影響を与えるのを防ぐためにurandomを再シードするより良い方法があります。それはurandomにランダムデータを書き込むことです。

これは、cloud-initを使用してクラウドプロバイダーで、起動時にVMでハッシュ関数を介してインスタンスメタデータを実行し、urandomに書き込むことで実行できます。これは、Chef、Ansible、Puppetなどを使用する構成管理ソリューションの一部であり、ローカルマシンからランダムシードをプルすることもできます。

これは全体のエントロピー数を増加させるのではなく、より新しいシードを設定するだけであることに注意してください。 man 4 randomから

/ dev/randomまたは/ dev/urandomに書き込むと、書き込まれたデータでエントロピープールが更新されますが、これによってエントロピー数が増えることはありません。これは、両方のファイルから読み取られた内容に影響を与えますが、/ dev/randomからの読み取りを高速化しないことを意味します。

6
Matt Surabian

ハードウェアrngがない場合は、_ havegeddaemonHostとして実行することにより、vmのエントロピーを与えることができます。

私は Alpine Linuxインストールスクリプト でそれを使用して、まったく新しいインストールでluksファイルシステムを作成するのに十分なエントロピーを提供します。

1
Stuart Cardall

これはあなたの質問のいずれにも答えません。それは単にあなたの声明のいくつかに対処するだけです。

/dev/random/dev/urandomの違いについては、たくさん読んだことがあります。一般的なアドバイスは/dev/urandom...を使用することです。

/dev/randomは使用しないでください。 Linux Kernel CryptoメーリングリストのTheodore Ts'oによると、/dev/randomは約10年間非推奨と見なされてきました。 From Re: [RFC PATCH v12 3/4] Linux Random Number Generator

/ dev/randomを実際に使用する人はいません。これは本質的に非推奨のインターフェースです。 10年以上にわたって推奨されてきた主要なインターフェースは/ dev/urandomで、現在はgetrandom(2)です。 CRNGを再シードするために必要なのは、5分ごとに384ビットのランダム性だけです。これは、現在使用されている非常に保守的なエントロピー推定でも十分です。

これは意図的なものでした。 x86システムの/ dev/randomで多くの情報理論的エントロピーを利用できるようにすることよりも、ARM32およびMIPS組み込みデバイスでの初期ブート時CRNG初期化が正しく行われることをはるかに重視しています。 ..


/ dev/urandomが適切にシードされていない可能性があるため、初回起動直後の仮想マシン(VM)またはライブCDの状態は、このガイドラインの異常なEdgeケースとして識別されることがあります...

最新のLinuxオペレーティングシステムは、ハードウェアベースのジェネレーターを使用してエントロピーを収集します。たとえば、x86では、rdrand(またはrdseed)が一部のビットに使用されます。ジェネレータは唯一のソースではありませんが、重要なときに役立ちます。

systemdは長い間、ある種の問題でした。 /dev/urandomの準備が整う前にエントロピーを抽出します。また、systemdがハングするため、/dev/urandomをブロックしようとすると、システムがハングします。 / dev/urandomでgetrandomブロッキングが機能しない理由 および 問題4167、systemdが初期化前にurandomから読み取る も参照してください。

Linux RNGに関するStephan Muellerの分析の一部を読むこともできます。彼もLinux Cryptoの常連です。


... VMについて最悪の場合(たとえば、クローンされた、または再起動後に新しくシードされたランダムが適切でない)場合、/を確認するために何ができますかdev/urandomは良いですか?

これらはロールバック攻撃と呼ばれます。

私が知っている唯一の改善策はヘッジです。可能な場合は、エントロピーを抽出する前に、prngを再シードする必要があることを思い出してください。ヘッジするときは、相手のエントロピーを使って自分のエントロピーと混ぜ合わせます。したがって、TLSでは、相手のランダムを受け取り、それをprngに混ぜるとします。攻撃者は相手を制御しないため、VMがリセットされても、別のストリームが生成されます。

こちらもご覧ください:


仮想マシンで/dev/urandomを再シードする期間はどれくらいですか?

Havegedのようなエントロピー収集デーモンをインストールします。それは継続的にエントロピーを収集し、あなたのために物事を処理します。

エントロピー収集デーモンはDebianでは必須です。私がテストしたDebianのすべてのバージョン-ARMから)はエントロピーの枯渇に苦しんでいます。これには、ArmbianやUbuntuなどの派生物も含まれます。rng-toolsパッケージは、デフォルトではインストールされません。

0
user29925