Для чего нужен.snk?
Для чего нужен файл.snk? Я знаю, что это означает " Строгое имя ключа", но все объяснения того, что это такое и как это работает, у меня над головой.
Есть ли простое объяснение того, как используется ключ со строгим именем и как он работает?
5 ответов
Файл.snk используется для применения строгого имени к сборке.NET. такое сильное имя состоит из
простое текстовое имя, номер версии и информация о культуре (если есть) - плюс открытый ключ и цифровая подпись.
SNK содержит уникальную пару ключей - закрытый и открытый ключи, которые можно использовать для обеспечения уникального строгого имени для сборки. Когда сборка имеет строгое имя, из содержимого сборки создается хеш, и хеш шифруется с помощью закрытого ключа. Затем этот подписанный хеш помещается в сборку вместе с открытым ключом из.snk.
Позже, когда кому-то нужно проверить целостность сборки со строгим именем, он создает хэш содержимого сборки и использует открытый ключ из сборки, чтобы расшифровать хэш, поставляемый со сборкой - если два хеша совпадают, проверка сборки проходит.
Важно иметь возможность проверять сборки таким образом, чтобы никто не поменял сборку на вредоносную, которая подорвет все приложение. Вот почему сборкам со строгими именами не доверяют так же, как сборкам со строгими именами, поэтому их нельзя поместить в GAC. Кроме того, существует цепочка доверия - вы не можете сгенерировать сборку со строгим именем, которая ссылается на сборки без строгого имени.
Статья " Секреты сильных имен". Отличная работа по объяснению этих понятий более подробно. С картинками.
В мире.Net файл SNK используется для подписи ваших скомпилированных двоичных файлов. Это позволяет пару вещей произойти:
- Вы можете зарегистрировать сборку в GAC (глобальный кэш сборок). Таким образом, вы можете ссылаться на него из разных мест на одном компьютере без необходимости сохранять несколько копий).
- Вы можете использовать ваши двоичные файлы из других двоичных файлов, которые также подписаны (это странное вирусное поведение в отношении подписанных сборок).
- Ваша сборка не может (легко) быть изменена третьими лицами, которые не имеют доступа к файлу SNK, обеспечивая по крайней мере небольшой уровень безопасности.
Я не знаком с тем, как работает сервер BizTalk, поэтому не думаю, что смогу пролить свет на то, какую конкретную цель они выполняют в этой среде.
Надеюсь, это было несколько полезно.
Файл.snk используется для подписания сборок, чтобы иметь возможность добавить их в глобальный кэш сборок (GAC).
Файл.snk содержит публичные и приватные токены для вашего ключа. Если вы хотите подписать некоторые данные (или двоичные данные) этим ключом, для данных рассчитывается контрольная сумма, которая затем шифруется с помощью личного токена. Зашифрованная контрольная сумма затем добавляется к данным. Любой может использовать открытый токен из вашего ключа, чтобы расшифровать контрольную сумму и сравнить ее с вычисленной контрольной суммой, чтобы убедиться, что подписанные данные не были подделаны.
Вы можете прочитать больше о криптографии с открытым ключом на http://en.wikipedia.org/wiki/Public-key_cryptography.
Файл.snk - это постоянная версия вашего "Ключа", созданная утилитой sn в наборе утилит framework. Затем вы используете этот файл для "цифровой подписи" ваших сборок. Это двухкомпонентный ключ.. комбинация закрытого и открытого ключей. Открытая часть ключа публикуется, то есть известна всем. Приватная часть известна только вам, разработчику компонентов / приложений, и предназначена для сохранения таким образом.
Когда вы подписываете свою сборку, она использует закрытый ключ и хеш-значение для вашей сборки, чтобы создать цифровую подпись, встроенную в вашу сборку. После этого любой, кто загружает вашу сборку, проходит этап проверки. Открытый ключ используется для проверки, действительно ли сборка исходит от вас... вам просто нужен открытый ключ для этого (который также встроен в токенизированную форму в манифесте сборки). Если сборка была подделана, значение хеша будет другим, и нагрузка на сборку будет прервана. Это механизм безопасности.
Файл.snk используется, чтобы гарантировать, что кто-то другой не сможет вставить собственную сборку вместо вас. Он предоставляет пару ключей шифрования / дешифрования.
Когда файл.snk используется для подписи сборки, значение хеш-кода вычисляется из файла сборки и шифруется с использованием закрытого ключа. Затем этот зашифрованный "дайджест" прикрепляется к сборке вместе с открытым ключом из файла.snk.
Затем, когда кто-то получает вашу сборку, он также может вычислить это значение хэш-кода. Они используют открытый ключ, чтобы расшифровать тот, который вы рассчитали, и сравнить вычисленные значения. Если сборка была вообще изменена, эти значения будут другими, и пользователь сборки будет знать, что ваша сборка не та, которую вы указали.
В контексте BizTalk Server тот, кто создает какие-либо пользовательские сборки, используемые вашим решением BizTalk, должен будет использовать файл.snk для подписи сборки, чтобы сервер BizTalk мог загрузить его в GAC и использовать его.