Для чего нужен .snk? - PullRequest
       67

Для чего нужен .snk?

146 голосов
/ 25 сентября 2008

Для чего нужен файл .snk? Я знаю, что это расшифровывается как Строго именованный ключ , но все объяснения, что это такое и как это работает, у меня над головой.

Есть ли какое-нибудь простое объяснение того, как используется ключ со строгим именем и как он работает?

Ответы [ 5 ]

206 голосов
/ 25 сентября 2008

Файл .snk используется для применения строгого имени к сборке .NET . такое сильное имя состоит из

простое текстовое имя, номер версии, и информация о культуре (если при условии) - плюс открытый ключ и цифровая подпись.

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

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

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

Статья " Секреты сильных имен ". Проделывает отличную работу по объяснению этих понятий более подробно. С картинками.

22 голосов
/ 25 сентября 2008

В мире .Net файл SNK используется для подписи ваших скомпилированных двоичных файлов. Это позволяет пару вещей произойти:

  1. Вы можете зарегистрировать сборку в GAC (глобальный кэш сборок) . Таким образом, вы можете ссылаться на него из разных мест на одном компьютере без необходимости сохранять несколько копий).
  2. Вы можете использовать ваши двоичные файлы из других двоичных файлов, которые также подписаны (это странное вирусное поведение в отношении подписанных сборок).
  3. Ваша сборка не может (легко) быть изменена третьими лицами , которые не имеют доступа к файлу SNK, обеспечивая по крайней мере небольшой уровень безопасности.

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

Надеюсь, это было несколько полезно.

7 голосов
/ 25 сентября 2008

Файл .snk используется для подписания сборок, чтобы иметь возможность добавить их в глобальный кэш сборок (GAC).

Файл .snk содержит публичные и приватные токены для вашего ключа. Если вы хотите подписать некоторые данные (или двоичные данные) этим ключом, для данных рассчитывается контрольная сумма, которая затем шифруется с помощью личного токена. Зашифрованная контрольная сумма затем добавляется к данным. Любой может использовать открытый токен из вашего ключа, чтобы расшифровать контрольную сумму и сравнить ее с вычисленной контрольной суммой, чтобы убедиться, что подписанные данные не были подделаны.

Подробнее о криптографии с открытым ключом можно прочитать на http://en.wikipedia.org/wiki/Public-key_cryptography.

4 голосов
/ 25 сентября 2008

Файл .snk - это постоянная версия вашего «Ключа», созданная утилитой sn в наборе утилит framework. Затем вы используете этот файл для «цифровой подписи» ваших сборок. Это двухкомпонентный ключ .. комбинация закрытого и открытого ключей. Публичная часть ключа публикуется, то есть всем известна. Приватная часть известна только вам, разработчику компонентов / приложений, и предназначена для сохранения таким образом.

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

3 голосов
/ 25 сентября 2008

Файл .snk используется, чтобы гарантировать, что кто-то другой не сможет вставить собственную сборку вместо вас. Он предоставляет пару ключей шифрования / дешифрования.

Когда для подписи сборки используется файл .snk, значение хеш-кода вычисляется из файла сборки и шифруется с использованием личного ключа. Затем этот зашифрованный «дайджест» прикрепляется к сборке вместе с открытым ключом из файла .snk.

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

В контексте BizTalk Server тот, кто создает какие-либо пользовательские сборки, используемые вашим решением BizTalk, должен будет использовать файл .snk для подписи сборки, чтобы сервер BizTalk мог загрузить его в GAC и использовать. *

...