c # RSA извлекает открытый ключ из закрытого ключа - PullRequest
3 голосов
/ 07 апреля 2011

Есть ли способ извлечь открытый ключ из закрытого ключа в c #? Потому что, если я сделаю ToXMLString(), я могу установить, хочу ли я, чтобы информация открытого ключа сохранялась с закрытым ключом. Так что теперь я думаю, что есть способ извлечь открытый ключ из частного?

Ответы [ 3 ]

2 голосов
/ 07 апреля 2011

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

(Теоретически возможно иметь «чистый закрытый ключ RSA», который НЕ включает в себя открытый показатель степени, но он имеет недостатки, такие какгораздо более сложная защита от атак по побочным каналам и сниженная производительность. Поэтому никто в здравом уме не делает этого. Вы можете предположить, что когда у вас есть закрытый ключ, у вас фактически есть полная пара ключей.)

В C #Стандартная библиотека / .NET, открытые и закрытые ключи RSA могут быть представлены в виде строк XML (ToXmlString() и FromXmlString()) или пользовательской структуры RSAParameters (ExportParameters() и ImportParameters()).Если вы можете получить полный закрытый ключ, то вам просто нужно выбрать открытые поля (модуль и открытый показатель), которые вместе составляют открытый ключ.Обратите внимание, что RSACryptoServiceProvider может быть интерфейсом к базовой реализации RSA, который может отказаться экспортировать закрытый ключ (но обычно принимает экспорт открытого ключа).

0 голосов
/ 07 апреля 2011

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

0 голосов
/ 07 апреля 2011

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

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

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

Является ли это легко выполнимым в C # или .NET, я понятия не имею.

...