Daha fazla istekte bulunduğumda dd neden yalnızca / 128 / random'dan 128 bayt kopyalar?


10

ddKomutun çıktısını anlamaya çalışıyorum . denedim

dd if=/dev/zero of=/dev/null bs=512 count=1

ve (beklendiği gibi) var:

 1+0 records in
 1+0 records out
 512 bytes (512 B) copied, 2e-05 seconds, 26 MB/s

Ancak denediğimde

dd if=/dev/random of=/dev/null bs=512 count=1

Bende var

 0+1 records in
 0+1 records out
 128 bytes (128 B) copied, 0.00012 seconds, 1.1 MB/s

Neden sadece 128 bayt kopyalanıyor?


Bkz superuser.com/questions/359599/... / dev / random ve urandom daha eksiksiz bir tartışma için
BobT

Yanıtlar:


8

Veya /dev/urandom"engellemeyi kaldırma" rastgele kaynağını kullanmanız gerekir .

/dev/randombit kaynağının rasgeleliğini artırmak için bir çeşit entropi havuzu kullanır. Bu yöntem yalnızca o anda entropi havuzunun durumuna göre döndürülebilecek sayıda rastgele bit / bayt döndürür, bu nedenle bir donanım rasgele sayı üreteci kullanılırsa, bu bazen sabit olabilir. Gönderen Linux man :

Jeneratör ayrıca entropi havuzundaki gürültü bitlerinin sayısını tahmin eder. Bu entropi havuzundan rastgele sayılar oluşturulur.

/dev/urandomDosya sürece gerekmez olarak bir sayı üretmek için olduğu gibi iç havuz yeniden tutar. Bunun yan etkisi: tarafından üretilen bitlerden daha az rasgele olduğu için kriptografik amaçlar için kullanmayın/dev/urandom/dev/random . Ayrıntılar için yukarıdaki manpage bağlantısına bakın.



3

Okuma /dev/randomyalnızca kullanılabilir bayt miktarını döndürdüğünden , blok boyutu 1'i belirtmeniz gerekir . Örneğinizde, blok boyutunu ilk okumadan sonra başarısız olan 512 olarak ayarlarsınız.

Bu nedenle, tam olarak 512 bayt okuyan doğru bağımsız değişkenler şunlardır:

dd if=/dev/random of=filename bs=1 count=512

Sistemde tüm verileri oluşturmak için yeterli entropi olana kadar komutun engelleneceğini unutmayın. İşte böyle /dev/randomçalışır. Beklemek istemiyorsanız ve daha az entropi ile iyiyseniz, /dev/urandombunun yerine kullanın. Olguların çoğunda kullanılması /dev/urandomtercih edilir.


Açıklama için +1, ancak 512 kadar yüksek bayt sayımının /dev/randomneredeyse kullanılamaz hale geldiği söylenmelidir , çünkü komutun tamamlanması birkaç dakika sürebilir. Ayrıca, hiç bayt yoksa bs=512 count=1çağrı hala engelliyor gibi görünüyor , değil mi? Anahtarlamaya ve değerlere bir alternatif kullanmaktır ; yani . bscountiflag=fullblockbs=512 count=1 iflag=fullblock
mklement0

IMHO, bu cevap @ Breakthrough'un cevabı ile birleştirilmelidir. (Atılım değil iken benim sorunum cevap oldu).
superbob
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.