c # RSA извлекает открытый ключ из закрытого ключа

#c# #rsa #public-key #private-key

#c# #rsa #открытый ключ #закрытый ключ

Вопрос:

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

Комментарии:

1. Как называется файл, из которого вы хотите извлечь открытый ключ?

2. Ну, это не файл, это на самом деле RSACryptoServiceProvider()

Ответ №1:

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

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

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

Комментарии:

1. Спасибо! Именно то, что я надеялся услышать (:

Ответ №2:

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

Комментарии:

1. о, ну, это означает, что я должен зарегистрировать свою учетную запись (:

Ответ №3:

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

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

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

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