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

/ dev/randomと/dev/ urandomをいつ使用するか?

/dev/randomを使用する必要があります または/dev/urandom

どのような状況でどちらを優先しますか?

承認された回答:

TL; DR

/dev/urandomを使用します 最も実用的な目的のために。

長い答えは、実行しているUnixのフレーバーによって異なります。

Linux

歴史的に、/dev/random および/dev/urandom 同時に紹介されました。

@DavidSchwartzがコメントで指摘したように、/dev/urandomを使用します ほとんどの場合、が優先されます。彼と他の人々はまた、/dev/urandomに関する優れた神話へのリンクを提供しました さらに読むことをお勧めする記事。

要約:

  • マンページは誤解を招く可能性があります。
  • どちらも同じによって供給されます ランダム性を生成するCSPRNG(図2および3)
  • /dev/random エントロピーがなくなるとブロックされるため、
    /dev/randomから読み取ります プロセスの実行を停止できます。
  • エントロピーの量は控えめに見積もられていますが、カウントされていません
  • /dev/urandom ブロックされることはありません。
  • まれに、起動直後に、CSPRNGに適切にシードされた/dev/urandomを実行するのに十分なエントロピーがない場合があります。 高品質のランダム性が生成されない場合があります。
  • CSPRNGが最初に適切にシードされていれば、エントロピーが少なくなることは問題ではありません。
  • CSPRNGは常に再シードされています。
  • Linux 4.8以降では、/dev/urandom エントロピープールを使い果たしません(/dev/randomで使用されます) )ただし、アップストリームからのCSPRNG出力を使用します。
  • /dev/urandomを使用します 。

ルールの例外

CryptographyStackExchangeの/dev/randomを使用する場合 /dev/urandom以上 Linuxでは@otusは2つのユースケースを提供します:

  1. 低エントロピーデバイスで起動した直後、/dev/urandomを適切にシードするのに十分なエントロピーがまだ生成されていない場合 。

  2. 情報理論的安全性を備えたワンタイムパッドの生成

(1)が気になる場合は、/dev/randomで利用可能なエントロピーを確認できます。 。

あなたが(2)をしているなら、あなたはそれをすでに知っているでしょう🙂

注:/ dev / randomからの読み取りがブロックされるかどうかを確認できますが、競合状態の可能性に注意してください。

代替:どちらも使用しないでください!

@otusは、getrandom()も指摘しました システムは/dev/urandomから読み取ります 初期シードエントロピーが利用できない場合にのみブロックします。

/dev/urandomの変更に問題があります getrandom()を使用するには 、ただし、新しい/dev/xrandom デバイスはgetrandom()に基づいて作成されます 。

macOS

ウィキペディアが言うように、それは問題ではありません:

macOSは、SHA1に基づく160ビットのYarrowを使用します。 / dev/randomと/dev/urandomの間に違いはありません。どちらも同じように動作します。 AppleのiOSもYarrowを使用しています。

FreeBSD

ウィキペディアが言うように、それは問題ではありません:

/dev/urandom /dev/randomへの単なるリンクです 適切にシードされるまでブロックするだけです。

これは、起動後、FreeBSDが十分に賢く、十分なシードエントロピーが収集されるまで待ってから、終わりのないランダムな良さのストリームを提供することを意味します。

関連:Linux – Oraclejava7をsetcapcap_net_bind_service+ epで動作させる方法は?

NetBSD

/dev/urandomを使用します 、システムが/dev/randomから少なくとも1回読み取ったと仮定します 適切な初期シードを確保するため。

rnd(4)のマンページには次のように書かれています:

/dev/urandom ブロックすることはありません。

/dev/random 時々ブロックします。
システムの状態が予測可能であることがわかっている場合は、起動時に早期にブロックします。

アプリケーションは/dev/urandomから読み取る必要があります ランダムに生成されたデータが必要な場合
例:シミュレーション用の暗号化キーまたはシード。

システムは、/dev/randomから少なくとも1回は慎重に読み取るように設計する必要があります 起動時に、
インターネットと通信するサービスを実行する前、または暗号化を必要とするサービスを実行する前に、
キーが予測どおりに生成されるのを回避します。


Linux
  1. / dev/randomを使用してLinuxでランダムパスワードを生成する方法

  2. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  3. /dev/sda と /dev/sdb をどのように交換しますか?

  1. /dev/shm/ と /tmp/ はいつ使用する必要がありますか?

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

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

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

  2. / dev / stdin、/ dev / stdout、および/ dev / stderrはどの程度移植可能ですか?

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