3
respostas

Aleatoriedade

Fiquei interessado sobre essa questão dos random seeds... Essa pseudo-aleatoriedade pode impactar na segurança de um programa? Por exemplo, seria possível acessar qual o seed e manipular o jogo?

Existe alguma alternativa mais segura no próprio Python?

Estou gostando muito do curso e animado para a sequencia!

3 respostas

Oi! Eu não manjo muito do assunto mas vou falar o pouco que sei hahaha

Sim, as seed podem ser descobertas, justamente por terem um grau deterministico nelas, visto que elas são escolhidas previamente. Existem métodos mais seguros de criar randomização, a grande maioria deles envolve criptografia.

Existe também a função os.urandom() no python que retorna uma string com uma quantidade aleatória de bytes que pode ser criptografada ou transformado em outro tipo, como int ou float. Alguns consideram ela como "mais aleatória".

Oi Guilherme, obrigado pela resposta, ajudou sim! Vou buscar mais informações sobre a função que você mencionou!

Oi Felipe! Não assisti a aula em questão mas você está correto, é possível sim adivinhar a seed que gerou a sequência de números aleatórios por meio do que a gente chama de criptanálise.

O gerador de número pseudoaleatório utilizado por padrão no Python (se eu não me engano, o sistema do PS3 e a linguagem R também o utilizam) se chama Mersenne Twister, que na verdade é considerado relativamente bom para aplicações comuns - tendo um período de aleaoriedade de 623 bits, isto é, é capaz de gerar uma sequência completamente aleatória de 623 0s e 1s. A partir do 624o bit, a sequência começa a abedecer algum tipo de padrão que consegue ser facilmente encontrado por algoritmos especializados em descobrir essas falhas.

Para aplicações onde queremos gerar uma sequência pseudoaleatória realmente segura - ou suficientemente aleatória a ponto de ter como saída números que se aproximem de uma distribuição realmente aleatória - utilizamos algoritmos geradores de números pseudoaleatórios criptograficamente seguros, como o Blum-Blum-Shub, que é amplamente utilizado em jogos e criptografia.

O que é legal dessa temática toda é que nenhum algoritmo de computador realmente gera números aleatórios, eles apenas retornam sequências que parecem aleatórias dentro de um determinado intervalo, que chamamos de período. Outra coisa é que todo algoritmo também é passível de ser quebrado, mas o que geralmente se busca é fazer com que mesmo você sabendo a sequência de bits gerados pelo algoritmo e algumas fontes de entropia do computador, você não consiga construir um algoritmo de tempo polinomial capaz de predizer com chances maiores de 50% qual será o próximo bit da sequência, a isso damos o nome de lei do próximo bit.

Só quis dar essa explicação porque estava vendo na faculdade há uns dias e achei muito maneiro :)