Pergunta

me deparei com um artigo sobre o sistema de entrada remoto Car em http: //auto.howstuffworks. com / remoto entry2.htm na terceira bala, autor diz,

Tanto o transmissor e o receptor usam o mesmo gerador de números pseudo-aleatórios. Quando o transmissor envia um código de 40 bits, ele usa o gerador de números pseudo-aleatórios para escolher um novo código, que ele armazena na memória. No outro extremo, quando o receptor recebe um código válido, ele usa o mesmo gerador de números pseudo-aleatórios para escolher um novo. Desta maneira, o transmissor e o receptor estão sincronizados. O receptor só abre a porta se ele recebe o código de espera.

É possível ter duas funções PRNG produzindo mesmos números aleatórios ao mesmo tempo?

Foi útil?

Solução

funções PRNG, o resultado da função é dependente de um valor de 'semente', de tal modo que a mesma saída será fornecido de chamadas sucessivas dado o mesmo valor semente. Então, sim.

Um exemplo (usando C #) seria algo como:

// Provide the same seed value for both generators:
System.Random r1 = new System.Random(1);
System.Random r2 = new System.Random(1);

// Will output 'True'
Console.WriteLine(r1.Next() == r2.Next());

Isso é tudo, claro, dependente do gerador de números aleatórios usando algum tipo de fórmula determinística para gerar seus valores. Se você usar um chamado 'verdadeiro aleatória' gerador de números que utiliza propriedades da entropia ou ruído em sua geração, então seria muito difícil de produzir os mesmos valores apresentados alguma entrada, a menos que você é capaz de duplicar o estado entrópica para ambas as chamadas para a função - o que, naturalmente, iria derrotar o propósito de usar tal um gerador de ...

No caso de sistemas de entrada de keyless remota, eles muito provável usar uma função PRNG que é determinística, a fim de tirar proveito desse recurso. Há muitos ICs que fornecem este tipo de funcionalidade para produzir números aleatórios para circuitos eletrônicos.

Edit: a pedido, aqui está um exemplo de um gerador de números aleatórios não-determinista que não dependem de um valor de propagação especificado: Quantum Random Number Generator . Claro que, como pontos freespace nos comentários, este não é um gerador de números pseudo-aleatórios, uma vez que gera números aleatórios.

Outras dicas

A maioria PRNGs tem um estado interno, na forma de um semente , que utilizam para gerar os seus valores próximos. A lógica interna é algo como isto:

nextNumber = function(seed);
seed = nextNumber;

Assim, cada vez que você gerar um novo número, a semente é atualizado. Se você der dois PRNGs que usam o mesmo algoritmo a mesma semente, function(seed) vai avaliar para o mesmo número (dado que eles são deterministas, que a maioria são).

Aplicada à sua pergunta diretamente: o transmissor escolhe um código, e usa-lo como uma semente. O receptor, depois de recebê-lo, usa isso para semear o gerador. Agora os dois estão alinhados, e eles vão gerar os mesmos valores.

Como Erik e Claudiu ter dito, ad tempo que semear o PRNG com o mesmo valor que você vai acabar com o mesmo resultado.

Um exemplo pode ser visto quando usando AES (ou qualquer outro algoritmo de encriptação) como base de sua PRNG. Enquanto você continuar usando um entradas que correspondem a ambas dispositivo (transmissor e receptor), em seguida, as saídas também irá corresponder.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top