Por que dd apenas copia 128 bytes de / dev / random quando solicito mais?

10

Estou tentando entender a saída do comando dd . Eu tentei

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

e obteve (como esperado):

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

No entanto, quando tentei

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

Eu tenho

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

Por que é apenas copiar 128 bytes?

    
por fo_x86 17.12.2012 / 20:06

2 respostas

8

Você precisa usar /dev/urandom ou a fonte aleatória de "desbloqueio".

/dev/random usa um tipo de pool de entropia para aumentar a aleatoriedade da fonte de bits. Esse método só retornará quantos bits / bytes aleatórios puderem ser retornados com base no estado do pool de entropia no momento, portanto, se um gerador de número aleatório de hardware for usado, às vezes isso pode ser uma constante. A partir da página de manual do Linux :

The generator also keeps an estimate of the number of bits of noise in the entropy pool. From this entropy pool random numbers are created.

O arquivo /dev/urandom mantém a reutilização do pool interno como está para gerar um número pelo tempo que você precisar. O efeito colateral disso é: não use /dev/urandom para propósitos criptográficos , pois é menos aleatório do que os bits produzidos por /dev/random . Veja o link acima para detalhes.

    
por 17.12.2012 / 20:22
3

Como a leitura de /dev/random retorna apenas a quantidade de bytes disponível, é necessário especificar o tamanho do bloco 1 . No seu exemplo, você define o tamanho do bloco para 512, que falha após a primeira leitura.

Portanto, os argumentos corretos que lê exatamente 512 bytes são:

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

Observe que o comando bloqueará até que haja entropia suficiente no sistema para gerar todos os dados. É assim que /dev/random funciona. Se você não quiser esperar e estiver bem com menos entropia, use /dev/urandom . Na grande maioria dos casos, é preferível usar /dev/urandom .

    
por 05.02.2014 / 01:02