Нужна помощь в понимании процесса подписания сборки - PullRequest
1 голос
/ 25 марта 2011

У меня есть сборка .NET, которую я подписываю.Вот мое понимание процесса и связанных с ним вопросов.

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

  2. Из того, что я прочитал, когда среда выполнения загружает эту подписанную сборку, он выполняет обратный процесс, который включает генерацию хэша сборки и расшифровку «подписи строгого имени».Эта расшифрованная подпись строгого имени сравнивается с хешем из шага 1. Если эти два значения соответствуют среде выполнения, загружает ее, в противном случае отказывается загружать сборку.Я не уверен, что именно является «подписью строгого имени», которая была расшифрована, и снова, где я могу ее найти.

TIA

1 Ответ

3 голосов
/ 26 марта 2011

Чтобы ответить на ваш первый вопрос, я написал серию постов в блоге о компоновке сборки .NET; Я рассмотрел метаданные CLR во втором посте . Как видите, хеш строгого имени хранится в разделе .text сборки, прямо под заголовком CLI.

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

...