Почему генетические алгоритмы не работают над проблемами, такими как факторинг RSA?

StackOverflow https://stackoverflow.com/questions/5456483

Вопрос

Некоторое время назад я был довольно заинтересован в газе, и я немного изучал их.Я использовал C ++ Galib для написания некоторых программ, и я был вполне поражен их способностью решать иначе трудно вычислить проблемы, в считанные секунды.Они казались отличной техникой грузоподъемности, которая действительно работает очень умных и адаптов.

Я читал книгу Михалевица, если я правильно помню имя, и все, казалось, были основаны на теореме схемы, оказались MIT.

Я также слышал, что он не может быть нельзя использовать для подхода к проблемам, такими как факторинг с частными ключами RSA.

Может кто-нибудь объяснить, почему это так?

Это было полезно?

Решение

Генетический алгоритм не умрен вообще , они очень жадные алгоритмы оптимизатора. Все они работают вокруг одной и той же идеи. У вас есть группа очков («население людей), и вы преобразуете эту группу в другую с стохастическим оператором, причем предвзятость в направлении лучшего улучшения (« Мутация + кроссовер + выбор »). Повторите, пока он не сходится, или вы устали от этого, ничего там умно.

Для генетического алгоритма для работы новая популяция очков должна выполняться близко к предыдущей популяции очков. Маленькое возмущение должно создавать мало изменения. Если после небольшого возмущения точки, вы получаете точку, которая представляет собой решение с совершенно разной производительностью, то алгоритм не является чем-то лучшим, чем случайным поиском, обычно не хорошим алгоритмом оптимизации. В случае RSA, если ваши точки непосредственно числа, это либо да, либо нет, просто переворачивая ... таким образом, использование генетического алгоритма не лучше, чем случайные поиски, если вы представляете проблему RSA без особого мышления » Точки поиска кода как биты номеров "

Другие советы

Я бы сказал, потому что факторизация ключей не является проблемой оптимизации, а точная проблема.Это различие не очень точное, поэтому вот детали. Генетические алгоритмы очень привлекательны для решения проблем, где являются минимумы (локальные / глобальные), но в факторизированной проблеме нет.Генетический алгоритм, поскольку DCA или смоделированный отжиг нуждается в мерах «Насколько я к решению», но вы не можете сказать это для нашей проблемы.

Для примера проблемы Генетика хороша, есть проблема с холмом.

Газ основан на фитнес-оценке решений кандидатов. У вас в основном есть функция фитнеса, которая принимает решение для кандидата в качестве ввода и дает обратно скаляр, рассказывая о том, насколько хорош кандидат.Затем вы продолжаете и разрешите лучшим лицам данного поколения, чтобы собрать с более высокой вероятностью, чем остальные, так что потомство будет (надеюсь) более «подходит» в целом, и так на .

.

Нет способа оценить фитнес (насколько хороша является решением кандидата по сравнению с остальными) в сценарии факторизации RSA, поэтому, поэтому вы не можете использовать их.

Газ не принудительно, они просто алгоритм поиска.Каждый GA по существу выглядит так:

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

Там, где good_enough и best_of определены в терминах функции фитнеса .Функция фитнес говорит, насколько хорошо данный кандидат решает проблему .Это, кажется, является основной проблемой здесь: как бы вы написали функцию фитнеса для факторизации?Например, 20= 2 * 10 или 4 * 5.Кортеры (2,10) и (4,5) явно победители, но как насчет других?Как «Fit» (1,9) или (3,4)?

косвенно, вы можете использовать генетический алгоритм для факторов целочисленного метода целочисленного факторизации integer N. Dixon использует уравнения, включающие силы первого k modulo n. Эти продукты полномочия небольших простых простых простых простых простых простых простых простых простых чисел ". Если мы используем первые пребывания k= 4 - {2,3,5,7} - 42= 2x3x7 гладко и 11 не (для отсутствия лучшего срока, 11 - это «грубый» ). Метод Dixon требует обратимого K X K Matrix, состоящую из показателей, которые определяют эти плавные числа. Для получения дополнительной информации о методе Dixon см. https://en.wikipedia.org/wiki/dixon%27s_factorization_method .

Теперь вернуться к исходному вопросу: существует генетический алгоритм для поиска уравнений метода Диксона.

  1. Пусть r Будьте обратным плавным числом мода N - так что R - это грубое число
  2. Пусть s будет гладким
  3. генерируют случайные решения RX= SY MOD N. Эти решения [X, Y] являются населением для генетического алгоритма. Каждый х, у y имеет гладкий компонент и грубый компонент. Например, предположим, что x= 369= 9 x 41. Тогда (при условии, что 41 недостаточно малы, чтобы подсчитать как гладко), грубая часть x составляет 41, а гладкая часть 9.
  4. Выбирают пары решений - «родители» - объединить в линейные комбинации с постоянно меньшими грубыми частями.
  5. алгоритм завершается, когда пара [x, y] найден с грубыми частями [1,1], [1, -1], [- 1,1] или [-1, -1]. Это дает уравнение метода Диксона, потому что RX= SY MOD N и R остается единственным приблизительным номером: X и Y являются гладкими, а S запущены с плавными. Но даже 1 / R MOD N гладко, так что все гладко!

    Каждый раз, когда вы объединяете две пары - скажем [V, W] и [x, y] - гладкие части четырех чисел свышены, за исключением факторов гладкие части V и X Share, а также факторы Гладкие части W и Y доля. Итак, мы выбираем родителей, которые делят гладкие части максимально возможной степени. Чтобы сделать этот точный, напишите

    g= gcd (гладкая часть v, гладкая часть x)

    h= gcd (гладкая часть w, гладкая часть y)

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

    Жесткие гладкие факторы G и H будут сохраняться в следующем поколении, но гладкие части V / G, W / H, X / G и Y / H будут принесены в жертву, чтобы объединить [V, w] и [x, y]. Поэтому мы выбираем родителей, для которых V / G, W / H, X / G и Y / H имеют самые маленькие гладкие детали. Таким образом, мы действительно подводили по грубым частям наших решений RX= SY MOD N от одного поколения к следующему.

Далее подумал лучший способ сделать ваш путь к гладкому коэффициентам x, y в топор решетки= by mod n с регресностью, а не генетический алгоритм.

Проводится две регрессии, один с вектором ответа R0, состоящий из X-значений из случайно выбранных растворов Ax= путем мода N; А другой с вектором ответа R1, состоящий из значений Y из тех же решений. Обе регрессии используют одинаковую объяснительную матрицу X. В X - столбцы, состоящие из остатков X-значений модуло гладких делителей, а также других колонн, состоящих из остатков Y-значений Modulo других гладких дивизоров.

Лучший выбор гладких делителей - это тот, который минимизирует ошибки от каждой регрессии:

E0= R0 - X (обратный (X-транспонимент) (X)) (X-Transpose) (R0)

E1= R1 - X (обратный (X-транспонимент) (X)) (X-Transpose) (R1)

Далее следует ROW операций для unnihilate X. Затем примените результат Z этих строк операций к значениям X- и Y из исходных решений, из которых был сформирован X.

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

Аналогично, z r1= z e1

Три свойства теперь объединяются в z r0 и z r1:

    .
  • Они кратные крупные гладкие числа, потому что Z уничтожает остатки модуля гладких чисел.
  • они относительно невелики, так как E0 и E1 маленькие.
  • Как и любая линейная комбинация решений топора= по моду n, z r0 и z r1 сами по себе являются решениями этого уравнения.

    Относительно небольшое множество большого плавного числа может быть просто гладким числом самого. Наличие гладкого раствора AX= путем мода N дает вход в метод Диксона.

    Две оптимизации делают это особенно быстро:

      .
    • Нет необходимости угадывать все гладкие числа и столбцы X одновременно. Вы можете запустить регрессию непрерывными, добавляя один столбец на X одновременно, выбирая столбцы, которые уменьшают E0 и E1 больше всего. В кратчайшие сроки не будет выбрано никаких двух гладких чисел с общим фактором.
    • Вы также можете начать с множества случайных решений ZX= by mod n и удалите те, которые с наибольшим ошибками между выборами новых столбцов для X.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top