TL; DR: взлом длинных ключей RSA сложен в вычислительном отношении (т. Е. Нет известного решения, работающего за полиномиальное время), и хотя ваш алгоритм может быть не самым эффективным, никто не нашел такого, который может взломать длинные ключи RSA ( с классическим компьютером - алгоритм Шора для квантового компьютера может взломать длинные ключи RSA за полиномиальное время).
Более длинный ответ:
Чтобы оценить, как долго ваш Чтобы выполнить программу, я написал следующее python:
import time
n = 632459103267572196107100983820469021721602147490918660274601
c = 795272974058324394239265341440
test_size = 100000
start_time = time.time()
for i in range(c-1, c-test_size, -2):
if n%i == 0:
print(i, n%i)
time_elapsed = (time.time() - start_time)
print("Elapsed Time for %i iterations: %f seconds" % (test_size, time_elapsed))
seconds_in_a_year = 31557600
projected_time = time_elapsed * (c / 2 / test_size) / seconds_in_a_year
print("Projected Time for %i iterations: %i years" % (c, projected_time))
Когда я запустил это на моем компьютере, результат был:
Elapsed Time for 100000 iterations: 0.024008 seconds
Projected Time for 795272974058324394239265341440 iterations: 3025094101018381 years
Это слишком много лет!
Одна вещь, на которую следует обратить внимание в связи со статьей и ответом, на который вы ссылаетесь, - это примеры с короткими клавишами. Причина, по которой криптосистема RSA используется и работает, заключается в том, что когда генерируются достаточно большие ключи, вычислительно трудно (то есть потребуется много жизней, даже если все вычислительные ресурсы на земле работают вместе), чтобы использовать любую известную процедуру для определения закрытого ключа учитывая ключ publi c. Поскольку компьютеры работают быстрее, то, что считается достаточно большим ключом, может немного измениться, и другие криптосистемы с открытым ключом c, которые еще сложнее взломать, также могут быть использованы для большей безопасности, но в настоящий момент от 1024 до 4096 битных RSA широко используется в производственных условиях. n
, который вы указали, составляет 199 бит (math.log(n,2)
), поэтому я полагаю, что он может быть подвергнут грубому принуждению за разумное время ... просто не используя ноутбук и не используя python (если вы попробуете тот же самый грубый метод) При наступлении силы в C он все равно не будет запущен в разумные сроки, но будет быстрее, чем python). Если вам интересны другие алгоритмы для решения задачи дискретного логарифмирования или целочисленной факторизации, я не знаю много об этом, но могу вам сказать, что не существует известных эффективных алгоритмов для неквантовых компьютеров .
Если у меня будет время, я вернусь и дополню этот ответ кодом C для сравнения. Я просто хотел отметить, что вы не делаете ничего плохого, вы пытаетесь решить неразрешимая проблема.