13Jul

Como os computadores geram números aleatórios

Computadores

dados-aleatórios

geram números aleatórios para tudo, desde criptografia até videogames e jogos de azar. Existem duas categorias de números aleatórios - números aleatórios "verdadeiros" e números de pseudorandom - e a diferença é importante para a segurança dos sistemas de criptografia.

Os computadores podem gerar números verdadeiramente aleatórios observando alguns dados externos, como movimentos de mouse ou ruído do ventilador, que não são previsíveis e criando dados dele. Isso é conhecido como entropia. Outras vezes, eles geram números "pseudorandom" usando um algoritmo para que os resultados aparecem aleatórios, mesmo que eles não sejam.

Este tópico tornou-se mais controverso recentemente, com muitas pessoas questionando se o chip gerador de números aleatórios de hardware incorporado da Intel é confiável. Para entender por que não pode ser confiável, você terá que entender como os números aleatórios são divididos em primeiro lugar, e para o que eles são usados.

Quais números randômicos são usados ​​para

Os números aleatórios foram usados ​​por muitos milhares de anos. Se está lançando uma moeda ou rolando um dado, o objetivo é deixar o resultado final até chance aleatória. Os geradores de números aleatórios em um computador são semelhantes - eles são uma tentativa de alcançar um resultado aleatório imprevisível.

Os geradores de números aleatórios são úteis para vários propósitos diferentes. Além de aplicações óbvias, como a geração de números aleatórios para fins de jogo ou criação de resultados imprevisíveis em um jogo de computador, a aleatoriedade é importante para a criptografia.

Cryptography requer números que os atacantes não conseguem adivinhar. Não podemos usar os mesmos números repetidamente. Queremos gerar esses números de uma forma muito imprevisível para que os atacantes não possam adiviná-los. Esses números aleatórios são essenciais para a criptografia segura, seja você criptografando seus próprios arquivos ou apenas usando um site HTTPS na Internet.

video-poker-gambling-randomness

Números randômicos verdadeiros

Você pode estar se perguntando como um computador pode realmente gerar um número aleatório. De onde vem essa "aleatoriedade".Se é apenas um pedaço de código de computador, não é possível que os números que o computador gere possam ser previsíveis?

Geralmente agrupa os números aleatórios que os computadores geram em dois tipos, dependendo de como eles são gerados: números verdadeiros "verdadeiros" e números pseudo-aleatórios.

Para gerar um número aleatório "verdadeiro", o computador mede algum tipo de fenômeno físico que ocorre fora do computador. Por exemplo, o computador poderia medir a decomposição radioativa de um átomo. De acordo com a teoria quântica, não há como saber com certeza quando a decaimento radioativo ocorrerá, então esta é essencialmente "aleatoriedade pura" do universo. Um invasor não seria capaz de prever quando a decaimento radioativo ocorreria, então eles não saberiam o valor aleatório.

Para mais um exemplo do dia-a-dia, o computador pode confiar no ruído atmosférico ou simplesmente usar a hora exata em que você pressiona teclas no seu teclado como fonte de dados imprevisíveis ou entropia. Por exemplo, seu computador pode notar que você pressionou uma tecla exatamente em 0.23423523 segundos depois das 2 da noite. Agarre o tempo suficiente associado a essas teclas e você terá uma fonte de entropia que você pode usar para gerar um aleatório "verdadeiro"número. Você não é uma máquina previsível, então um atacante não consegue adivinhar o momento preciso quando você pressiona essas teclas. O dispositivo aleatório /dev/ no Linux, que gera números aleatórios, "blocos" e não retorna um resultado até reunir entropia suficiente para retornar um número verdadeiramente aleatório.

linux-generate-random-data

Números de pseudorandom

Os números de pseudorandom são uma alternativa aos números aleatórios "verdadeiros".Um computador poderia usar um valor de semente e um algoritmo para gerar números que parecem ser aleatórios, mas que de fato são previsíveis. O computador não agrupa dados aleatórios do ambiente.

Isso não é necessariamente uma coisa ruim em todas as situações. Por exemplo, se você estiver jogando um jogo de vídeo, realmente não importa se os eventos que ocorrem nesse jogo são encapsulados por números aleatórios "verdadeiros" ou números de pseudorandom. Por outro lado, se você estiver usando criptografia, não deseja usar números pseudorandom que um invasor possa adivinhar.

Por exemplo, digamos que um invasor conhece o algoritmo e o valor de semente que usa um gerador de números pseudorandom. E digamos que um algoritmo de criptografia obtém um número de pseudorreção desse algoritmo e o usa para gerar uma chave de criptografia sem adicionar qualquer aleatoriedade adicional. Se um invasor sabe o suficiente, eles poderiam trabalhar para trás e determinar o número de pseudorandom que o algoritmo de criptografia deve ter escolhido nesse caso, quebrando a criptografia.

números pseudorandom

O NSA e o gerador de números aleatórios do hardware da Intel

Para tornar as coisas mais fáceis para os desenvolvedores e ajudar a gerar números aleatórios seguros, os chips Intel incluem um gerador de números aleatórios baseado em hardware conhecido como RdRand. Este chip usa uma fonte de entropia no processador e fornece números aleatórios para o software quando o software os solicita.

O problema aqui é que o gerador de números aleatórios é essencialmente uma caixa preta e não sabemos o que está acontecendo dentro dele. Se RdR e continha um backdoor NSA, o governo seria capaz de quebrar chaves de criptografia que foram geradas com apenas dados fornecidos por esse gerador de números aleatórios.

Esta é uma preocupação séria. Em dezembro de 2013, os desenvolvedores do FreeBSD removeram suporte para usar RdRand diretamente como uma fonte de aleatoriedade, dizendo que não poderiam confiar nisso.[Fonte] A saída do dispositivo RdRand seria alimentada em outro algoritmo que adiciona entropia adicional, garantindo que qualquer porta traseira no gerador de números aleatórios não importaria. O Linux já funcionou dessa maneira, além de aleatorizar os dados aleatórios provenientes de RdRand para que não fosse previsível, mesmo que houvesse um backdoor.[Fonte] Em um AMA recente( "Ask Me Anything") no Reddit, o CEO da Intel, Brian Krzanich, não respondeu perguntas sobre essas preocupações.[Fonte]

Claro, isso provavelmente não é apenas um problema com chips Intel. Os desenvolvedores do FreeBSD também chamaram as fichas da Via pelo nome. Esta controvérsia mostra por que gerar números aleatórios verdadeiramente aleatórios e não previsíveis é tão importante.

Intel

Para gerar números aleatórios "verdadeiros", geradores de números aleatórios coletam "entropia", ou dados aparentemente aleatórios do mundo físico ao seu redor. Para números aleatórios que não realmente precisam ser aleatórios, eles podem usar apenas um algoritmo e um valor de semente. Crédito da imagem

: rekre89 no Flickr, Lisa Brewster no Flickr, Ryan Somma no Flickr, huangjiahui no Flickr