Do czego służy .snk?

153

Do czego służy plik .snk? Wiem, że to skrót od Strongly Named Key , ale wszystkie wyjaśnienia dotyczące tego, co to jest i jak działa, przechodzą przez moją głowę.

Czy istnieje proste wyjaśnienie, w jaki sposób używany jest klucz o silnej nazwie i jak działa?

oɔɯǝɹ
źródło

Odpowiedzi:

212

Plik .snk służy do stosowania silnej nazwy do zestawu .NET . na tak silną nazwę składa się

prosta nazwa tekstowa, numer wersji i informacje o kulturze (jeśli są podane) - plus klucz publiczny i podpis cyfrowy.

SNK zawiera unikalną parę kluczy - prywatny i publiczny klucz, którego można użyć, aby zapewnić, że masz unikalną silną nazwę dla zestawu. Gdy zestaw ma silną nazwę, z zawartości zestawu jest konstruowany „skrót”, który jest szyfrowany za pomocą klucza prywatnego. Następnie ten podpisany hash jest umieszczany w zestawie wraz z kluczem publicznym z pliku .snk.

Później, kiedy potrzebuje kogoś do sprawdzenia integralności zespół silnie nazwane, oni zbudować hash treści Zgromadzenia i użyj klucza publicznego z zespołu do rozszyfrowania skrótu, który przyszedł z zespołu - jeśli dwa hashe się zgadzają, weryfikacja montażu przechodzi.

Ważne jest, aby móc weryfikować zestawy w ten sposób, aby upewnić się, że nikt nie zamieni zestawu na złośliwy, który zniszczy całą aplikację. Dlatego zestawy o silnych nazwach nie są zaufane w taki sam sposób, jak zestawy o silnych nazwach, więc nie można ich umieszczać w GAC. Ponadto istnieje łańcuch zaufania - nie można wygenerować zestawu o silnej nazwie, który odwołuje się do zestawów o innych nazwach.

Artykuł „ Sekrety silnego nazewnictwa ”. Wykonuje świetną robotę, wyjaśniając bardziej szczegółowo te pojęcia. Ze zdjęciami.

Blair Conrad
źródło
2
Czy to oznacza, że ​​kiedy podpiszesz zestaw za pomocą .PFX, to faktycznie używa go do generowania .SNK w locie, kiedy tylko się kompiluje?
Patrick
5
@Patrick no, to jest Authenticode Signature, który, choć dowodzi również, że plik nie został zmodyfikowany między podpisaniem a sprawdzeniem, nie spełnia wymagań silnej nazwy. Problem polega na tym, że Authenticode nie wymaga łańcucha zaufania zestawów, które wymagają silnego nazewnictwa, dzięki czemu można Authenticode podpisać zestaw, który opiera się na zestawach o słabej nazwie / podpisanych.
Scott Chamberlain,
1
Możesz po prostu zdjąć snk i zastąpić go innym. Nie znam prawdziwego scenariusza, w którym jest przydatny .. to w zasadzie nasze kluczowe pary, na których nie możesz zbudować zaufania
Ibrahim
8
WayBackMachine link do The Secrets of Strong Name
asfeynman
Zaktualizuj link w odpowiedzi (na ten zasugerowany przez @asfeynman), ponieważ link jest martwy i nie wszyscy czytają komentarze.
XelaNimed
22

W świecie the.Net plik SNK jest używany do podpisywania skompilowanych plików binarnych. Pozwala to na kilka rzeczy:

  1. Możesz zarejestrować zestaw w GAC (Global Assembly Cache) . Zasadniczo, aby można było odwoływać się do niego z wielu miejsc na tym samym komputerze bez konieczności utrzymywania wielu kopii).
  2. Możesz używać swoich plików binarnych z poziomu innych plików binarnych, które są również podpisane (jest to dziwne wirusowe zachowanie w odniesieniu do podpisanych zestawów).
  3. Twój zespół nie może (łatwo) zostać zmodyfikowany przez osoby trzecie , które nie mają dostępu do pliku SNK, zapewniając przynajmniej niewielką ilość bezpieczeństwa.

Nie wiem, jak działa serwer BizTalk , więc nie sądzę, żebym mógł rzucić dużo światła na to, do jakiego konkretnego celu służą w tym środowisku.

Mam nadzieję, że to było trochę pomocne.

ckramer
źródło
7

Plik .snk służy do podpisywania zestawów, aby można było dodać je do Global Assembly Cache (GAC).

Plik .snk zawiera tokeny publiczne i prywatne dla Twojego klucza. Jeśli chcesz podpisać dane (lub dane binarne) tym kluczem, na danych obliczana jest suma kontrolna, która jest następnie szyfrowana za pomocą prywatnego tokena. Zaszyfrowana suma kontrolna jest następnie dodawana do danych. Każdy może użyć publicznego tokena z twojego klucza, aby odszyfrować sumę kontrolną i porównać ją z sumą kontrolną, którą obliczyli, aby sprawdzić, czy podpisane dane nie zostały naruszone.

Więcej informacji na temat kryptografii klucza publicznego można znaleźć pod adresem http://en.wikipedia.org/wiki/Public-key_cryptography .

Franci Penov
źródło
4

Plik .snk to utrwalona wersja Twojego „klucza” utworzona przez narzędzie sn w zestawie narzędzi platformy. Następnie używasz tego pliku do „podpisywania cyfrowego” swoich zestawów. Jest to dwuczęściowy klucz… kombinacja klucza prywatnego i publicznego. Publiczna część klucza jest publikowana, czyli znana każdemu. Część prywatna jest znana tylko Tobie, twórcy komponentu / aplikacji i powinna być zachowana.

Podczas podpisywania zestawu używa klucza prywatnego i wartości skrótu zestawu, aby utworzyć podpis cyfrowy, który jest osadzony w zestawie. Następnie każdy, kto ładuje Twój zespół, przechodzi przez etap weryfikacji. Klucz publiczny służy do sprawdzania, czy zestaw naprawdę pochodzi od Ciebie. Potrzebujesz tylko klucza publicznego (który jest również osadzony w formie tokenizowanej w manifeście zestawu). Jeśli dokonano ingerencji w zestaw, wartość skrótu byłaby inna i ładowanie zestawu zostałoby przerwane. To jest mechanizm bezpieczeństwa.

Gishu
źródło
3

Plik .snk jest używany w celu zapewnienia, że ​​ktoś inny nie może wsunąć własnego zestawu w miejsce twojego. Zapewnia parę kluczy szyfrowania / deszyfrowania.

Gdy plik .snk jest używany do podpisywania zestawu, wartość kodu skrótu jest obliczana na podstawie pliku zestawu i szyfrowana przy użyciu klucza prywatnego. To zaszyfrowane „streszczenie” jest następnie dołączane do zestawu wraz z kluczem publicznym z pliku .snk.

Następnie, gdy ktoś otrzyma Twój zestaw, może również obliczyć wartość kodu skrótu. Używają klucza publicznego do odszyfrowania tego, który obliczyłeś, i porównania obliczonych wartości. Jeśli zestaw został w ogóle zmieniony, wartości te będą inne, a użytkownik zestawu będzie wiedział, że zestaw, który masz, nie jest tym, który podałeś.

W kontekście BizTalk Server, ktokolwiek buduje niestandardowe zestawy używane przez rozwiązanie BizTalk, będzie musiał użyć pliku .snk do podpisania zestawu, aby serwer BizTalk mógł go załadować do GAC i używać.

Michael Lang
źródło