Segurança

/ dev / random vs / dev / urandom e são seguros?

/ dev / random vs / dev / urandom e são seguros?

Começando

Quem teria pensado que gerar um número aleatório seria uma bagunça, é suposto ser tão simples quanto adivinhar um número em qualquer lugar entre um determinado intervalo. Mas não é tão simples quanto parece e também até agora todas as máquinas provaram ser incapazes de gerar um número aleatório verdadeiro por conta própria.

Por que as máquinas não podem gerar números aleatórios verdadeiros por conta própria?

As máquinas ainda são apenas conjuntos instruídos de mecanismos e circuitos e, portanto, não podem ser instruídas a pensar em um número aleatório por conta própria sem qualquer ajuda. E é por isso que, até agora, temos estado envolvendo a natureza ou os humanos com máquinas para gerar um verdadeiro número aleatório. Não discutiremos aqui como gerar um número aleatório verdadeiro, mas discutiremos sobre os geradores de números aleatórios já implementados e seu funcionamento e fraquezas.

Por que gerar um número aleatório verdadeiro é tão importante?

Surge a pergunta: por que a geração de verdadeiros números aleatórios é importante e a resposta para isso é por causa de questões de segurança. A maioria dos algoritmos criptográficos são baseados na geração de números aleatórios, pois esses números aleatórios são usados ​​para criar chaves criptográficas e se os números aleatórios gerados não forem realmente aleatórios por natureza, eles tornam todas essas técnicas criptográficas mais fracas e essas chaves podem ser previstas relativamente mais facilmente usando o algoritmo que foi usado para gerar essas chaves aleatórias. Este é o motivo mais importante para números aleatórios verdadeiros, exceto aplicativos como jogos de azar.

Gerador de números aleatórios em Kernels Linux:

O tópico de nossa discussão hoje é baseado no Linux Random Number Generator, em quais fatores este gerador se baseia e é realmente tão aleatório ou é apenas outro número aleatório tipicamente não confiável.

O Linux usa o Pseudo Random Number Generator (PRNG) ou o Cryptographically Secure Pseudo Random Number Generator (CSPRNG), o que significa que ele usa fórmulas matemáticas complexas e propriedades ambientais para atingir o máximo de aleatoriedade. Linux foi o primeiro sistema operacional a incluir PRNG em seu espaço de kernel. Isso foi implementado por Theodore Ts'o em 1994.

O Linux tem três categorias de geradores de números aleatórios, / dev / random, / dev / urandom, / dev / arandom. Esses três são os arquivos nos quais o Linux armazena números aleatórios. Os números aleatórios nesses arquivos são gerados usando o ruído ambiental dos drivers de dispositivo e outras fontes. Além disso, para garantir a aleatoriedade em seus números aleatórios, o Linux usa entropia, que é a extensão da incerteza ou desordem entre eles. Você também pode encontrar a página de manual do Linux Random Number Generator (RNG) aqui:

http: // man7.org / linux / man-pages / man4 / random.4.html

/ dev / random contra / dev / urandom contra / dev / arandom:

As principais diferenças entre / dev / random, / dev / urandom e / dev / arandom é que / dev / random bloqueia se a entropia não indicar aleatoriedade suficiente, / dev / urandom nunca bloqueia, mesmo quando o gerador de número pseudoaleatório não é totalmente propagado quando inicializado e por último / dev / arandom bloqueia apenas quando o gerador de números pseudoaleatórios ainda não foi totalmente propagado. Resumindo, / dev / random é o mais seguro de todos, então vem / dev / arandom e o menos seguro é / dev / urandom. Normalmente / dev / random e / dev / urandom são usados ​​porque / dev / arandom em muitos termos é semelhante a / dev / urandom. A estimativa de entropia para o conjunto de números aleatórios em suma é usada para determinar a aleatoriedade dos números gerados. Quanto mais entropia é, mais aleatoriedade é alcançada e melhor é. A quantidade atual de entropia e o tamanho de seu pool de entropia estão disponíveis em / proc / sys / kernel / random / nomeados como entropy_avail e pool_size, respectivamente, que podem ser exibidos no terminal usando os comandos:

cat / proc / sys / kernel / random / entropy_avail

E:

cat / proc / sys / kernel / random / pool_size

Tanto urandom quanto aleatório são usados ​​em diferentes cenários. 'Urandom' é usado onde há necessidade constante de números aleatórios e sua aleatoriedade não é muito importante, enquanto 'aleatório' é usado onde há uma preocupação de segurança e sua aleatoriedade deve ser confiável, pois bloqueia a saída de números aleatórios se a entropia não for até a marca. Embora a entropia para urandom (Unlimited Random) não seja muito mais fraca, é recomendado o uso de random quando mais segurança é necessária devido à possibilidade de ataques a números gerados por urandom.

Fraquezas nos geradores de números aleatórios do Linux

Para hardware de memória não volátil:

Para os kernels do Linux, o gerador de número aleatório não é bom para hardware embarcado, como roteadores, nos quais o estado inicializável é previsível e a fonte de entropia suficiente é limitada. Para este tipo de hardware, é recomendado salvar e usar o estado Random Number Generator (RNG) antes do desligamento que será usado na próxima inicialização. Em tais casos de roteadores, os invasores só podem comprometer e prever os números aleatórios gerados se eles tiverem acesso a todos os links do roteador e estiverem espionando seus links de comunicação ou se tiverem acessado diretamente o estado RNG salvo do próprio roteador.

Por esta falha do RNG no caso de hardware, geradores de entropia de terceiros vêm ao resgate. Esses geradores de entropia, como 'haveged', usam temporização de cache do processador, dispositivos externos de entrada de áudio e vídeo para aumentar a entropia a um grau aceitável.

Estimativa de entropia:

Como mencionado antes, o kernel do Linux determina a aleatoriedade em termos de entropia, mas não calcula realmente a entropia todas as vezes e, em vez disso, usa estimativas de entropia. Diversas pesquisas também revelaram que as estimativas de entropia de números aleatórios usadas no Linux não são adequadas ou estimativas mais próximas, tornando assim a aleatoriedade geral dos números mais fraca.

Embora existam alguns pontos fracos no Linux Random Number Generator, é uma opção muito melhor em comparação com outros RNGs, sem esquecer os patches em andamento que são fornecidos por contribuidores e desenvolvedores do Linux.

Concluindo:

Tudo isso veio do meu lado sobre o Gerador de números aleatórios no kernel do Linux. Eu tive um bom tempo em espalhar esse conhecimento com você. Espero que você tenha aprendido algo novo com ele e também que compartilhe o conhecimento ainda mais com o mundo. Por fim, obrigado por investir tempo neste artigo.

SuperTuxKart para Linux
SuperTuxKart é um ótimo título projetado para trazer a você a experiência Mario Kart gratuitamente em seu sistema Linux. É bastante desafiador e diver...
Tutorial de Battle for Wesnoth
The Battle for Wesnoth é um dos jogos de estratégia de código aberto mais populares que você pode jogar no momento. Este jogo não está apenas em desen...
0 A.D. Tutorial
Dos muitos jogos de estratégia que existem, 0 A.D. consegue se destacar como um título abrangente e um jogo muito profundo e tático, apesar de ser de ...