Pergunta

Há algum tempo eu estava bastante interessado em GAs e estudei bastante sobre eles.Usei C++ GAlib para escrever alguns programas e fiquei bastante impressionado com sua capacidade de resolver problemas de outra forma difíceis de calcular, em questão de segundos.Eles pareciam uma ótima técnica de força bruta que funciona de maneira muito inteligente e se adapta.

Eu estava lendo um livro de Michalewitz, se bem me lembro o nome e tudo parecia baseado no Teorema do Esquema, comprovado pelo MIT.

Também ouvi dizer que ele realmente não pode ser usado para abordar problemas como fatoração de chaves privadas RSA.

Alguém poderia explicar por que esse é o caso?

Foi útil?

Solução

algoritmo genético não são inteligentes em todos os , eles são algoritmos de otimizador muito gananciosos. Todos eles trabalham em torno da mesma ideia. Você tem um grupo de pontos ('uma população de indivíduos'), e você transforma esse grupo em outro com operador estocástico, com um viés na direção da melhor melhoria ('mutação + crossover + seleção'). Repita até que ela converge ou você esteja cansado disso, nada inteligente lá.

Para um algoritmo genético para trabalhar, uma nova população de pontos deve se apresentar perto da população anterior de pontos. Pouca perturbação deve cria pouca mudança. Se, após uma pequena perturbação de um ponto, você obtém um ponto que representa uma solução com desempenho completamente diferente, então, o algoritmo não é nada melhor do que a pesquisa aleatória, um algoritmo geralmente não um bom otimização. No caso RSA, se seus pontos forem diretamente os números, é sim ou não, apenas vindo um pouco ... assim usando um algoritmo genético não é melhor que pesquisa aleatória, se você representa o problema RSA sem muito pensar "Vamos Pontos de pesquisa de código como os bits dos números "

Outras dicas

Eu diria porque a fatoração das chaves não é um problema de otimização, mas um problema exato.Esta distinção não é muito precisa, então aqui estão os detalhes. Os algoritmos genéticos são ótimos para resolver problemas onde são os mínimos (local / global), mas não há nenhum problema de fatoração.Algoritmo genético como DCA ou o recozimento simulado precisa de uma medida de "Quão perto eu sou para a solução", mas você não pode dizer isso para o nosso problema.

Para um exemplo de problema genética é bom, há o problema de escalada na colina.

Gás são baseados na avaliação de aptidão das soluções candidatas.

Você basicamente tem uma função de fitness que leva em uma solução candidata como entrada e lhe dá de volta um escalar dizendo o quão bom é o candidato.Você então continua e permite que os melhores indivíduos de uma determinada geração acasalar com maior probabilidade do que o resto, de modo que o descendente será (espero) mais "adequado" em geral, e assim por diante .

.

Não há como avaliar a aptidão (quão boa é uma solução candidata em comparação com o resto) no cenário de fatoração RSA, por isso você não pode usá-los.

GAs não são de força bruta, são apenas um algoritmo de busca.Cada GA se parece essencialmente com isto:

candidates = seed_value;
while (!good_enough(best_of(candidates))) {
    candidates = compute_next_generation(candidates);
}

Onde good_enough e best_of são definidos em termos de função de fitness.Uma função de condicionamento físico diz quão bem um determinado candidato resolve o problema.Essa parece ser a questão central aqui:como você escreveria uma função de aptidão para fatoração?Por exemplo 20 = 2*10 ou 4*5.As tuplas (2,10) e (4,5) são claramente vencedoras, mas e as outras?Quão “adequado” é (1,9) ou (3,4)?

indiretamente, você pode use um algoritmo genético para fatorar um método de fatoração de inteiro de n. dixon usa equações envolvendo poderes do primeiro k primos, módulo n. esses produtos de poderes de pequenos primos são chamados de "suave". Se estivermos usando os primeiros k= 4 primos - {2,3,5,7} - 42= 2x3x7 é suave e 11 não é (por falta de um termo melhor, 11 é "bruto" ). O método de Dixon requer uma matriz invertida k k consistindo dos expoentes que definem esses números suaves. Para mais informações sobre o método de Dixon, veja https://en.wikipedia.org/wiki/dixon%27s_factorization_method .

Agora, de volta para a pergunta original: há um algoritmo genético para encontrar equações para o método de Dixon.

    .
  1. deixe r ser o inverso de um número suave mod n - então r é um número aproximado
  2. deixe s ser suave
  3. Gerar soluções aleatórias de RX= SY MOD N. Estas soluções [X, Y] são a população para o algoritmo genético. Cada x, y tem um componente suave e um componente áspero. Por exemplo, suponha x= 369= 9 x 41. Então (assumindo 41 não é pequeno o suficiente para contar como suave), a parte áspera de X é 41 e a parte suave é 9.
  4. Escolha pares de soluções - "Pais" - para combinar combinações lineares com partes ásperas cada vez menores.
  5. O algoritmo termina quando um par [x, y] é encontrado com peças aproximadas [1,1], [1, -1], [- 1,1] ou [-1, -1]. Isso produz uma equação para o método do Dixon, porque rx= sy mod n e r é o único número aproximado: x e y são suaves e s começou liso. Mas mesmo 1 / r mod n é suave, então é tudo suave!

    Toda vez que você combina dois pares - digamos [v, w] e [x, y] - as partes lisas dos quatro números são obliteradas, exceto para os fatores as partes suaves de V e X, e os fatores partes lisas de w e y compartilham. Então, escolhemos os pais que compartilham partes suaves até a maior extensão possível. Para tornar isso preciso, escreva

    g= gcd (parte suave de v, parte suave de x)

    h= gcd (parte suave de W, parte suave de y)

    [v, w], [x, y]= [g v / g, h w / h], [g x / g, h / h / h].

    Os fatores suaves ganhos g e h serão preservados na próxima geração, mas as partes suaves de V / G, W / H, x / g e y / h serão sacrificadas para combinar [V, w] e [x, y]. Assim, escolhemos os pais para os quais v / g, w / h, x / g e y / h têm as menores partes suaves. Desta forma, nós realmente dirigimos as partes aproximadas de nossas soluções para RX= SY MOD N de uma geração para a próxima.

Pensando melhor, a melhor maneira de chegar aos coeficientes suaves x, y na rede ax = por mod N é com regressão, não com um algoritmo genético.

Duas regressões são realizadas, uma com vetor de resposta R0 consistindo em valores de x de soluções escolhidas aleatoriamente de ax = por mod N;e o outro com vetor de resposta R1 consistindo em valores de y das mesmas soluções.Ambas as regressões utilizam a mesma matriz explicativa X.Em X estão colunas que consistem nos restos dos divisores suaves do módulo dos valores x e outras colunas que consistem nos restos dos divisores suaves do módulo dos valores y.

A melhor escolha de divisores suaves é aquela que minimiza os erros de cada regressão:

E0 = R0 - X (inverso de (transposição X) (X)) (transposição X) (R0)

E1 = R1 - X (inverso de (transposição X) (X)) (transposição X) (R1)

O que se segue são operações de linha para aniquilar X.Em seguida, aplique o resultado z dessas operações de linha aos valores x e y das soluções originais a partir das quais X foi formado.

z R0 = z R0 - 0
     = z R0 - zX (inverse of (X-transpose)(X)) (X-transpose) (R0)
     = z E0 

Da mesma forma, z R1 = z E1

Três propriedades são agora combinadas em z R0 e z R1:

  • Eles são múltiplos de grandes números suaves, porque z aniquila os restos do módulo de números suaves.
  • Eles são relativamente pequenos, pois E0 e E1 são pequenos.
  • Como qualquer combinação linear de soluções para ax = por mod N, z R0 e z R1 são eles próprios soluções para essa equação.

Um múltiplo relativamente pequeno de um grande número suave pode ser apenas o próprio número suave.Ter uma solução suave de ax = por mod N produz uma entrada para o método de Dixon.

Duas otimizações tornam isso particularmente rápido:

  • Não há necessidade de adivinhar todos os números suaves e colunas de X de uma só vez.Você pode executar regressões continuamente, adicionando uma coluna a X por vez, escolhendo colunas que reduzam mais E0 e E1.Em nenhum momento serão selecionados quaisquer dois números suaves com um fator comum.
  • Você também pode começar com muitas soluções aleatórias de zx = por mod N e remover aquelas com maiores erros entre as seleções de novas colunas para X.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top