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