Как открытый ключ используется для расшифровки в сборках .NET?

StackOverflow https://stackoverflow.com/questions/670615

  •  21-08-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

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

Более подробную информацию о цифровых подписях можно найти в эта статья в Википедии.

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top