/dev/randomのddが異なるファイルサイズを提供するのはなぜですか?

/dev/randomのddが異なるファイルサイズを提供するのはなぜですか?

Ubuntuシステムで次のコマンドを実行します。

dd if=/dev/random of=rand bs=1K count=2

ただし、実行するたびに異なるサイズのファイルが表示されます。なぜこれですか?任意のデータで埋められた特定のサイズのファイルを生成する方法は?

ベストアンサー1

あなたが観察している特別な行動はddLinuxの特別な行動の組み合わせです/dev/random。ちなみに、どちらも作業に適したツールではありません。

Linuxは/dev/randomデータをほとんど返しません。これは、擬似乱数発生器のエントロピーが非常に急速に消えるという仮定に基づいている。新しいエントロピーはゆっくりと収集されるため、/dev/random通常は一度に数バイトしか提供されません。

ddオリジナルのテープデバイスで動作するように設計された古くて気まぐれなプログラムです。 1kBブロックを読み取るように指示すると、ブロックを読み取ろうとします。読み取りで1024バイト未満を返すと、それはすべてです。だから二度電話をdd if=/dev/random bs=1K count=2かけました。read(2)から読み取るため、/dev/randomこれら2つのread呼び出しは通常、利用可能なエントロピーに依存する数バイトだけを返します。また、見ることができますddはいつデータのコピーに適していますか? (またはread()とwrite()が部分的な場合)

オペレーティングシステムのインストーラやレプリケーションプログラムを設計しない限り、/dev/randomLinuxでは絶対に使用しないでください/dev/urandom。マニュアルurandomページは少し誤解を招く場合があります。/dev/urandom実際には暗号化に機能し、長期鍵を生成することもできます。唯一の制限/dev/urandomは、十分なエントロピーを提供する必要があることです。 Linuxディストリビューションは通常、再起動の間にエントロピーを保存するため、新しくインストールした場合にのみエントロピーが不足する可能性があります。実際、エントロピーは決して消えません。もっと情報が欲しいなら読んでください/dev/urandomのrandはログインキーにとって安全ですか?そしてフィード/dev/ランダムエントロピープール?

のほとんどの用途は のddようなツールでよりよく表現できます。 2kBのランダムバイトが必要な場合は、次を実行します。headtail

head -c 2k </dev/urandom >rand

以前のLinuxカーネルを使用すると、外れることがあります。

dd if=/dev/urandom of=rand bs=1k count=2

/dev/urandom要求された数のバイトを返すのが良いからです。しかし、カーネル3.16からはもうそうではありません。これで32MBに制限されます。

通常、固定数のバイトを抽出し、そのdd入力が通常のファイルまたはブロックデバイスから出ていない場合は、バイト単位で読み取る必要がありますdd bs=1 count=2048

おすすめ記事