Recuperar descrição PRNG de saídas consecutivas

7

Dadas as saídas do gerador de números pseudoaleatórios, como se pode determinar o tipo (por exemplo, Registro de deslocamento de feedback linear), Multiplicar com transportar, Gerador linear de congratulações etc.) e recuperar a função e a semente?

A matriz de números fornecida é com certeza gerada pelo PRNG (não criptograficamente seguro) - isso é conhecido antecipadamente. As saídas estão limpas, o PRNG é uma caixa preta retornando números consecutivos (sem modificação, sem valores ignorados. Agora, a tarefa é encontrar a função e a semente dos valores.

A idéia simples é tentar todos os esquemas até encontrar a correspondência, mas estou interessado em uma abordagem mais algorítmica.

Mal
fonte

Respostas:

10

Não existe um método único para determinar o tipo do PRNG. De fato, para um PRNG de força criptográfica, você não pode distinguir sua saída de verdadeiramente aleatório; portanto, não é possível determinar o tipo de PRNGs apenas olhando sua saída.

Em vez disso, para cada um dos esquemas que você lista, não é uma forma de recuperar a semente e prever pedaços futuras de sua saída. A maneira de fazer isso é diferente para cada tipo de PRNG. Portanto, a abordagem natural é: para cada tipo de candidato, tente o método para recuperar a semente que funciona para esse tipo de PRNG e verifique se você é bem-sucedido. Se você é, você descobriu o tipo de PRNG.

Eu não acho que exista uma técnica mais eficiente ou geral. E, francamente, não acho que seja necessário um mais eficiente. Para os tipos que você lista, existem algoritmos muito eficientes para analisá-los com criptografia, com saída suficiente. Portanto, suspeito que será difícil superar a abordagem "tente todos os esquemas".

Isso funciona se o seu conjunto de tipos de PRNG contiver apenas PRNGs que são criptograficamente fracos, ou seja, onde é possível prever resultados futuros, considerando resultados passados ​​suficientes.

Para obter detalhes de como fazer isso para qualquer tipo específico de PRNG, sugiro que você faça uma pergunta separada focada nesse tipo de PRNG. Aqui estão alguns recursos sobre alguns dos tipos de PRNG listados:

DW
fonte
11
Você pode adicionar um resumo sobre a saída dos LCGs ser altamente organizada em hiperplanos quando plotados . Gráficos como esse podem ser usados ​​para identificar se um deles está lidando com LCGs e outros tipos.
exista Idonotexist
2
@Iwnotnotististondonotexist, esses gráficos são realmente menos eficazes do que o método ao qual vinculo, então não vejo razão para usá-los se seu objetivo é identificar o uso de um LCG: os gráficos requerem mais resultados e exigem que alguém inspecione o gráfico. A abordagem à qual vinculo requer apenas um punhado de saídas e muito pouco cálculo.
DW
Verdade; A matemática é sólida e identificará muito rapidamente se alguém está lidando com uma determinada família. Mas é bom ter uma demonstração menos matemática e mais visual de que os PRNGs nem todos são criados iguais, e esse é um dos exemplos brilhantes.
Iwillnotexist Idonotexist