Um guia Super Mega Bowl
Quando este site lança uma moeda ou gira uma roleta, nenhum objeto físico está envolvido. Um computador produz um número que se comporta como o acaso. Mas computadores foram feitos para ser perfeitamente previsíveis, então como eles geram aleatoriedade? A resposta é mais engenhosa, e mais limitada, do que a maioria imagina.
Um computador segue instruções exatas e sempre faz a mesma coisa dada a mesma entrada. Esse é o objetivo de um computador, e é também por isso que ele não consegue inventar aleatoriedade verdadeira sozinho. Tudo o que produz é resultado de um cálculo definido. Então, em vez de criar aleatoriedade real, a maioria dos softwares a imita de forma convincente com um gerador de números pseudoaleatórios, ou PRNG.
Um PRNG começa com um número chamado semente e o passa por uma fórmula para produzir o próximo número, depois realimenta esse valor para produzir o seguinte, e assim por diante. O fluxo que sai é distribuído uniformemente e passa em testes estatísticos de aleatoriedade, então, para qualquer finalidade prática, parece aleatório. Mas é totalmente determinado pela semente. Inicie dois PRNGs a partir da mesma semente e eles produzirão exatamente a mesma sequência para sempre. É por isso que se chama pseudoaleatório: parece aleatório, mas não é verdadeiramente imprevisível.
É isso que o gerador embutido de um navegador faz, e é o que move a moeda, os dados e a roleta daqui. Para um jogo justo, os resultados são uniformes e imprevisíveis na prática, que é tudo o que um randomizador justo precisa.
O fato de uma semente reproduzir a mesma sequência é muitas vezes exatamente o que você quer. Em testes, uma semente fixa permite repetir a mesma execução e depurá-la. Em simulações, permite que outros pesquisadores reproduzam seus resultados com precisão. Aleatoriedade reprodutível soa como contradição, mas é uma das ferramentas mais úteis da computação.
Quando parecer aleatório não basta, os computadores buscam fora de si a imprevisibilidade real. Um gerador de números verdadeiramente aleatórios se apoia em ruído físico: ruído térmico eletrônico, o tempo do decaimento radioativo, estática atmosférica ou pequenas variações do hardware. Como se acredita que essas fontes sejam genuinamente imprevisíveis, os números que produzem são verdadeiramente aleatórios, não apenas estatisticamente aleatórios. São mais lentos de coletar, então normalmente são usados para semear outros geradores em vez de produzir cada valor.
Segurança é o único lugar onde um PRNG comum é perigoso. Se um atacante conseguir descobrir a semente ou a fórmula, ele pode prever todos os valores futuros, o que seria catastrófico para senhas, chaves de criptografia ou embaralhamentos em jogos online. Para isso, os sistemas usam um gerador criptograficamente seguro, ou CSPRNG, projetado para que nem mesmo ver muitas saídas passadas dê qualquer pista útil sobre a próxima, e semeado por aleatoriedade física verdadeira. Essa é a diferença por trás da pergunta comum de se um randomizador é criptograficamente seguro. Um lançador de moedas casual é uniforme e justo, mas não seguro, e não pretende ser.
Computadores não conseguem criar aleatoriedade verdadeira sozinhos, então usam geradores pseudoaleatórios: uma semente mais uma fórmula que produz sequências de aparência aleatória, porém totalmente determinadas. Isso é perfeito para jogos, justiça e simulações, e a semente reprodutível é um bônus. A aleatoriedade verdadeira vem do ruído físico, e a segurança exige um gerador criptográfico especial. Combine a ferramenta com a tarefa e a pseudoaleatoriedade cobre quase tudo.