Как уже говорилось, на ваш вопрос есть один ответ, и это «нет». Шифрование RSA - это алгоритм, который шифрует сообщения до заданного размера, который зависит от размера ключа; с 1024-битным ключом RSA, а RSA как стандарт описывает его , максимальный размер 117 байт, не более. Невозможно зашифровать более крупное сообщение только с помощью RSA, и это определенная математическая уверенность.
Если вам действительно нужно обрабатывать более длинные сообщения, вам обязательно нужно добавить что-то еще. В таком случае, пожалуйста, пожалуйста, не пытайтесь делать что-нибудь из ваших собственных разработок с каким-то умным разбиением данных на маленькие блоки и тому подобное. Этот путь ведет к гибели. Вы можете создать что-то, что кажется для компиляции и запуска, но которое всегда будет в некотором роде слабым, как почти любой другой самодельный вариант криптографии. Это потому, что безопасность не может быть проверена: это не случай «работает» или «не работает».
Итак, проторенный путь асимметричного шифрования:
- Вы выбираете случайную последовательность байтов некоторой подходящей длины, например 128 бит (это 16 байт). Назовем его K.
- Вы шифруете K открытым ключом RSA; это дает E.
- Вы шифруете сообщение с помощью K, используя алгоритм симметричного шифрования (
"AES/CBC/PKCS5Padding"
). Поскольку это одноразовый ключ, вы можете использовать все нули IV. В результате получается группа байтов, назовем ее F.
- Зашифрованное сообщение представляет собой соединение E и F.
Расшифровка выполняется в обратном порядке: закрытый ключ RSA используется для восстановления K из E, затем K используется для расшифровки F в исходное сообщение. Ключ K никогда нигде не сохраняется, и каждый раз создается новый ключ K (даже если вы дважды зашифруете одно и то же сообщение). Это важно, не меняйте это, если вы не понимаете, что делаете (а если да, то вы уже это знаете).
Учитывая то, что вы заявляете о своей проблеме, вы должны сделать что-то еще, кроме «только RSA». Процедура, которую я описываю выше, касается лучшего "чего-то еще", что вы могли придумать с точки зрения безопасности.
Сборка некоторых криптографических элементов в такой протокол - это процесс, чреватый подводными камнями, поэтому вам, возможно, повезет больше, если вы используете уже определенный формат и библиотеку поддержки. Двумя распространенными форматами асимметричного шифрования являются CMS и OpenPGP. Библиотека, которая поддерживает и то, и другое и имеет хорошую репутацию, называется Bouncy Castle.
person
Thomas Pornin
schedule
16.04.2010