RSA - это два алгоритма: один для асимметричного шифрования и один для подписей. Случается, что оба алгоритма могут использовать одну и ту же структуру закрытого ключа (это является источником путаницы: многие документы, в том числе стандарт RSA , пытаются объяснить подпись как «шифрование с помощью закрытого ключа», что, в лучшем случае, неточно).
Использование одного и того же ключа для обоих видов использования возможно, но на самом деле не рекомендуется, поскольку взаимодействия между обоими видами использования не были полностью изучены; Кроме того, ключи для шифрования и ключи для подписей обычно имеют разные жизненные циклы с различными механизмами защиты (например, обычно вы хотите сохранить резервную копию личного ключа для шифрования, чтобы предотвратить потерю данных: потеря личного ключа означает потерю всех данных, которые был зашифрован с этим ключом, в то время как вы не хотите создать резервную копию ключа подписи).
Ваш сценарий немного неясен. Асимметричное шифрование использует открытый ключ, а при создании подписи - закрытый ключ. Если A хочет отправить сообщение B с шифрованием (для конфиденциальности) и подписью (для целостности), то A зашифрует данные открытым ключом, для которого B знает закрытый ключ; и A подпишет данные закрытым ключом, для которого B знает открытый ключ. Это требует двух пар ключей: одна пара используется для шифрования и дешифрования (A шифрует, B дешифрует, B знает закрытый ключ), а другая пара используется для подписей (A подписывает, B проверяет , А знает закрытый ключ). Если и A, и B знают закрытый ключ, то у них есть общий секрет, и гораздо проще (и быстрее) использовать симметричное шифрование ( AES ) и проверки целостности ( HMAC ).
Стандартный отказ от ответственности: вы выглядите так, будто разрабатываете свой собственный криптографический протокол. Не делайте этого. Эта дорога ведет к тем же сбоям безопасности, на которые наткнулись бесчисленные другие умные люди. Используйте проверенный протокол, такой как SSL / TLS или OpenPGP .