Расшифровать данные с помощью открытого ключа RSA - PullRequest
2 голосов
/ 26 июня 2010

Во-первых, это не опечатка, я хочу расшифровать , используя открытый ключ. Цель этого состоит в том, чтобы бросить вызов третьей стороне, чтобы убедиться, что у нее действительно есть закрытый ключ, который соответствует открытому ключу. По сути, я посылал некоторые случайные данные, они зашифровывали их своим закрытым ключом, я расшифровывал их с помощью открытого ключа и сравнивал дешифрованное значение со случайными данными, которые я отправлял. Я полагаю, что это довольно стандартная процедура в криптографии с открытым ключом, но по некоторым причинам дешифрование с помощью открытого ключа представляется табу.

Я просто использую RSACryptoServiceProvider в .NET 2.0. Однако, когда я звоню Decrypt, он выдает CryptographicException с сообщением Bad Key. Ключ не плохой (я могу Encrypt без проблем), но кажется, что он не позволит мне расшифровать только открытым ключом. Что дает? Это должно быть возможно сделать.

Ответы [ 3 ]

7 голосов
/ 26 июня 2010

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

Используйте знак RSACryptoServiceProvider и проверьте семейство методов. Фактически, SignHash на самом деле говорит: «зашифровав его закрытым ключом».

0 голосов
/ 06 июня 2012

За Радж, ключ, который вы получили, вероятно, не помечен для обмена.

Спросите сторону, которая предоставила открытый ключ, как они его сгенерировали. Если вы используете makecert.exe, им нужно указать "-sky Exchange". Без этого вы можете использовать ключ только для подписи и аутентификации, но не для шифрования / дешифрования, который вы используете здесь.

0 голосов
/ 30 июня 2010

Эти классы .Net должны быть оболочкой крипто API.

В крипто API есть два типа ключей. Crypto API - это оболочка для PKCS # 11. Когда вы генерируете пару ключей с помощью поставщика услуг криптографии Microsoft, вы получаете ключи AT_EXCHANGE и AT_SIGNATURE. Каждый ключ генерируется на основе некоторых атрибутов, определенных в PKCS # 11 standard ..

AT_EXCHANGE ключи Атрибуты:

wrap / unwrap = true

подписать / подтвердить = верно

encrypt / decrypt = false

Ключи AT_SIGNATURE Атрибуты:

wrap / unwrap = false

подписать / подтвердить = верно

encrypt / decrypt = false

Таким образом, в основном, когда вы обмениваетесь данными, вы, по сути, выполняете функцию обертывания / разворачивания. Это то, что Microsoft называет это как AT_EXCHANGE. Это в основном используется для обмена секретными / симметричными ключами и не используется для обмена огромными объемами данных.

Так что вам нужно вернуться и выяснить, какой ключ вы выбрали, чтобы ЛИБО подписать / обернуть данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...