Что такое .snk?

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

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

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

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

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

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