Що таке .snk?


153

Для чого файл .snk? Я знаю, що це означає « Сильно названий ключ» , але всі пояснення того, що це таке і як це працює, перебувають у мене над головою.

Чи є якесь просте пояснення того, як використовується сильно названий ключ і як він працює?

Відповіді:


212

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

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

SNK містить унікальну пару ключів - приватний та відкритий ключ, який можна використовувати для того, щоб у вас було унікальне сильне ім’я для складання. Коли збірка має чітке ім'я, з вмісту збірки будується "хеш", а хеш шифрується приватним ключем. Потім цей підписаний хеш поміщається у збірку разом із відкритим ключем від .snk.

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

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

Стаття " Секрети сильного називання (архівована на машині Wayback) ". Чудово справляється з поясненням цих понять більш детально. З картинками.


2
Чи означає це, що коли ви підписуєте збірку з .PFX, вона насправді просто використовує це для створення .SNK на льоту, коли він компілюється?
Патрік

5
@Patrick ні, тобто підпис Authenticode, який, хоча і доводить, що файл не був змінений між підписом і чеком, не відповідає чітким вимогам до імені. Проблема полягає в тому, що Authenticode не вимагає довіри збірок, яких вимагає сильне іменування, щоб ви могли Authenticode підписати збірку, яка спирається на не сильні іменні / підписані збірки.
Скотт Чемберлен

1
Ви можете просто зняти snk і замінити його на інший .. Я не знаю реального сценарію, де він корисний .. це в основному наші ключові пари, на яких ви не можете побудувати довіру
Ібрагім

8
Посилання WayBackMachine на секрети сильного імені
asfeynman

Будь ласка, оновіть посилання у відповіді (на ту, яку запропонував @asfeynman), оскільки посилання є мертвою, і не всі читають коментарі.
XelaNimed

22

У світі .Net файл SNK використовується для підпису ваших складених бінарних файлів. Це дозволяє зробити кілька речей:

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

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

Сподіваюся, це було дещо корисно.


7

Файл .snk використовується для підписання асамблей, щоб мати змогу додати їх до кеша глобальної асамблеї (GAC).

Файл .snk містить загальнодоступні та приватні маркери для вашого ключа. Коли ви хочете підписати деякі дані (або двійкові) цим ключем, на даних обчислюється контрольна сума, яка потім шифрується приватним маркером. Потім зашифрована контрольна сума додається до даних. Будь-хто може використовувати загальнодоступний маркер із вашого ключа, щоб розшифрувати контрольну суму і порівняти її з контрольною сумою, яку вони розраховували, щоб переконатися, що підписані дані не підроблені.

Докладніше про криптографію відкритого ключа можна прочитати на веб-сайті http://en.wikipedia.org/wiki/Public-key_cryptography .


4

Файл .snk - це зберігається версія вашого "ключа", вироблена утилітою sn у наборі утиліти Framework. Потім ви використовуєте цей файл для "цифрового підпису" своїх зборів. Це 2-частинний ключ .. комбінація приватно-публічного ключа. Публічна частина ключа публікується, тобто відома всім. Приватна частина відома лише вам, розробнику компонентів / додатків і має намір зберігатись таким чином.

Коли ви підписуєте свою асамблею, вона використовує приватний ключ та хеш-значення для вашої збірки для створення цифрового підпису, який вбудований у вашу збірку. Після цього кожен, хто завантажує вашу збірку, проходить етап перевірки. Відкритий ключ використовується для перевірки, якщо збірка дійсно походить від вас. Вам просто потрібен відкритий ключ для цього (який також вбудований в токенізовану форму в маніфесті збірки). Якщо збірка була підроблена, значення хешу було б іншим, а навантаження на збірку буде перервано. Це механізм безпеки.


3

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

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

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

У контексті сервера BizTalk, хто будує будь-які спеціальні збірки, які використовуються вашим рішенням BizTalk, потрібно буде використовувати файл .snk для підписання збірки, щоб сервер BizTalk міг завантажувати його в GAC та використовувати його.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.