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

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

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


person Community    schedule 25.09.2008    source источник


Ответы (5)


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

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

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

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

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

Статья Секреты строгого именования (из архива Wayback Machine). Отлично объясняет эти концепции более подробно. С картинками.

person Blair Conrad    schedule 25.09.2008
comment
Означает ли это, что когда вы подписываете сборку с помощью .PFX, она на самом деле просто использует это для генерации .SNK на лету всякий раз, когда он компилируется? - person Patrick; 01.03.2013
comment
@Patrick no, это Authenticode Signature, которая одновременно доказывает файл не был изменен между подписью и проверкой, не соответствует требованиям строгого имени. Проблема в том, что Authenticode не требует цепочки доверия сборок, которая требуется для строгого именования, поэтому вы можете подписать Authenticode сборку, основанную на сборках с несильными именами / подписанными. - person Scott Chamberlain; 06.01.2014
comment
Вы можете просто удалить snk и заменить его другим ... я не знаю реального сценария, где он может быть полезен ... это в основном наши пары ключей, вы не можете построить доверие на этом - person Ibrahim; 17.11.2017
comment
Ссылка WayBackMachine на Секреты сильного имени - person asfeynman; 05.10.2018
comment
Пожалуйста, обновите ссылку в ответе (на ту, которую предложил @asfeynman), так как ссылка мертва, и не все читают комментарии. - person XelaNimed; 22.07.2020

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

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

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

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

person ckramer    schedule 25.09.2008

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

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

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

person Franci Penov    schedule 25.09.2008

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

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

person Gishu    schedule 25.09.2008

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

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

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

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

person Michael Lang    schedule 25.09.2008