Рейтинг:0

Реализация RSA не работает с большими значениями для открытого текста

флаг it

При реализации шифрования/дешифрования RSA (с использованием python) открытый текст не совпадает с расшифрованным зашифрованным текстом для больших значений открытого текста. Отлично работает для меньших значений для открытого текста (числовое значение).

Ввод: p=53 q=59 e=3 открытый текст = 1000 (закрытый ключ рассчитан как 2011)

Здесь расшифровка дает 1000 как открытый текст, что правильно. Сейчас если

Ввод: p=53 q=59 e=3 открытый текст = 10000 (закрытый ключ рассчитан как 2011)

Здесь, после расшифровки, вычисленный открытый текст 619 (что должно быть 10000)

Код для того же здесь,

    дешифровать (открытый текст):
            зашифрованный текст = (открытый текст**publicKey) % (self.n)
            вернуть зашифрованный текст
   def расшифровать (зашифрованный текст):
            открытый текст = (зашифрованный текст**privateKey) % (self.n)
            вернуть открытый текст

Учитывая, что алгоритм будет использоваться для шифрования/дешифрования буквенно-цифрового текста, который будет давать большие числовые значения, какие модификации необходимы, или я что-то упустил?

ps: проверка нескольких значений открытого текста, это может происходить из-за п = 3127 и любой открытый текст больше, чем 3127 не будет создавать исходный открытый текст при расшифровке. Я могу быть не прав.

Как заставить его работать с открытым текстом больше, чем н, здесь 3127?

kelalaka avatar
флаг in
RSA — это перестановка с лазейкой! Как вы ожидаете получить открытый текст, размер которого превышает размер модуля, зашифрованный и правильно расшифрованный? Сообщение $m$ должно быть $m
kelalaka avatar
флаг in
может быть дубликатом [Как я должен учитывать ограничения размера сообщения в шифровании RSA?] (https://crypto.stackexchange.com/q/71092/18298)
kelalaka avatar
флаг in
10000$ \pmod{53\cdot 51} = 619$ как и ожидалось!
Maarten Bodewes avatar
флаг in
Думаю, я отвечал на это не раз, но [этот ответ] (https://crypto.stackexchange.com/a/50183/1172) уже указывает способ обойти это для практических целей: разделить ваше сообщение и зашифровать каждое штука отдельно. Помните, что вы должны уметь различать отдельные зашифрованные тексты (например, если вы не можете различить 5, за которыми следует 23, и 52, за которыми следует 3, тогда у вас проблемы).
SAI Peregrinus avatar
флаг si
Лучше использовать гибридное шифрование. Выберите случайное число от 0 до N. Назовите этот номер X. Используйте KDF для получения ключа из X. Зашифруйте с помощью AEAD, например ChaCha20-Poly1305. Зашифруйте X с помощью RSA. Отправьте зашифрованный X и зашифрованный текст сообщения (и IV и тег). Получатель может расшифровать X, использовать тот же KDF, проверить тег и расшифровать сообщение. Это менее сложно, чем использование RSA-OAEP и обработка RSA как блочного шифра.
Maarten Bodewes avatar
флаг in
@SAIPeregrinus Обычно это не работает для практических заданий, как указано выше. Конечно, вы можете создать ключ, а затем использовать многократный блокнот, шифр Цезаря/Виженера или что-то подобное — им нужен только небольшой размер ключа, и для упражнения тот факт, что они полностью небезопасны, не является проблемой.
SAI Peregrinus avatar
флаг si
Да, это не то, чего хотят упражнения. Но это также безопасно там, где то, что нужно упражнению, не так.Я думаю, что стоит упомянуть «реальный» способ использования RSA для шифрования (хотя RSA-OAEP также распространен для гибридных схем), даже если это не ответ на упражнение.
kelalaka avatar
флаг in
Все еще не требуется -1.
ayush7ad6 avatar
флаг it
Прочитав ваше предложение @MaartenBodewes, я разделил числовой открытый текст на цифры и зашифровал его, а после расшифровки забил расшифрованные цифры. ТАКЖЕ, спасибо за ваши ответы SAI и Maarten

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.