Можно ли зациклить 10 ^ 8 возможностей для определения правильного ответа? - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть номер длиной 615 цифр. В нем 8 мест, где не хватает цифр. Я должен выяснить, какие цифры. Есть 10 ^ 8 возможностей.

Это для проблемы RSA. Указанный номер - это закрытый ключ, и я пытаюсь выяснить, что это такое. Чтобы помочь мне, у меня есть пара открытых ключей (n, e), каждая из которых также имеет длину 615 цифр, а также открытый текст и соответствующий зашифрованный текст.

Таким образом, единственный способ выяснить d - это перебить его. Я пытаюсь использовать gmpy2 в Python, чтобы понять это. Мне пришлось прыгать через много обручей, чтобы заставить его работать. Я даже не знаю, правильно ли я это сделал. Мне пришлось скачать Python2.7, чтобы я мог запустить установщик gmpy2, чтобы не получить сообщение об ошибке. Но я думаю, что теперь это работает, поскольку я могу набрать

>>>import gmpy2

в терминале, и это не дает мне ошибку.

Прежде чем я попытаюсь пройтись по 10 ^ 8 возможностям, я хочу знать, возможно ли это сделать за относительно короткий промежуток времени, учитывая мою ситуацию. Я не хочу жарить мой компьютер или замораживать его, пытаясь вычислить это. Я также хочу знать, использую ли я для этого правильные инструменты, или gmpy2 не является верной версией, или Python2.7 недостаточно хорош / достаточно быстр. Я использую gmpy2 на Python2.7 на ноутбуке.

В конце я предполагаю, что хочу взять все 10 ^ 8 ответов и поднять так, чтобы C ^ d = M mod n. Так что это (уже) большое число до степени числа 615 цифр, 10 ^ 8 раз. Это возможно? Если это так, как я могу сделать это с помощью gmpy2? Есть ли более эффективный способ вычислить это?

Я искренне извиняюсь, если это не то место, чтобы спрашивать об этом. Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Я gmpy2 сопровождающий.

Чтобы рассчитать C ** d mod n, вы должны использовать встроенный pow() и указать все три значения. pow(C,d,n) будет намного быстрее, чем C**d % n.

Использование gmpy2 должно быть легко для этого. Вместо использования int() для преобразования строки в целое число Python, вам просто нужно использовать gmpy2.mpz(). Вы можете использовать pow() с mpz экземплярами. (И если хотя бы одно из трех значений pow() является mpz, gmpy2 будет использоваться для расчета.)

Я оцениваю время работы с gmpy2 в диапазоне от менее часа до нескольких часов. Собственные целые числа Python могут быть в 10 раз медленнее.

0 голосов
/ 09 апреля 2019

Вы не собираетесь жарить свой компьютер.

Это может занять много времени, но кажется, что это прямая O (n) проблема, поэтому она не взорвется до бесконечности. Пока не требуется неприличного количества времени, чтобы проверить, является ли один хеш действительным или нет, запуск может занять даже меньше минуты. Современные дневные машины измеряют такты в ГГц. Это 10 ^ 9 циклов в секунду. И кроме того, поскольку вы говорите, что не можете сделать никаких выводов о том, каким будет правильный ответ из неправильных догадок, грубая сила кажется единственным решением.

...