В чем разница между шифрованием некоторых данных и подписью некоторых данных (с использованием RSA)?
Шифрование сохраняет конфиденциальность сообщения («некоторые данные»), в то время как подписывание обеспечивает безотказность: то есть только подписавший его объект мог подписать его. Есть и функциональные различия; читай дальше.
Это просто меняет роль открытых и закрытых ключей?
Точно нет. Использование одних и тех же закрытых ключей для подписи и дешифрования (или, аналогично, одинаковых открытых ключей для проверки и шифрования ) не одобряется, поскольку вы не должны смешивать цели. Это не столько математическая проблема (RSA все еще должен быть безопасным), но проблема с управлением ключами , где, например, ключ подписи должен иметь более короткий срок действия и содержать больше защиты перед его использованием.
Для того же сообщения вы должны использовать закрытый ключ отправителя для подписи и доверенный открытый ключ получателя для шифрования. Обычно используется знак-затем-шифрование, иначе злоумышленник может заменить подпись своей. Точно так же вы должны использовать закрытый ключ получателя для расшифровки и доверенный открытый ключ отправителя для проверки.
Кроме того, вы должны понимать, что при создании подписи не используется «шифрование с помощью закрытого ключа». Хотя все операции RSA основаны на модульном возведении в степень, схема дополнения для генерации подписи совершенно иная. Кроме того, открытый ключ обладает совершенно другими свойствами, чем закрытый ключ RSA во всех практических применениях RSA.
Например, я хочу использовать свой личный ключ для генерации сообщений, поэтому только я могу быть отправителем.
Это свойство безотказности, которое может быть достигнуто подписью.
Я хочу, чтобы мой открытый ключ использовался для чтения сообщений, и мне все равно, кто их читает.
Открытый ключ должен считаться известным всем. Если вы хотите, чтобы все читали сообщения, просто не шифруйте их.
Подписание, как правило, не влияет на содержание сообщения. Сообщение считается отдельным от подписи. Официально такие подписи известны как «подписи с приложением», где приложением является сообщение. Это немного странное имя, поскольку сообщение считается более важным, чем подпись над ним, но да. Только несколько подписей предлагают (частичное) восстановление сообщений; они больше не используются и, как правило, считаются устаревшими.
Обратите внимание, что протоколы подписи, такие как CMS, могут развертывать контейнерный формат, который включает в себя как сообщение, так и подпись. В этом случае вам сначала нужно получить - все еще незашифрованное - сообщение из контейнера, как разархивировать файл из простого архива .zip. Таким образом, сообщение может быть скрыто от просмотра и не может быть непосредственно использовано в этом случае.
Я хочу иметь возможность шифровать определенную информацию и использовать ее в качестве ключа продукта для моего программного обеспечения. Меня волнует только то, что я единственный, кто может их генерировать.
Шифрование используется для достижения конфиденциальности. В прошлом генерацию подписи RSA часто считали «шифрованием с помощью закрытого ключа». Однако операции, как объяснено выше, совершенно разные, и более поздние стандарты отчаянно пытаются разделить шифрование и генерацию подписи.
Я хотел бы включить свой открытый ключ в свое программное обеспечение для расшифровки / чтения подписи ключа. Мне все равно, кто может читать данные в ключе, меня интересует только то, что я единственный проверяемый, кто может их сгенерировать.
Да, это называется установлением доверия к открытому ключу. Однако защита кода вашей программы очень отличается от защиты сообщений. Вы можете выполнить подпись кода, но тогда вам нужно что-то проверить подпись за пределами вашего кода . Есть операционные системы, которые предлагают это.
Например, Microsoft Authenticode. Магазины приложений, такие как iStore и магазин приложений Android, могут использовать или не использовать подпись кода, но они дают некоторую уверенность в том, что ваше приложение не клонировано или, по крайней мере, не клонировано в магазине. Криптография не всегда является решением в конце концов.
Предотвратить клонирование / изменение вашего кода вообще намного сложнее, и если вы пойдете по этому пути, вы окажетесь на территории DRM.
Полезно ли подписание в этом сценарии?
Да, конечно. Конечно, это может помочь убедиться, что сообщения были подписаны только вами, если есть доверие к открытому ключу. Если это может быть полезно для аутентификации кода вашего приложения / интегрированного открытого ключа, полностью зависит от среды, в которой вы ожидаете запустить код.