Não é muito compreensivo / dev / random e / dev / urandom

0

Não estou entendendo bem a diferença entre /dev/randome /dev/urandomnos sistemas Linux.

O que significa ficar sem "entropia" e como o sistema obtém mais?

O que significa quando as pessoas dizem /dev/random"bloqueios" se não houver entropia suficiente?

Qual devo usar para quais cenários?

user365967
fonte
Você leu isso?
JakeGould

Respostas:

3

Aleatoriedade significa que o próximo valor que você obtém não depende do valor anterior e não há como prever isso.

Isso é realmente difícil para um computador, uma vez que um computador é basicamente uma calculadora muito rápida - para que ele possa fazer contas, mas sempre terá a resposta exata sempre. Você pode fazer algo próximo da aleatoriedade com a matemática chamada "pseudo-aleatoriedade" - mas não é de alta qualidade o suficiente para ser usada para criptografia.

Portanto, o Linux coleta "aleatoriedade" em conjuntos de várias fontes (como tempo entre eventos de entrada). A "quantidade" de aleatoriedade nesse pool é a entropia. Menos entropia = padrões menos regulares, repetitivos e previsíveis - você deseja o máximo de entropia possível. O kernel do Linux "encherá" seu pool de entropia quando estiver baixo, mas depende do que está acontecendo no sistema, pois usa o tempo entre eventos de hardware imprevisíveis para gerá-lo.

Se o pool estiver vazio, /dev/randomirá bloquear ou parar de fornecer dados, até que o kernel obtenha entropia suficiente.

/dev/urandom continuará - usando técnicas pseudo-aleatórias para gerar números aleatórios.

Agora que você já aprendeu o básico, sempre pode usar o urandom e aqui está o porquê .

Aqui está um trecho desse artigo explicando por que isso não importa:

Mas vamos supor que você tenha obtido esses números aleatórios "verdadeiros". O que você irá fazer com eles?

Você os imprime, enquadra e pendura na parede da sala, para se deleitar com a beleza de um universo quântico? Isso é ótimo, e eu certamente entendo.

Espere o que? Você está usando eles? Para fins criptográficos? Bem, isso estraga tudo, porque agora as coisas ficam um pouco feias.

Veja bem, seus números aleatórios abençoados de efeito quântico verdadeiramente aleatórios são colocados em alguns algoritmos manchados do mundo real menos respeitáveis.

Porque quase todos os algoritmos criptográficos que usamos não sustentam a segurança teórica da informação. Eles podem "apenas" oferecer segurança computacional. As duas exceções que me vêm à mente são o compartilhamento secreto de Shamir e o bloco de uso único. E enquanto o primeiro pode ser um contraponto válido (se você realmente pretende usá-lo), o último é totalmente impraticável.

Mas todos os algoritmos que você conhece, aes, rsa, Diffie-Hellman, curvas elípticas e todos os pacotes de criptografia que você está usando, OpenSSL, GnuTLS, Keyczar, a API de criptografia do seu sistema operacional, são apenas computacionalmente seguros.

Qual é a diferença? Embora algoritmos de segurança da informação sejam seguros, ponto final, esses outros algoritmos não podem garantir segurança contra um adversário com poder computacional ilimitado que está tentando todas as possibilidades de chaves. Ainda os usamos porque levariam todos os computadores do mundo juntos por mais tempo do que o universo existia até agora. Esse é o nível de "insegurança" de que estamos falando aqui.

A menos que alguém esperto quebre o próprio algoritmo, usando muito menos poder computacional. Até poder computacional alcançável hoje. Esse é o grande prêmio que todo criptoanalista sonha: quebrar a si próprio, quebrar a própria RSE e assim por diante.

Portanto, agora estamos no ponto em que você não confia nos blocos de construção internos do gerador de números aleatórios, insistindo em "verdadeira aleatoriedade" em vez de "pseudo-aleatoriedade". Mas então você está usando esses números aleatórios “verdadeiros” em algoritmos que você tanto odeia que não os queira perto do seu gerador de números aleatórios!

A verdade é que, quando os algoritmos de hash de última geração são quebrados, ou quando as cifras de bloco de última geração são quebradas, não importa se você obtém números aleatórios "filosoficamente inseguros" por causa deles. Você não tem mais nada para usá-los com segurança de qualquer maneira.

Portanto, basta usar esses números aleatórios com segurança computacional para seus algoritmos com segurança computacional. Em outras palavras: use / dev / urandom.

LawrenceC
fonte
+1 para o grande esclarecimento. Além disso, o link que você compartilhou é fantástico.
chuva constante