GNU/Linux >> Linux の 問題 >  >> Linux

/dev/random 非常に遅い?

この質問はかなり古いです。しかし、それでも関連性があるので、答えを出します。現在、多くの CPU にはハードウェア乱数ジェネレーター (RNG) が組み込まれています。同様に、多くのシステムには、RNG も提供するトラステッド プラットフォーム モジュール (TPM) が付属しています。購入できるオプションは他にもありますが、お使いのコンピューターには既に何かが含まれている可能性があります。

ほとんどの Linux ディストリビューションで rng-utils パッケージの rngd を使用して、より多くのランダム データをシードできます。たとえば、fedora 18 では、TPM と CPU RNG (RDRAND 命令) からのシードを有効にするために必要な作業は次のとおりでした:

# systemctl enable rngd
# systemctl start rngd

rngd がある場合とない場合の速度を比較できます。 rngd -v -f を実行することをお勧めします コマンドラインから。これにより、検出されたエントロピー ソースが表示されます。ソースをサポートするために必要なすべてのモジュールがロードされていることを確認してください。 TPM を使用するには、tpm-tools を使用してアクティブ化する必要があります。 更新 :ここに素晴らしいハウツーがあります。

ところで、TPM RNG がさまざまな方法で壊れていることが多いという懸念をインターネットで読みましたが、Intel、AMD、および VIA チップで見つかった RNG に対して具体的なものは何も読みませんでした。ランダム性の質を本当に気にするのであれば、複数のソースを使用するのが最善でしょう.

urandom は、ほとんどのユースケースに適しています (初期の起動時を除く)。最近のほとんどのプログラムは、random ではなく urandom を使用しています。 openssl でさえそれを行います。 urandom に関する神話とランダム インターフェイスの比較を参照してください。

最近の Fedora および RHEL/CentOS rng-tools では、ジッター エントロピーもサポートされています。ハードウェア オプションが不足している場合や、ハードウェアよりも信頼している場合は、可能です。

更新: より多くのエントロピーの別のオプションは、HAVEGED (疑わしい品質) です。仮想マシンには kvm/qemu VirtIORNG があります (推奨)。

更新 2: Linux 5.6 カーネルでは、独自のジッター エントロピーを実行します。


ほとんどの Linux システムでは、/dev/random 環境によって収集された実際のエントロピーから電力が供給されます。システムが /dev/random から大量のデータを配信していない場合 、それはおそらく、それを強化するのに十分な環境のランダム性を生成していないことを意味します.

/dev/urandom と思う理由がわかりません 「遅い」または高品質です。内部エントロピー プールを再利用して疑似乱数を生成しますが、品質はわずかに低下しますが、ブロックはしません。一般に、高レベルまたは長期の暗号化を必要としないアプリケーションは /dev/urandom を使用できます

しばらく待ってから /dev/urandom から読んでみてください また。 /dev/random から多くを読み取って、内部エントロピー プールを使い果たした可能性があります。 、両方のジェネレーターを壊します - システムがより多くのエントロピーを作成できるようにすると、それらが補充されます.

/dev/random の詳細については、ウィキペディアを参照してください。 と /dev/urandom .


Linux
  1. Linux:/ dev / console、/ dev / tty、/ dev / tty0の違いは?

  2. /dev/random または /dev/urandom を base64 でエンコードする方法は?

  3. /dev/zero から /dev/null への DD ...実際に何が起こるか

  1. /dev/random からの RdRand

  2. Linux:/dev/console 、 /dev/tty 、 /dev/tty0 の違い

  3. カーネル:/dev/kmem と /dev/mem を無効化

  1. Linux が /dev/tty と /dev/tty0 を使用する方法

  2. Linux で /dev/random を /dev/urandom にリンクするのは間違っていますか?

  3. echo または print /dev/stdin /dev/stdout /dev/stderr