Подписание сборок .NET - PullRequest
       24

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

24 голосов
/ 26 августа 2009

Какое отношение имеет цифровая подпись к сборкам со строгими именами? Я читал, что сборка со строгим именем имеет открытый ключ и цифровую подпись.

Из статьи Википедии «Сборка (CLI)» :

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

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

Ответы [ 5 ]

46 голосов
/ 26 августа 2009

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

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

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

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

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

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

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

Это ясно?

(Отличный вопрос; этот вопрос пойдет на мой блог 3 сентября.)

3 голосов
/ 26 августа 2009

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

2 голосов
/ 26 августа 2009

Это Сильное именование против цифровых подписей В блоге это объясняется довольно хорошо.

2 голосов
/ 26 августа 2009

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

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

1 голос
/ 27 августа 2009

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

...