2010-11-02 3 views
3

- Это было решено -RSA Шифрование - Шифрование с закрытым ключом

Я понял, как это сделать, и написал краткую статью, описывающую, как я это сделал здесь: http://juzzbott.com/2010/11/signing-and-verifying-data-within-csharp-encrypting-with-private-key-sort-of/

Спасибо to bjarkef & Хенк Холтерман за то, что нашли время, чтобы объяснить это мне основательно.

Приветствия

- Orginal Вопрос -

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

Мне требуется строка данных для шифрования закрытым ключом, так что только я могу создать зашифрованные данные, и мое приложение прочитало его открытым ключом. Идея заключается в том, чтобы создать файл лицензии для моего приложения, зашифровать данные лицензии и попросить приложение прочитать эти данные. Это предотвратит создание лицензий кем-либо, кроме меня, однако это позволит программе читать его открытым ключом.

Идея этого заключается в том, чтобы контролировать зашифрованные данные, и не заботятся о том, кто может ее прочитать, только кто может ее создать.

Использование RSACryptoServiceProvider, я могу создать свои общедоступные/частные ключи, я могу зашифровать данные с помощью закрытого ключа, однако, когда я перехожу к расшифровке с помощью открытого ключа, я получаю исключение «Key Not Found».

Подписание с помощью RSA также невозможно, так как мне нужно сравнить зашифрованные данные с текстовыми данными, чтобы гарантировать, что лицензия действительна, а подпись только проверяет источник, а не то, что он содержит.

Есть ли какой-либо другой криптопровайдер, который я могу использовать для этого, или какой-либо другой способ чтения сведений о лицензии, посредством чего я сохраняю закрытый ключ и распространяю открытый ключ с моим приложением для проверки лицензии.

Cheers

+3

«Однако, если сообщение имеет цифровую подпись, любое изменение в сообщении после подписи приведет к аннулированию подписи». http://en.wikipedia.org/wiki/Digital_signature#Integrity. Вы уверены, что подписание - это не то, что вам нужно? – steinar

+4

То, что вы описываете, называется «подписание», хотя вы говорите, что это не так. –

+0

Я знаю, что могу подписать строку данных, и это будет проверять подлинность данных, полученных мной, однако я использую эти зашифрованные данные для установки параметров лицензии, одновременно работающих пользователей IE. Поэтому, хотя я могу подписывать исходные данные (содержащие счетчик совпадающих пользователей) и отправлять вместе с ним текстовые данные, нет способа сравнить значения, чтобы убедиться, что они аутентичны. т.е.: я отправляю счетчик одновременного пользователя как обычный текст, а также строку, содержащую зашифрованный счетчик пользователей. То, что я тогда хочу сделать, это unencrypt одновременное значение пользователя и сравнить его с равным текстовым значением. – Juzzbott

ответ

6

Необходимо подписать. В самом деле.

Весь подписанный API предназначен для подписания значения Hash, поскольку RSA работает медленно, поэтому хеш используется как краткий обзор. Это должно соответствовать вашим потребностям, вы всегда можете отправить незашифрованный текст рядом. Вы используете подпись для ее проверки.

+0

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

+0

@Juzzbott: Поскольку подписание - это именно то, что вы описываете. Подписание означает шифрование с помощью закрытого ключа и дешифрование с помощью открытого ключа. был сделан для точной вывески, которую вы описываете: для проверки содержимого не было изменено и что автор находится в pocession закрытого ключа, используя только открытый ключ. –

+1

@bjarkef: Или две функции, которые я хочу использовать SignHash() и VerifyHash() с этой страницы? http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider.aspx – Juzzbott

Смежные вопросы