Подписание сборков .NET

Что делает цифровая подпись для сильных именных сборок. Я читал, что у сильно названной сборки есть открытый ключ и цифровая подпись.

Из Статья в Википедии "Сборка (CLI)" :

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

Точная информация выше? Он не имеет ссылки на цифровую подпись. Я не смог найти страницу MSDN, объясняющую, как подписываются сборки, как проверяется подпись и как устраняется возможность взлома. Хотелось бы узнать больше об этом.

Ответ 1

> > сборки, так что вы можете применить strong > политика безопасности, чтобы определить, какие разрешения предоставляются сборке.

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

Цель сильного имени заключается исключительно в том, чтобы , когда вы загружаете сборку по имени, вы загружаете именно ту сборку, которую, по вашему мнению, загружаете. Это только по назначению сильного имени. Вы говорите: "Я хочу загрузить Frobber, версия 4, которая появилась в FooCorp". Сильное устройство имен гарантирует, что вы действительно загружаете именно эту DLL, а не другую сборку под названием Frobber, версия 4, которая поступает от Dr. Evil Enterprises.

Чтобы достичь этого, требуется только то, что вы знаете токен открытого ключа, связанный с закрытым ключом FooCorp. Как вы узнаете, что токен открытого ключа - это ваш бизнес. Нет никакой инфраструктуры, которая бы помогла вам получить эту информацию безопасно. Вы просто должны знать, что это такое.

Цель цифровой подписи из сертификата издателя - установить проверяемую цепочку идентификации и доверия. Цепочка доверия исходит от куска кода неизвестного или неопределенного происхождения до "доверенного корня" - объекта, которому вы настроили свою операционную систему, чтобы доверять. Вы загружаете некоторый код, а код имеет цифровую подпись с сертификатом от FooCorp. Вы проверяете сертификат, и он говорит: "Эта программа исходит от FooCorp. Точность этого сертификата поручена VeriSign". Поскольку VeriSign является одним из ваших надежных корней, теперь у вас есть уверенность, что этот код действительно появился в FooCorp.

Обратите внимание, насколько сложнее проблема, решаемая цифровыми сигнатурами. Мы не пытаемся просто определить, является ли этот код кода, связанного с этим именем, или нет? Вместо этого мы пытаемся определить, откуда взялся этот код, и кто ругает за существование компании, предположительно ответственной, и следует ли нам доверять этой компании?

Различие между сильными именами и цифровыми подписями подчеркивает, что трудно использовать для криптозащиты. Жесткая проблема - не криптография; это просто математика. Жесткой проблемой является безопасное управление распределением информации о ключах и привязка их к правильным объектам. Сильные имена, потому что они пытаются решить очень небольшую, но важную проблему, не имеют проблем с управлением. Или, скорее, они навязывают вам проблему управления ключами, пользователь. Цифровые подписи направлены на автоматизацию безопасного распространения ключевой информации через сертификаты, чтобы решить гораздо более сложные проблемы доверия и идентификации.

Это ясно?

(Большой вопрос: это будет 3-го сентября мой блог)

Ответ 2

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

Ответ 4

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

Прочитайте статью в Википедии. Цифровые подписи предотвращают подделку любого цифрового документа. Не только сборки. Это объясняет это лучше, чем когда-либо.

Ответ 5

Я нашел интересное объяснение здесь. Проводка здесь для бумажной трассы. Надеюсь, это может помочь кому-то.