2009-02-21 7 views
23

Co to jest "token klucza publicznego" i jak jest on obliczany przy użyciu mocnych nazw zespołów?Co to jest token klucza publicznego i jak jest on obliczany na podstawie silnych nazw zespołów?

+0

Zobacz również http: // stackoverf low.com/q/1321419/284795 –

+0

Klucz publiczny jest kluczem odpowiadającym kluczowi prywatnemu (który z kolei jest używany do podpisywania złożeń). Spójrz na [Silnie nazwane zespoły] (https://msdn.microsoft.com/en-us/library/wd40t7ad (v = vs.110) .aspx) – Lu55

Odpowiedz

16

Jeśli chodzi o pytanie "Jak to jest obliczane", jest to hasz SHA1.

Od dot net blog:

Microsoft rozwiązuje „klucza publicznego uwędzić” problem stosując skrót klucza publicznego silnie nazwie zgromadzenia w. Te skróty są nazywane kluczami kluczy publicznych i są to niskie 8 bajtów z skrótu SHA1 mocno nazwanego klucza publicznego zespołu . Skracania SHA1 to 160-bitowe (20-bajtowe) skróty, a górna 12 bajtów skrótu to po prostu odrzuconych w tym algorytmie.

0

Jest to bajt krzyżyka klucza użytego do podpisania zespołu.

Zamiast wymieniać setki cyfr szesnastkowych klucza, masz coś prostszego, ale wciąż z niewielkim ryzykiem kolizji.

+0

Właściwie jest to skrót z klucza, a nie ogon bajty. A prawdziwymi kluczami są dziesiątki bajtów, a nie setki. –

+0

Naprawiono skrót (dzięki). Domyślny klucz to 1024 lub 512 ugryzień, które wymagałyby 256 lub 128 cyfr szesnastkowych, czyli setek (tylko :-)). – Richard

3

Token klucza publicznego służy do identyfikacji organizacji w mocno nazwanym złożeniu. Te informacje są dodawane do metabazy zespołu. Zakładam, że Richard ma rację co do technicznego sposobu przechowywania.

Jeśli chcesz wyświetlić metabazę złożenia, użyj ILDASM. Możesz przejrzeć dane zapisane w metabazie i zobaczyć IL.

4

Od ECMA-335:

Deklaracja ta jest używana do przechowywania niskie 8 bajtów SHA-1 hash klucza publicznego zleceniodawcy w odniesieniu montażowej, zamiast pełnego klucza publicznego .
Odwołanie do zespołu może przechowywać pełny klucz publiczny lub 8-bajtowy "token klucza publicznego". Można go użyć do sprawdzenia, czy ten sam klucz prywatny, który został użyty do podpisania zespołu podczas kompilacji, również podpisał zespół używany pod adresem środowisko wykonawcze. Żadne z nich nie musi być obecne i chociaż oba mogą być przechowywane, nie jest to użyteczne.

[Uzasadnienie: Klucz publiczny lub klucz żeton publicznego przechowywane w odniesieniu montażowej służy do zapewnienia, że ​​zespół którego odwołuje a zespół faktycznie używane w czasie wykonywania zostały wyprodukowane przez podmiot posiadający tego samego klucza prywatnego, dlatego można założyć, że był przeznaczony do tego samego celu. Podczas gdy pełny klucz publiczny jest bezpieczniejszy pod względem kryptografu, wymaga więcej miejsca w pliku referencyjnym. Używanie tokena klucza publicznego powoduje zmniejszenie miejsca wymaganego do przechowywania odwołania, a jedynie nieznaczne osłabienie procesu sprawdzania poprawności. koniec uzasadnienie]

chodzi o sposób mieszania jest obliczana (zakładam, że może to być co prosisz, ponieważ klucz publiczny nie jest znak „analizowany”), z tej samej specyfikacji:

Metadane interfejsu CLI umożliwiają producentowi zespołu obliczenie skrótu kryptograficznego tego zestawu (przy użyciu funkcji mieszania SHA-1 z użyciem funkcji ), a następnie zaszyfrowanie go przy użyciu algorytmu RSA (patrz partycja I) i publicznej/prywatnej pary kluczy wyboru producenta. Wyniki tego ("podpis cyfrowy SHA-1/RSA") można następnie zapisać w metadanych (§25.3.3) wraz z publiczną częścią pary kluczy wymaganą przez algorytm RSA. Dyrektywa publickey służy do określenia klucza publicznego, który był używany do obliczenia podpisu. Aby obliczyć wartość mieszającą, podpis jest wyzerowany, obliczono skrót, a następnie wynik zostaje zapisany w podpisie.

Proces podpisywania silnej nazwy (SN) wykorzystuje standardowe algorytmy haszowania i szyfrowania dla silnego podpisywania nazw. Zostaje wygenerowany skrót mieszania SHA-1 nad większością pliku PE. Ta wartość hash jest podpisana RSA z kluczem prywatnym SN. Dla celów weryfikacji klucz publiczny jest przechowywany w pliku PE, a także podpisana wartość skrótu.
Oprócz następujących elementów wszystkie fragmenty pliku PE są mieszane: • Wpis podpisu Authenticode: pliki PE mogą być podpisane przy użyciu uwierzytelniania. Sygnatura authentode jest zawarta w 8-bajtowym wpisie w offsecie 128 katalogu danych nagłówka PE ("Tabela certyfikatów" w § 25.2.3.3) oraz zawartość pliku PE w zakresie określonym przez ten wpis w katalogu podanym w tym wpisie o numerze . [Uwaga: w zgodnym pliku PE ten wpis wynosi zero. nota końcowa] • The Strong Name Blob: 8-bajtowy wpis w offsecie 32 nagłówka CLI ("StrongNameSignature" w §25.3.3) oraz zawartość danych hashowych zawartych w tym RVA w pliku PE. Jeśli 8-bajtowy wpis ma wartość 0, nie ma powiązanego silnego podpisu nazwy. • Suma kontrolna nagłówka PE: 4-bajtowa pozycja w korekcji 64 nagłówka PE Windows NT-specyficzne Pola ("suma kontrolna pliku" w §25.2.3.2). [Uwaga: w zgodnym pliku PE ten wpis wynosi zero. koniec uwaga]

Możesz pobrać specyfikację tutaj za darmo: http://www.ecma-international.org/publications/standards/Ecma-335.htm

6

Jeśli trzeba wygenerować klucz żeton publicznego na podstawie pełnego klucza publicznego, ta mała statyczna metoda działa:

private static byte[] GetKeyTokenFromFullKey(byte[] fullKey) 
    { 
     SHA1CryptoServiceProvider csp = new SHA1CryptoServiceProvider(); 
     byte[] hash = csp.ComputeHash(fullKey); 
     byte[] token = new byte[8]; 
     for (int i = 0; i < 8; i++) 
      token[i] = hash[hash.Length - (i+1)]; 

     return token; 
    } 
10

można uzyskać TokenKluczaPublicznego z VS wiersza poleceń wpisując:

sn –T DLLName.dll 
+1

+1, (nowsza?) Składnia jest "sn -q -T nazwa_plik DLL". –

Powiązane problemy