Как для строгих имен, так и для цифровых подписей используется криптография с открытым ключом для предоставления свидетельства о происхождении сборки, что позволяет применять защиту политика для определения того, какие разрешения предоставляются для сборки .
Они отличаются не своими техническими деталями, а тем, какие проблемы они намерены решить.
Целью строгого имени является исключительно обеспечение того, чтобы при загрузке сборки по имени загружал именно ту сборку, которую, по вашему мнению, вы загружаете . Это единственная цель для строгого имени. Вы говорите: «Я хочу загрузить Frobber версии 4 от FooCorp». Механизм строгого имени гарантирует, что вы действительно загружаете именно ту DLL, а не другую сборку под названием Frobber, версия 4, которая была предоставлена Dr. Evil Enterprises.
Для этого все, что вам нужно, это знать токен открытого ключа, связанный с закрытым ключом FooCorp. Как вы узнаете, что токен открытого ключа - полностью ваше дело. Отсутствует инфраструктура, предназначенная для безопасного получения этой информации. Вы просто должны знать, что это такое.
Целью электронной подписи на сертификате издателя является создание проверяемой цепочки идентификации и доверия . Цепочка доверия простирается от куска кода неизвестного или неопределенного происхождения до «доверенного корня» - объекта, которому вы настроили свою операционную систему для доверия. Вы загружаете некоторый код, и код имеет цифровую подпись с сертификатом от FooCorp. Вы проверяете сертификат, и он говорит, что «эта программа от FooCorp. VeriSign подтверждает точность этого сертификата». Поскольку VeriSign является одним из ваших надежных корней, теперь вы уверены, что этот код действительно был написан на FooCorp.
Обратите внимание, насколько сложнее проблема, решаемая с помощью цифровых подписей. Мы не пытаемся просто определить «связан ли этот кусок кода с этим именем или нет?» Вместо этого мы пытаемся определить, откуда появился этот код и кто поручается за существование компании, предположительно ответственной, и стоит ли нам доверять этой компании?
Разница между строгими именами и цифровыми подписями подчеркивает, что сложного в криптографической безопасности. Трудная проблема не в криптографии; это просто математика. Сложной проблемой является безопасное управление распространением информации о ключах и связывание их с правильными объектами. Сильные имена, потому что они пытаются решить очень маленькую, но важную проблему, не имеют ключевых проблем управления. Или, скорее, они навязывают вам проблему управления ключами пользователю. Цифровые подписи - все о попытке автоматизировать безопасное распространение ключевой информации через сертификаты, чтобы решить намного более сложные проблемы доверия и идентичности.
Это ясно?
(Отличный вопрос; этот вопрос пойдет на мой блог 3 сентября.)