«Обратное» шифрование с открытым / закрытым ключом в C #, как мне это сделать? - PullRequest
4 голосов
/ 16 июля 2011

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

Таким образом, сервер может шифровать и дешифровать, клиентможет только дешифровать.

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

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

Любой совет относительно наилучшего способа решения этой проблемы будет приветствоваться.

Ответы [ 2 ]

4 голосов
/ 16 июля 2011

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

Обычно вы шифруете только хеш, а не весь блок данных, так как это быстрее.

0 голосов
/ 16 июля 2011

Создайте две пары ключей RSA - одну (A) для шифрования (и поместите закрытый ключ в клиентское приложение), а другую (B) для подписи (закрытый ключ хранится на сервере).Теперь, когда вы отправляете данные клиенту, зашифровываете их, используя открытый ключ из пары ключей A, и подписываете их, используя закрытый ключ из пары ключей B. Подписывание выполняется путем вычисления криптографической подписи над хешем данных (чтобы сделать обработку прощеувеличить скорость).Обычно подписывание не выполняется над самими данными из-за очень низкой скорости асимметричной криптографии.

Эта процедура является стандартной и поддерживается всеми реализациями RSA (если они стоят, по крайней мере, копейки).Если вы планируете использовать сертификаты X.509, то ваш друг - стандарт PKCS # 7 (позже эволюционировавший в CMS и CAdES).Если вы используете простые ключи RSA, вам нужно будет придумать свой собственный формат (но это не большая проблема).

Однако следует учитывать одну вещь: вы передаете закрытый ключ приложению, что означает, что он становится доступным и для пользователя, и таким образом возможна утечка данных.Вы рассматривали этот побочный эффект?

...