2015-07-14 4 views
-1

Я использую код шифрования RSA, приведенный на this link для шифрования строк, таких как следующие с 128 байт открытых ключей:шифровать длинный текстовую строку с использованием шифрования RSA только

[7998725336653383203658644639673805448553730986337128386926545744008381384348409264866333582258561179132241508936069720871865895053632019929236743348039021, 1993938860438750843589842757968313427718259534664174282914852335272086243792497573680387148722647412680490224484736059954284097163105446004304579443902885] 

Поскольку строка слишком долго RSA_public_encrypt функция возвращает -1 и строку null. Я знаю, что RSA следует использовать для текстов небольшого размера, есть ли способ вокруг этого?

Я использовал ERR_error_string(), чтобы проверить коды ошибок, и он вернул мне следующую строку кода ошибки: error:0406D06E:lib(4):func(109):reason(110).

Теперь, поскольку этот вопрос был отмечен как возможный дубликат, пожалуйста, позвольте мне объяснить, что мне нужно сделать это, используя только RSA, потому что комбинация AES-RSA сделает весь дизайн системы расширения chrome, который я пишу, гораздо сложнее, чем уже. Я хочу сохранить его как можно более упрощенным.

+0

Возможный дубликат [Как зашифровать/расшифровать длинные сообщения ввода с помощью RSA? \ [Openssl, C \]] (http: // stackoverflow.com/questions/19344122/how-to-encrypt-decrypt-long-input-messages-with-rsa-openssl-c) –

+0

Да, я видел это, и это не решает мою цель, если я делаю AES-RSA двойное шифрование, то это изменит всю существующую модель и сделает систему более неэффективной. Можно ли это сделать в кусках? – bawejakunal

+3

Неэффективен? Напротив, AES намного быстрее, чем RSA, поэтому потребуется только один вызов RSA. Другой возможностью было бы зашифровать RSA в кусках (намного медленнее), что также обсуждается в связанном вопросе. Вы также можете использовать более крупные модули, но это не масштабируется. –

ответ

0

Если вам нужно использовать строго RSA, вам нужно разделить сообщение на куски, равные размеру ключа RSA, и применять RSA несколько раз. Обратите внимание, однако, что это означает, что каждый зашифрованный кусок имеет свое собственное дополнение и что RSA намного дороже вычислительной стоимости, чем AES.

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

+0

(1) Главный аргумент - производительность. Если используется хороший размер ключа, например 2048 бит, то раздутие зашифрованного текста будет составлять только 5% или 20%, зависящее от заполнения (не считая последнего, возможно, в основном неиспользуемого блока). (2) RSA как блочный шифр уязвим для переупорядочивания блоков при реализации тривиально, что может полностью нарушить систему. –

+0

@dbush Я пытаюсь код для chunked RSA, но дешифрование работает неправильно всегда, код находится по этой ссылке http://codeshare.io/Ez9q5. Пожалуйста, дайте мне знать, где я ошибаюсь? – bawejakunal

+0

Если у вас есть определенный вопрос, опубликуйте [Минимальный, полный, проверяемый пример] (http://stackoverflow.com/help/mcve) вместе с ожидаемым и фактическим результатом. – dbush

1

Создание какой-то схемы RSA-chunking будет намного сложнее и потенциально небезопасно, ИМХО, чем дешифрование симметричного ключа и выполнение простого AES-дешифрования с использованием этого ключа.

Насколько эффективность, RSA будет на порядки величин медленнее чем AES, так что компромисс вы делаете, что вы отказываетесь от простоты (т.е. вы отказываетесь простоту использования AES, в пользу некоторые RSA «chunking») в обмен на низкую производительность (вы получаете более низкую производительность RSA.)

Я бы взял изношенный путь гибридного подхода AES-RSA, а не экспериментировал с какой-либо схемой RSA ,

+0

Обратите внимание, что AES следует использовать в аутентифицированном режиме, таком как GCM. – CodesInChaos

1

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

Ограничение на RSA является математическим, просто чтобы вы знали. Я видел, как кто-то жаловался, что MS не разрешает их RSA шифровать достаточно большое сообщение для своих целей. Проблема состоит в том, что, как только сообщение получает примерно в два раза меньше цифр, чем ключ, оно «перевернулось» мимо нуля в математической функции - передает верхний предел поля числа - и не будет расшифровывать то же самое число начиналось как. Таким образом, этот предел нельзя преодолеть, за исключением ограниченного смысла, используя более крупные ключи RSA. Или путем передачи сообщения и отправки его отдельно как RSA, но несколько исключений с использованием той же пары открытых/закрытых ключей не приветствуются.

Я действительно рекомендую вам использовать гибрид RSA/AES. Таким образом, вы получите гораздо лучшую производительность, чем любой другой способ, о котором я могу думать.

Смежные вопросы