Com que frequência o / dev / urandom coleta amostras de / dev / random?

15

A menos que eu esteja totalmente confuso e não faça isso.

Quero saber se o / dev / urandom ganhará ou não maior entropia se eu pegar um RNG de hardware e conectar sua entropia no / dev / random.

Então, para reformular, se eu aumentar a entropia de / dev / random em X bits / s (ou seja, / dev / random após a injeção permite que você experimente X bits / s), esse aumento da entropia será transferido para o urandom?


fonte
2
Embora não seja muito relevante, 2uo.de/myths-about-urandom e blog.cloudflare.com/… (em particular o gráfico em blog.cloudflare.com/content/images/image01.png ) pode ser uma leitura útil.
user1686
Se você tivesse um verdadeiro RNG de hardware, poderia usá-lo diretamente.
Michael Hampton

Respostas:

25

Não é realmente preciso dizer que /dev/urandomamostras de /dev/random. Em vez disso, os dois conjuntos são apoiados pela mesma fonte de entropia. Quando a contagem de entropia dos conjuntos chega a zero, eles se propõem novamente a partir do conjunto de entradas compartilhadas. Portanto, se você der entropia de entrada ao kernel de alguma maneira, ele poderá ser usado para um /dev/randomou outro /dev/urandom, dependendo do que for lido.

No entanto, /dev/urandom também é limitado em termos de frequência com que pode solicitar nova propagação. Por padrão, ele só pode ser reproduzido novamente a cada 60 segundos.

Nada disso realmente importa na prática, porque, desde que o pool seja inicializado com pelo menos 128 bits de entropia, prever qualquer saída exigiria não apenas ver saídas anteriores, mas também quebrar os algoritmos usados, incluindo pelo menos a resistência à pré-imagem do SHA-1 ( que permanece inalterado ).

otus
fonte
7

Depende da implementação. Mas normalmente, /dev/randome /dev/urandompuxe a entropia do mesmo pool, assim será.

Diagrama de https://blog.cloudflare.com/ensuring-randomness-with-linuxs-random-number-generator/

David Schwartz
fonte
4

No Linux, todos os dados gravados em / dev / random ou / dev / urandom são copiados para o pool de bloqueio (fonte de aleatoriedade para / dev / random) e o pool de não bloqueio (fonte de aleatoriedade para / dev / urandom).

Basta olhar para a função random_write .

Mas os dados gravados em / dev / random não são contados pelo estimador de entropia interna (afinal, algum adversário local pode tentar apenas redirecionar / dev / zero ou alguma outra fonte não aleatória para / dev / random), portanto, se você tiver problemas com o bloqueio de / dev / random, basta escrever em / dev / random não ajuda.

No Linux, escreva para / dev / random (ou / dev / urandom, sem diferença), mas leia sempre em / dev / urandom (uma vez que é propagado - na verdade, a melhor maneira é usar a nova chamada de sistema getrandom ).

Não sei como isso funciona em outros Unices.

JJZ
fonte