Quais são as diferenças entre a função rand () e o periférico RNG (gerador de números aleatórios)?


9

Eu estou maravilhado para RNG (gerador de números aleatórios) periférico em MCUs STM32F4XXXX. consulte este manual de referência (página 748). Por outro lado, temos a função rand () na biblioteca stdlib que executa a mesma tarefa. Agora eu tenho duas perguntas:

  1. Quais são as diferenças (vantagem e desvantagem) entre a função rand () e o periférico RNG (gerador de números aleatórios)?
  2. Veja esta parte:

recursos

Por favor, explique sobre essas duas opções (especialmente a segunda opção).

Respostas:


12

A resposta de Dave resume-a bastante bem, mas para esclarecer um pouco mais sobre a segunda opção:

um gerador de números aleatórios de hardware real usa uma fonte de entropia física. Essa fonte de entropia pode ser radiação cósmica, ruído elétrico, efeito avanlanche de um diodo com polarização reversa (ou transistor BJT), circuito chua, etc. Quanto menos determinística a fonte de entropia, melhor a qualidade da saída aleatória. Uma fonte ideal de entropia seria usar um efeito da física quântica, ou algo que não possa ser modelado com equações determinísticas.

Outro fator importante com geradores de números aleatórios é que a fonte de entropia pode gerar apenas uma quantidade limitada de entropia por unidade de tempo. Um bom exemplo é o circuito chua: embora seja bastante aleatório, possui velocidade muito baixa e não pode ser usado para aplicação na vida real.

Em muitos processadores / microcontroladores com RNGs incorporados, o relógio varia de 2 a 4 relógios que são deliberadamente incorretamente sincronizados. Em seguida, eles usam filtros analógicos e digitais para randomizar ainda mais o padrão e alterar o resultado em um registro. A realização dessa filtragem requer alguns ciclos, o que explica a quantidade mínima de ciclos necessária em um determinado relógio antes que o valor mais recente esteja disponível.

O desvio do relógio não é um efeito quântico, portanto pode ser modelado, mas é aleatório o suficiente, porque depende de muitos parâmetros, como temperatura, processo de silício, frequência de operação, ruído elétrico, radiação de fundo, etc. .

Em aplicativos em que o RNG de hardware não possui rendimento suficiente (como em aplicativos criptográficos altamente exigentes), é bastante comum usar o RNG de hardware como uma semente para um gerador de números pseudo-aleatórios, como a função rand () no sdtlib. No entanto, essa aplicação geralmente fornece uma melhor implementação do rand (), que é especificamente projetado para ser executado a partir de uma semente que pode ser descartada com frequência com valores aleatórios verdadeiros . No processador Intel mais recente, com RNGs de hardware integrados, a parte do algoritmo pseudo-aleatório é integrada diretamente no silício, sendo executada pelo hardware, produzindo uma taxa de transferência aleatória muito alta.

Se você se importa com o método rand (), é apenas uma expressão matemática que foi projetada para gerar uma quantidade suficiente de entropia. Grande o suficiente, dependendo da aplicação: para gerações de chaves criptográficas, é necessário que a aleatoriedade seja de qualidade superior à aleatoriedade necessária para uma simples reprodução aleatória no seu reprodutor de música favorito. É óbvio que quanto maior a qualidade da saída aleatória, maior o custo computacional do número aleatório.

As operações envolvidas em um número aleatório são bastante semelhantes às envolvidas na computação do hash MD5 de um arquivo: elas tentam usar um tipo de efeito de avalanche de bits para que uma única mudança de bit em um valor de semente mude todo o padrão de geração. Como uma observação lateral, NÃO recomendo usar o MD5 como um gerador de números pseudo-aleatórios; foi apenas um exemplo. Seria ineficiente e não tão aleatório, mas o ponto é o seguinte: se você alimentar o mesmo arquivo com um algoritmo MD5, sempre obterá a mesma saída determinística, da mesma maneira que sempre obteria a mesma saída. a função rand () se você inserir a mesma semente, a menos que sua implementação dependa de alguns elementos arbitrários, como a hora atual.


7

A principal diferença é que a rand()função de biblioteca é um gerador de números pseudo - aleatórios - dado qualquer valor inicial (inicial), ele sempre produzirá a mesma sequência de números.

Por outro lado, o periférico RNG é um verdadeiro gerador de números aleatórios e produzirá seqüências de números não repetíveis.


Obrigado. e os dois opção ..?
Roh

2
O que faz "e os dois opção ..?" significar? É uma pergunta?
John

2

Os dois tópicos que você descreve podem ser descritos com relativa facilidade:

  • 1: Você não pode gerar números aleatórios mais rapidamente do que uma vez a cada 40 ciclos de relógio, portanto, isso resulta em 48MHz / 40 = ~ 1M Amostra / s
  • 2: O hardware contém um monitor que verifica todos os números gerados quanto a comportamentos estranhos. Por exemplo, se você usasse a temperatura como fonte e tivesse um ambiente de temperatura altamente estável, poderia acontecer que o RNG gerasse as mesmas seqüências numéricas novamente (como um gerador de números pseudo-aleatórios faria se você iniciar com o mesmo valor de semente) . O componente monitorará isso e fornecerá um sinal se o RNG funcionar como esperado. Caso você precise que seus números sejam "realmente" aleatórios, convém monitorar esse sinalizador para ver se eles realmente são. A precisão com que isso é feito e como o RNG realmente funciona é provavelmente apresentada no texto restante.

1

Suponha que alguém projete um girador mecânico de roda de roleta que energize um motor por um certo período de tempo, espere a roda e a bola descansarem e observe em qual bolsa a bola está. Normalmente, após cada giro, a bola e a roda acabam em um local um pouco diferente, e pequenas variações na localização da bola após uma rodada podem fazer uma enorme diferença no local em que termina na próxima rodada. Assim, mesmo que o motor seja sempre energizado pelo mesmo período de tempo, o bolso onde uma bola pousa em um giro será independente de onde ele pousou o giro antes.

Agora suponha, no entanto, que alguns dos números tenham ou desenvolvam leves depressões, e os mancais do motor desenvolvam pontos planos. Então alguns giros seriam aleatórios, mas após um giro que resulta na queda da bola em uma depressão e no rolamento em um ponto plano, o giro seguinte pode muito bem ser tendencioso para ter o mesmo resultado que o último giro onde ocorreu. Se a maioria das rodadas não atingir simultaneamente o ponto final, a existência provavelmente não afetará muito as coisas. Por outro lado, se um combo divot / flat for colocado da maneira certa, de modo que uma bola caia razoavelmente consistentemente em um segundo, e aquele seja colocado para enviar a bola de volta à primeira, então uma acabam com comportamentos extremamente distorcidos.

Se, após o desembarque em 4 e 23, o próximo giro for um 4, isso não indica necessariamente um problema. Um 4 deve aparecer cerca de 1/38 do tempo nessa situação. Além disso, a aquisição de dados aleatórios deve apenas capturar o número do bolso, uma vez que não se sabe nada útil sobre a frequência com que a bola deve descansar em várias partes do bolso. No entanto, pode ser útil para o que quer que esteja gravando os números também "observar" onde a bola no bolso para e observar quaisquer padrões incomuns. A distribuição dos locais pode ser inclinada para a frente ou para trás sem indicar um problema, mas se houver um pico estreito na distribuição, isso pode ser motivo de preocupação.

Se as leituras consecutivas de um gerador aleatório são estatisticamente independentes , compensar o viés não é difícil (embora o tempo necessário seja não determinístico). Se, no entanto, um gerador cair em um estado em que as leituras não são independentes (por exemplo, o estado cíclico da roda acima), a compensação se tornará basicamente impossível - portanto, a necessidade de um RNG de hardware incluir circuitos para detectar tais comportamentos.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.