random e urandom

De LinuxPédia
Ir para: navegação, pesquisa


Em sistemas Linux, para gerar números aleatórios utilizamos os arquivos de blocos /dev/random e /dev/urandom. Essas funções geram sequências pseudoaleatórias utilizando dados presentes no sistema como "sementes" para gerar os caracteres aleatórios, como por exemplo o ruído coletado de drivers de dispositivos.

É importante entender que gerar um código REALMENTE aleatório utilizando métodos eletrônicos determinísticos, é quase impossível, o que é gerado, é uma sequência de caracteres que se aproxima muito de ser um código aleatório. Em alguns dispositivos isso pode ser um problema, como por exemplo no caso de um roteador que após o boot, tem sempre material muito semelhante para servir de semente, nesse caso o melhor é utilizar o tráfego como semente. O problema também ocorre em urnas eletrônicas utilizadas nas eleições, se são todas configuradas de forma semelhante como obter material com entropia suficiente para gerar um código pseudoaleatório?

Funcionamento e diferenças

A implementação do código aleatório do /dev/random utiliza funções hash para gerar uma sequência aleatória a partir e um número de bits chamados de pool de entropia. O random é projetado para ter qualidade criptográfica. O random irá gerar a sequência psaudoaleatória e irá parar quando acabarem os bits de ruído utilizados do seu pool de entropia (entropy pool).

O urandom /dev/urandom (unlimited non-blocking random source) utiliza-se de um processo semelhante para geração de caracteres aleatórios. A principal diferença do urandom para o random é que o urandom não para quando os bits utilizados no seu entropy pool acabam, reutilizando esses bits para gerar mais números randômicos. Por esse motivo, mesmo o urandom sendo projetado para ser um gerador apropriado para uso criptográfico, algumas pessoas consideram ele inapropriado para uso em tarefas mais críticas como uma chave criptográfica de uso prolongado.

É possível também escrever no /dev/random, entrando com dados para serem usados no entropy pool. Isso é particularmente útil no caso de dispositivos que não possuem muita variação de bits como entropia, dessa forma podemos separar uma sequência antes do dispositivo desligar e carregá-la quando o dispositivo ligar, garantindo maior qualidade na geração aleatória.

É possível consultar também qual o tamanho do entropy pool do sistema, isso é possível com o comando "cat /proc/sys/kernel/random_avail". Normalmente esse número varia até um máximo de 4096 bits.

Principais usos dessas funções

Os usos dessas funções são muitas, como por exemplo:

  • Para gerar senhas aleatórias e chaves aleatórias para serem usadas em uma conexão criptografada, incluindo chaves de uso único.
  • Para gravar bits aleatórios em um HD para que os dados que haviam nele antes não possam ser recuperados. Podemos fazer isso com o dd.
  • Para jogos de computador que envolvam aleatoriedade como cartas, dados, roletas, etc.

Fontes

wikipedia.org/dev/random Acessado em 06/02/2016

linux.die.net Acessado em 06/02/2016