Felipe Curi wrote:
> Pessoal, como faço para utilizar os números pseudo-aleatórios gerados 
> pelo sistema em /etc/random?

Os dados gerados por /dev/random não são pseudo-aleatórios, eles são
aleatórios de fato, pois sua fonte é objetivamente imprevisível.

Por serem aleatórios de fato, não é fácil gerá-los, o sistema precisa
coletar entropia das interrupções de sistema.

O que costuma se fazer é ler apenas uma pequena semente do /dev/random,
e usar essa semente para alimentar um PRNG (algoritmo que gera números
pseudo-aleatórios). A quantidade de bytes lidos do /dev/random para ser
usado como semente varia de 4 até uns 20 bytes, dependendo da qualidade
do PRNG.

Por exemplo, em C, você obteria essa semente usando algo como (falta
checagem de erros):

        FILE *fdrand;
        int seed;

        fdrand = fopen("/dev/random", "rb");
        fread(&seed, sizeof(seed), 1, fdrand);
        fclose(fdrand);

/dev/urandom, por outro lado, é um PRNG. Você pode ler quanto quiser
desse dispositivo que ele nunca exaure. Mas não é muito útil
programaticamente falando. É muito ineficiente coletar dados de um
arquivo de dispositivo (que envolve chaveamento entre user- e
kernel-space) sendo que você pode ter o mesmo efeito com um bom PRNG
programado em sua aplicação, com uma boa semente (que o /dev/random
fornece).

-- 
Juliano F. Ravasi ·· http://juliano.info/
5105 46CC B2B7 F0CD 5F47 E740 72CA 54F4 DF37 9E96

"A candle loses nothing by lighting another candle." -- Erin Majors

* NOTE: Don't try to reach me through this address, use "contact@" instead.
---------------------------------------------------------------------------
Esta lista é patrocinada pela Conectiva S.A. Visite http://www.conectiva.com.br

Arquivo: http://bazar2.conectiva.com.br/mailman/listinfo/linux-br
Regras de utilização da lista: http://linux-br.conectiva.com.br
FAQ: http://www.zago.eti.br/menu.html

Responder a