Zufallsgenerator: Erzeuge eine zufällige Zahl & erfahre alles dazu!
Gerador aleatório: Crie um número aleatório e descubra tudo sobre ele!

Gerador aleatório: Crie um número aleatório e descubra tudo sobre ele!

Um Gerador aleatório é uma ferramenta ou algoritmo que produz resultados imprevisíveis e não determinísticos. Esses geradores são essenciais em muitas áreas, desde a criptografia até a simulação de computadores.

Zuletzt geprüft und aktualisiert: Juni 2026 von Sara Devegano

  • Resultados imprevisíveis: Os geradores aleatórios fornecem resultados que não podem ser previstos.
  • Uso em criptografia: Eles são essenciais para a comunicação segura.
  • Simulações de computador: Frequentemente usado na modelagem e análise de sistemas complexos.

Gerador de números aleatórios


Zufallsgenerator: Erzeuge eine zufällige Zahl & erfahre alles dazu! - 22/07/2024

Como funciona um gerador de números aleatórios? 🔍

Os geradores aleatórios funcionam com processos físicos ou algoritmos matemáticos. Os tipos mais importantes são os geradores de números aleatórios verdadeiros (TRNGs) e os geradores de números pseudo-aleatórios (PRNGs).

Várias aplicações da aleatoriedade levaram ao desenvolvimento de diferentes métodos de geração de dados aleatórios. Alguns deles existem desde a antiguidade, incluindo exemplos bem conhecidos, como jogar dados, jogar moedas, embaralhar cartas de baralho, usar talos de mil-folhas (para adivinhação) no I Ching e inúmeras outras técnicas. Devido à natureza mecânica dessas técnicas, a geração de grandes quantidades de números suficientemente aleatórios (importantes em estatística) exigia muito trabalho e tempo. Portanto, os resultados às vezes eram coletados e distribuídos como tabelas de números aleatórios.

Há vários métodos computacionais para gerar números pseudo-aleatórios. Todos ficam aquém do objetivo da verdadeira aleatoriedade, embora possam passar, com graus variados de sucesso, em alguns dos testes estatísticos de aleatoriedade, que são projetados para medir o grau de imprevisibilidade dos resultados (ou seja, até que ponto seus padrões são reconhecíveis). Isso os torna geralmente inutilizáveis para aplicativos como a criptografia. No entanto, há também geradores de números pseudoaleatórios criptograficamente seguros (CSPRNGS) cuidadosamente projetados, com recursos especiais criados especificamente para uso em criptografia. Inserir foram desenvolvidos em criptografia.

Onde podemos jogar blackjack on-line?

Minhas melhor Experiências de cassino on-line Eu tenho no Playamo Casino feito. Em minha opinião, há o MELHOR SELEÇÃO em mesas com dealers ao vivo, onde treinamos para o cassino real. Ao contrário de muitos outros cassinos on-line, aqui os ganhos também são pagos de forma muito rápida e confiável. É por isso que eu definitivamente recomendo a Playamo!

O Playamo Casino oferece várias mesas de blackjack ao vivo e um serviço rápido de Pagamento de nossos lucros.
CLIQUE NO BOTÃO AGORA PARA GARANTIR SEU BÔNUS!
Zufallsgenerator: Erzeuge eine zufällige Zahl & erfahre alles dazu! - 22/07/2024

Aplicações de geradores aleatórios

  1. Jogos e entretenimento:
    • Os geradores aleatórios são usados em Jogar zur Erstellung unvorhersehbarer Elemente wie Würfelwürfe, Kartenziehungen oder Level-Generierung verwendet.
  2. Criptografia:
    • Na segurança da informação, os geradores de números aleatórios são essenciais para a geração de chaves, sais e nonces, que são necessários para criptografia e autenticação.
  3. Estatísticas e amostras:
    • Ao criar amostras para pesquisas e estudos, os geradores aleatórios ajudam a obter amostras representativas e imparciais.
  4. Modelos de simulação:
    • Na ciência e na tecnologia, os geradores de números aleatórios são usados para realizar simulações de Monte Carlo que usam variáveis aleatórias para modelar e analisar sistemas complexos.
  5. Loterias e concursos:
    • Eles garantem a seleção justa e aleatória dos ganhadores em loterias, sorteios e outras competições.
  6. Algoritmos de otimização:
    • Os métodos aleatórios, como os algoritmos genéticos e o recozimento simulado, usam geradores aleatórios para pesquisar espaços de solução com eficiência e encontrar soluções ideais.
  7. Inteligência artificial e aprendizado de máquina Aprendizagem:
    • Os geradores aleatórios são usados para misturar conjuntos de dados e selecionar aleatoriamente dados de treinamento e teste para validar e treinar os modelos.

Os geradores de números aleatórios têm aplicações em Jogos de azarem amostragem estatística, simulação de computador, criptografia, design totalmente aleatório e outras áreas em que a geração de um resultado imprevisível é desejável. Em geral, nos aplicativos em que a imprevisibilidade é o principal recurso, como os aplicativos de segurança, os geradores de hardware são preferidos sempre que possível.

Os geradores de números pseudoaleatórios são muito úteis no desenvolvimento de métodos de simulação de Monte Carlo, pois a depuração é facilitada pela possibilidade de repetir a mesma sequência de números aleatórios ao começar com a mesma semente aleatória. Eles também são usados em criptografia, desde que a semente permaneça secreta. O emissor e o receptor podem gerar automaticamente o mesmo conjunto de números para usar como chave.

A geração de números pseudorandômicos é uma tarefa importante e comum na programação de computadores. Embora a criptografia e determinados algoritmos numéricos exijam um grau muito alto de aleatoriedade aparente, muitas outras operações exigem apenas um grau modesto de imprevisibilidade. Alguns exemplos simples podem ser a apresentação a um usuário de uma "citação aleatória do dia" ou a determinação da direção em que um oponente controlado por computador em um jogo de computador pode se mover. Formas mais fracas de aleatoriedade são usadas em algoritmos de hashing e na criação de algoritmos de busca e classificação amortizados.

Einige Anwendungen, die auf den ersten Blick für Randomisierung geeignet erscheinen, sind in Wirklichkeit nicht so einfach. Zum Beispiel muss ein System, das „zufällig“ Musikstücke für ein Hintergrundmusiksystem auswählt, nur zufällig erscheinen und kann sogar Möglichkeiten haben, die Musikauswahl zu direção: Ein wirklich zufälliges System hätte keine Einschränkung, dass derselbe Titel zwei- oder dreimal hintereinander erscheinen könnte.


Números aleatórios reais vs. números pseudo-aleatórios 🆚

A diferença entre números reais e pseudo-aleatórios está na previsibilidade e na fonte da aleatoriedade.

  • Números aleatórios reais: Imprevisível, com base em processos físicos.
  • Números pseudo-aleatórios: Gerado por algoritmos, previsível se a semente for conhecida.

Há dois métodos principais para gerar números aleatórios. O primeiro método mede um fenômeno físico que é considerado aleatório e, em seguida, compensa possíveis distorções no processo de medição. Exemplos de fontes incluem a medição de ruído atmosférico, ruído térmico e outros fenômenos eletromagnéticos e mecânicos quânticos externos. Por exemplo, a radiação cósmica de fundo ou o decaimento radioativo medido em curtos períodos de tempo são fontes de entropia natural (como uma medida da imprevisibilidade ou surpresa do processo de geração de números).

A taxa na qual a entropia pode ser extraída de fontes naturais depende dos fenômenos físicos subjacentes que estão sendo medidos. Portanto, diz-se que as fontes de entropia "verdadeira" de ocorrência natural estão bloqueando - elas têm uma taxa limitada até que seja coletada entropia suficiente para atender à demanda. Em alguns sistemas do tipo Unix, incluindo a maioria das distribuições Linux, o arquivo de pseudodispositivo /dev/random bloqueia até que seja coletada entropia suficiente do ambiente. Devido a esse comportamento de bloqueio, grandes leituras de dados em massa do /dev/random, como o preenchimento de um disco rígido com bits aleatórios, podem ser lentas em sistemas que usam esse tipo de fonte de entropia.

O segundo método usa algoritmos computacionais que podem gerar longas sequências de resultados aparentemente aleatórios que, na verdade, são completamente determinados por um valor inicial mais curto, conhecido como valor de semente ou chave. Isso permite que toda a sequência aparentemente aleatória seja reproduzida se o valor da semente for conhecido. Esse tipo de gerador de números aleatórios é geralmente chamado de gerador de números pseudo-aleatórios. Esse tipo de gerador geralmente não é bloqueado, portanto, não tem a taxa limitada por um evento externo, o que permite leituras de grandes volumes de dados.

Alguns sistemas usam uma abordagem híbrida que coleta aleatoriedade de fontes naturais quando disponível e conta com geradores de números pseudoaleatórios criptograficamente seguros (CSPRNGs) que são periodicamente realimentados quando a taxa de leitura desejada excede a capacidade da abordagem de coleta natural de atender à demanda. Essa abordagem evita o comportamento de bloqueio com taxa limitada dos geradores de números aleatórios com base em métodos mais lentos e puramente baseados no ambiente.

Embora um gerador de números pseudoaleatórios baseado exclusivamente em lógica determinística nunca possa ser considerado uma fonte aleatória "verdadeira" no sentido mais puro da palavra, eles geralmente são suficientes na prática, mesmo para aplicativos críticos de segurança exigentes. Geradores de números pseudoaleatórios cuidadosamente projetados e implementados podem ser certificados para fins criptográficos críticos de segurança, como é o caso dos algoritmos Yarrow e Fortuna. O primeiro é a base da fonte de entropia /dev/random no FreeBSD, AIX, macOS, NetBSD e outros. O OpenBSD usa um algoritmo de números pseudo-aleatórios conhecido como arc4random.


Métodos de geração

Métodos físicos

Os métodos mais antigos de geração de números aleatórios, como lançamento de dados, lançamento de moedas e roletas, ainda são usados atualmente, principalmente em jogos e apostas, pois são lentos demais para a maioria das aplicações em estatística e criptografia.

Um gerador de números aleatórios físicos pode ser baseado em um fenômeno físico atômico ou subatômico essencialmente aleatório, cuja imprevisibilidade pode ser atribuída às leis da mecânica quântica. As fontes de entropia incluem decaimento radioativo, ruído térmico, ruído de tiro, ruído de avalanche em diodos Zener, desvios de relógio, movimentos temporais de uma cabeça de leitura de disco rígido e ruído de rádio. No entanto, os fenômenos físicos e as ferramentas usadas para medi-los geralmente apresentam assimetrias e distorções sistemáticas que fazem com que seus resultados não sejam uniformemente aleatórios. Um extrator aleatório, como uma função de hash criptográfica, pode ser usado para obter uma distribuição uniforme de bits de uma fonte não uniformemente aleatória, mas com uma taxa de bits menor.

Um protótipo de um gerador de números aleatórios em tempo real de alta velocidade baseado em um laser caótico foi desenvolvido em 2013.

Foram desenvolvidos vários métodos inventivos para coletar essas informações entrópicas. Uma técnica é aplicar uma função de hash a um quadro de um fluxo de vídeo de uma fonte imprevisível. Lavarand usou essa técnica com imagens de várias lâmpadas de lava. O HotBits mediu o decaimento radioativo com tubos Geiger-Müller, enquanto o Random.org registrou flutuações na amplitude do ruído atmosférico com um rádio normal.

Métodos auxiliados por computador

A maioria dos números aleatórios gerados por computadores usa PRNGs, que são algoritmos que podem gerar automaticamente longas sequências de números com boas propriedades de aleatoriedade, mas eventualmente as sequências se repetem (ou o uso da memória cresce indefinidamente). Esses números aleatórios são suficientes em muitas situações, mas não são tão aleatórios quanto os números gerados a partir do ruído atmosférico eletromagnético usado como fonte de entropia. O conjunto de valores gerados por esses algoritmos geralmente é determinado por um número fixo chamado de semente. Um dos PRNGs mais comuns é o gerador de congruência linear, que usa a relação de recorrência

Xn+1=(aXn+b)mod mX_{n+1} = (aX_n + b) \mod mXn+1=(aXn+b)modm

é usada para gerar números em que aaa, bbb e mmm são números inteiros grandes e Xn+1X_{n+1}Xn+1 é o próximo número em uma série de números pseudoaleatórios. O número máximo de números que a fórmula pode gerar é o módulo mmm. A relação de recorrência pode ser estendida às matrizes para ter períodos muito mais longos e melhores propriedades estatísticas. Para evitar certas propriedades não aleatórias de um único gerador de congruência linear, vários desses geradores de números aleatórios com valores ligeiramente diferentes do coeficiente multiplicador aaa podem ser usados em paralelo, com um gerador de números aleatórios "mestre" selecionando entre os diferentes geradores.

Um método simples para gerar números aleatórios manualmente é o chamado método do quadrado médio, proposto por John von Neumann. Embora seja fácil de implementar, seu resultado é de baixa qualidade. Ele tem um período muito curto e sérios pontos fracos, como o fato de que a sequência de saída quase sempre converge para zero. Uma inovação recente é a combinação do método do quadrado médio com uma sequência de Weyl. Esse método produz resultados de alta qualidade durante um longo período.

A maioria das linguagens de programação contém funções ou rotinas de biblioteca que fornecem geradores de números aleatórios. Eles geralmente são projetados para fornecer um byte ou palavra aleatória ou um número de ponto flutuante uniformemente distribuído entre 0 e 1.

A qualidade, ou seja, a aleatoriedade, dessas funções de biblioteca varia muito, desde resultados completamente previsíveis até criptograficamente seguros. O gerador de números aleatórios padrão em muitas linguagens, incluindo Python, Ruby, R, IDL e PHP, é baseado no algoritmo Mersenne Twister e não é suficiente para fins criptográficos, conforme explicitamente declarado na documentação da linguagem. Essas funções de biblioteca geralmente têm propriedades estatísticas ruins e alguns padrões repetidos após apenas dezenas de milhares de tentativas. Elas geralmente são inicializadas com o relógio em tempo real de um computador como semente, pois esse relógio é de 64 bits e mede em nanossegundos, muito além da precisão de uma pessoa. Essas funções podem fornecer aleatoriedade suficiente para determinadas tarefas (por exemplo, videogames), mas não são adequadas quando é necessária aleatoriedade de alta qualidade, como em aplicativos criptográficos ou estatísticas.

Geradores de números aleatórios de maior qualidade estão disponíveis na maioria dos sistemas operacionais; por exemplo, /dev/random em vários derivados do BSD, Linux, Mac OS X, IRIX e Solaris, ou CryptGenRandom para Microsoft Windows. A maioria das linguagens de programação, inclusive as mencionadas acima, oferece uma maneira de acessar essas fontes de nível superior.

Gerado por pessoas

A geração de números aleatórios também pode ser realizada por humanos, coletando várias entradas de usuários finais e usando-as como fonte de aleatoriedade. No entanto, a maioria dos estudos conclui que os seres humanos apresentam um certo grau de não aleatoriedade ao tentar gerar uma sequência aleatória de, por exemplo, dígitos ou letras. Eles podem alternar entre as escolhas com muita frequência em comparação com um bom randomizador; por isso, essa abordagem não é amplamente utilizada. Pelo mesmo motivo que os humanos têm um desempenho ruim nessa tarefa, a geração de números aleatórios humanos pode ser usada como uma ferramenta para obter informações sobre as funções cerebrais que não são acessíveis por outros meios.

Pós-processamento e verificações estatísticas

Mesmo com uma fonte de números aleatórios plausível (talvez de um gerador de hardware baseado em mecânica quântica), é preciso ter cuidado para obter números completamente imparciais. O comportamento desses geradores geralmente muda com a temperatura, a tensão de alimentação, a idade do dispositivo ou outras influências externas.

Os números aleatórios gerados às vezes são submetidos a testes estatísticos antes de serem usados para garantir que a fonte subjacente ainda funcione e, em seguida, são pós-processados para melhorar suas propriedades estatísticas. Um exemplo seria o gerador de números aleatórios de hardware TRNG9803, que usa uma medição de entropia como um teste de hardware e, em seguida, pós-processa a sequência aleatória com uma cifra de fluxo de registro de deslocamento. Em geral, é difícil usar testes estatísticos para validar os números aleatórios gerados. Wang e Nicol propuseram uma técnica de teste estatístico baseada em distância que é usada para identificar os pontos fracos de vários geradores de números aleatórios. Li e Wang propuseram um método para testar números aleatórios com base em fontes de entropia caótica a laser usando propriedades do movimento browniano.

Os testes estatísticos também são usados para garantir que a saída final pós-processada de um gerador de números aleatórios seja realmente imparcial, com o desenvolvimento de vários pacotes de teste de aleatoriedade.

Outras considerações

Personalizar a distribuição

Distribuições uniformes

Die meisten Zufallszahlengeneratoren arbeiten nativ mit ganzen Zahlen oder einzelnen Bits, daher ist ein zusätzlicher Schritt erforderlich, um die „kanonische“ Gleichverteilung zwischen 0 und 1 zu erreichen. Die Implementierung ist nicht so trivial wie die Division der Ganzzahl durch ihren máximo möglichen Wert. Konkret:

  • O número inteiro usado na transformação deve fornecer bits suficientes para a precisão pretendida.
  • A própria natureza da aritmética de ponto flutuante significa que há mais precisão quanto mais próximo o número estiver de zero. Essa precisão extra normalmente não é usada devido ao grande número de bits necessários.
  • Erros de arredondamento durante a divisão podem distorcer o resultado. Na pior das hipóteses, uma área supostamente excluída pode ser desenhada com números reais, contrariando as expectativas da matemática.

O algoritmo convencional usado pelo OpenJDK, Rust e NumPy é descrito em uma proposta para o STL do C++. Ele não utiliza a precisão extra e só sofre distorção no último bit devido ao arredondamento para o número par mais próximo. Outras preocupações numéricas são válidas se essa distribuição uniforme "canônica" for deslocada para um intervalo diferente. Um método proposto para a linguagem de programação Swift afirma usar a precisão total em todos os lugares.

Os números inteiros distribuídos uniformemente são usados com frequência em algoritmos como o Fisher-Yates shuffle. Novamente, uma implementação ingênua pode introduzir uma distorção de módulo no resultado, portanto, algoritmos mais elaborados devem ser usados. Um método que quase nunca executa a divisão foi descrito por Daniel Lemire em 2018, sendo que o estado da arte atual é o "algoritmo ideal" inspirado em codificação aritmética por Stephen Canon da Apple Inc. em 2021. Apple Inc. no ano de 2021.

A maioria dos RNGs de 0 a 1 inclui 0, mas exclui 1, enquanto outros incluem ou excluem ambos.

Outras distribuições

Wenn eine Quelle von gleichmäßig verteilten Zufallszahlen vorliegt, gibt es einige Methoden, um eine neue Zufallsquelle zu erstellen, die einer Wahrscheinlichkeitsdichtefunktion entspricht. Eine Methode namens Inversionsmethode beinhaltet das Integrieren bis zu einem Bereich, der größer oder igual der Zufallszahl ist (die für ordnungsgemäße Verteilungen zwischen 0 und 1 erzeugt werden sollte). Eine zweite Methode namens Akzeptanz-Ablehnungs-Methode beinhaltet die Wahl eines x- und y-Werts und das Testes, ob die Funktion von x größer ist als der y-Wert. Wenn dies der Fall ist, wird der x-Wert akzeptiert. Andernfalls wird der x-W