Можно ли использовать чистые ключи шифрования и дешифрования в асимметричной криптографии вместо закрытых и открытых ключей? - PullRequest
1 голос
/ 17 июня 2010

Можно ли использовать чистые ключи шифрования и дешифрования вместо закрытых и открытых ключей? Как я знаю в .Net асимметричной реализации RSA закрытый ключ RSAParameters parameters = (new RSACryptoServiceProvider()).ExportParameters(true) является расширенным набором открытого ключа. А используя закрытый ключ, мы можем как зашифровать, так и расшифровать наши данные. Но Мне нужен ключ только для расшифровки данных. Как это сделать?

Я экспериментировал с обнулением полей RSAParameters, но объект RSACryptoServiceProvider не может импортировать такие параметры.

Ответы [ 4 ]

2 голосов
/ 17 июня 2010

Если вы спрашиваете, о чем я думаю, вы решаете проблему, подобную этой:

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

Это близко? Можете ли вы сказать нам, какую проблему вы решаете?

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

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

Редактировать 2: ОП, вам, вероятно, стоит посмотреть цифровые подписи . Вы можете подписать сообщение (используя закрытый ключ), а затем подтвердить подпись открытым ключом, который, я думаю, является именно тем, о чем вы просили.

1 голос
/ 17 июня 2010

Я думаю, что вам нужно использовать закрытый ключ для расшифровки и открытый ключ для шифрования.

Получатель (расшифровщик) отправляет свой открытый ключ отправителю (шифровщик). Таким образом, каждый может отправлять сообщения, только получатель может читать их. Это то, что вам нужно?

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

1 голос
/ 17 июня 2010

Для декодирования данных вам нужен либо открытый , либо закрытый ключ.Зависит от того, как это было закодировано.

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


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

Существуют стандартные функции и шаблоны для подписи.

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

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

Просто имейте две пары ключей.

Сторона A получает закрытый ключ пары ключей 1 и открытый ключ пары ключей 2. Сторона B получает открытый ключ пары ключей 1, изакрытый ключ пары ключей 2.

Сторона B отправляет свое сообщение, сначала зашифровав его открытым ключом пары ключей 1, а затем секретным ключом пары ключей 2.

Сторона A расшифровывает результат, используя открытый ключ пары ключей 2 и закрытый ключ пары ключей 1 (в таком порядке).

Сторона A может генерировать открытый ключ ключа.пара 1, но не может сгенерировать закрытый ключ пары ключей 2, поэтому сторона A не может сгенерировать правильное сообщение.

Обратное действие работает в другом направлении.

Обратная сторона: если выиметь центрального человека (или сервер), который каждый другой человек (или вычислитьr) общается, каждая сторона нуждается в своем личном ключе, и им необходимо предоставить соответствующий открытый ключ центральному лицу (или серверу), с которым они общаются.

...