Нужна помощь в понимании процесса подписания сборки

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

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

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

TIA


person palm snow    schedule 25.03.2011    source источник


Ответы (1)


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

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

person thecoop    schedule 25.03.2011
comment
благодаря. Итак, когда я запускаю ILDASM для подписанной сборки, виден ли там этот строгий хэш имени или вы можете просматривать его только через какую-нибудь шестнадцатеричную программу просмотра? Также какую шестнадцатеричную программу просмотра вы использовали для блогов? - person palm snow; 26.03.2011
comment
@Simon: Спасибо за подсказку, я просмотрел сборку через шестнадцатеричный просмотрщик и тоже увидел, на что вы указываете. Однако у меня есть неподписанная сборка, которая также содержит некоторые данные по этому смещению 0250. Как я могу узнать, действительно ли данные, содержащиеся в этом смещении, являются подписанным хешем по сравнению с чем-то еще - person palm snow; 28.03.2011