Как найти обычный текст из зашифрованного текста RSA

У меня есть зашифрованный текст RSA c, открытый ключ (e,n). (где c = m^e mod n)

Теперь я также знаю, что обычный текст m должен быть либо "1234XXX", либо "12345XXX", где "XXX" — трехзначное число.

Могу ли я найти правильный, не проверяя все 3 цифры числа? (Я просто хочу знать, будет ли первая часть "1234" или "12345", и мне все равно, что такое XXX.)


person Chris    schedule 28.03.2011    source источник
comment
Я не понимаю, о чем вы спрашиваете; Вы пытаетесь угадать секретный ключ методом грубой силы, учитывая открытый ключ, открытый текст и зашифрованный текст? Учитывая, что это обычный режим работы для RSA, должно быть сложно получить секретный ключ только из этих входных данных. Можешь перефразировать свой вопрос?   -  person sarnold    schedule 28.03.2011


Ответы (2)


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

(Подобные текстовые сообщения не создают аналогичные зашифрованные сообщения)

Таким образом, в вашем случае, когда у вас есть открытый ключ, вы все равно вынуждены шифровать все возможные простые входные сообщения (грубая сила), чтобы обнаружить связанные зашифрованные сообщения.

person Heisenbug    schedule 28.03.2011
comment
Ну, по крайней мере, я могу протестировать 1000 раз одно из возможных сообщений (в худшем случае) и сравнить результаты m'^e mod n с c. Если никто из них не прав. Тогда это должен быть второй. Но разве нет короткого пути? - person Chris; 28.03.2011
comment
@Chris: нет ярлыка. Я бы испугался ярлыка, потому что это означало бы слабость RSA. (Это было бы невозможно, потому что доказано, что RSA безопасен, если вы не можете найти простой способ факторизации простых чисел) - person Heisenbug; 28.03.2011
comment
@ Крис + 1 - Ты прав. Вы можете методом грубой силы сгенерировать все строки и зашифровать их, чтобы увидеть, какая из них соответствует известному зашифрованному тексту. Но короткого пути нет, потому что для создания целевого зашифрованного текста необходимо точно знать, каким был открытый текст. Вы не можете сгенерировать часть открытого текста и надеяться частично соответствовать зашифрованному тексту. - person Joel Lee; 28.03.2011

На самом деле, если вы используете RSA правильно, вы даже не сможете угадать свой «XXX», перепробовав 1000 вариантов. Основной операцией в RSA является модульное возведение в степень, но есть первый шаг, называемый заполнением, который преобразует данные для шифрования в большое целое число (по модулю n).

стандарт PKCS#1 RSA указывает два типа заполнения; оба включают в себя кучу случайных байтов. Следствием этого является следующее: если вы дважды зашифруете одно и то же сообщение одним и тем же ключом, вы получите два разных зашифрованных сообщения. Суть именно в том, чтобы избежать ситуации, на которую вы намекаете: иметь возможность «угадать» зашифрованное сообщение и проверить, верна ли догадка, используя только открытый ключ (который является открытым, поэтому предполагается, что он известен каждый нападающий).

Таким образом, чтобы ответить на ваш вопрос: если вы можете найти свой 'XXX', либо попробовав только 1000 RSA-шифрование, либо с помощью любого умного ярлыка, тогда ваш RSA очень неправильно.

person Thomas Pornin    schedule 28.03.2011