Udostępnij za pośrednictwem


Sygnatury uwierzytelnienia czasowego

Podpisy Firmy Microsoft Authenticode zapewniają gwarancje tworzenia i integralności danych binarnych. Sygnatura czasowa Authenticode jest oparta na standardowych kontrapisach PKCS #7. Narzędzia podpisywania od firmy Microsoft umożliwiają deweloperom umieszczanie sygnatur czasowych w tym samym czasie, gdy umieszczają podpisy Authenticode. Sygnatury czasowe umożliwiają weryfikowanie podpisów Authenticode nawet po wygaśnięciu certyfikatów używanych do podpisu.

Krótkie wprowadzenie do aplikacji Authenticode

Authenticode stosuje technologię podpisu cyfrowego, aby zagwarantować tworzenie i integralność danych binarnych, takich jak oprogramowanie instalowane. Przeglądarka internetowa klienta lub inne składniki systemu może użyć podpisów Authenticode, aby zweryfikować integralność danych podczas pobierania lub instalowania oprogramowania. Podpisy Authenticode mogą być używane z wieloma formatami oprogramowania, w tym .cab, .exe, ocx i .dll.

Firma Microsoft utrzymuje listę publicznych urzędów certyfikacji (CA). Wystawcy certyfikatów Authenticode obejmują obecnie SSL.com, Digicert, Sectigo(Comodo)i GlobalSign.

Informacje o kryptograficznych sygnaturach czasowych

W przeszłości zaproponowano różne kryptograficzne metody sygnatur czasowych. Zobacz na przykład Haber i Stornetta "How to Time-Stamp a Digital Document" (Jak Time-Stamp dokument cyfrowy) w Journal of Cryptology (1991) i Benaloh and de Mare "One-Way akumulatory: Zdecentralizowana alternatywa dla podpisów cyfrowych" w Springer-Verlag Noty wykładowe w vol. 765 (EUROCRYPT '93). Rozszerzona abstrakcja tego artykułu jest dostępna w witrynie Microsoft Research. (Te zasoby mogą nie być dostępne w niektórych językach i regionach). Ponieważ czas jest fizyczny, a nie matematyczny, ilość, te metody zwykle dotyczą sposobu łączenia obiektów, aby można było określić ich kolejność tworzenia lub jak efektywnie grupować obiekty, które mogą być opisane jako tworzone współbieżnie.

Systemy, które rzekomo uwierzytelniają czas jako ilość, zawsze wymagają jakiejś formy zaufania. W przypadku silnie niepożądanego ustawienia złożone protokoły mogą służyć do zapewnienia pewnego stopnia synchronizacji. Jednak te protokoły wymagają rozległej interakcji między stronami, których dotyczy problem. W praktyce, jeśli jeden wymaga tylko certyfikacji czasu z zaufanego źródła, źródło może po prostu działać jako notariusz, podając podpisane oświadczenie (certyfikat), że obiekt został przedstawiony do podpisu w określonym czasie.

Metoda sygnatury czasowej zaimplementowana poniżej umożliwia zweryfikowanie podpisów nawet po wygaśnięciu lub odwołaniu certyfikatu podpisywania. Sygnatura czasowa pozwala weryfikatorowi niezawodnie znać czas umieszczania podpisu, a tym samym ufać podpisowi, jeśli był prawidłowy w tym czasie. Sygnatura czasowa powinna mieć niezawodne i chronione źródło czasu.

PKCS #7 Podpisane dokumenty i kontrapisy

PKCS #7 to standardowy format danych kryptograficznych, w tym podpisanych danych, certyfikatów i list odwołania certyfikatów (CRL). Konkretny typ PKCS #7 w kontekście sygnatury czasowej to podpisane dane odpowiadające typowi zawartości PKCS #7 zdefiniowanemu SignedData.

Pakiet PKCS #7 składa się z SignedData, który identyfikuje rzeczywistą zawartość i niektóre informacje o nim oraz bloki podpisów SignerInfo. Element SignerInfo może zawierać kontrapis, który rekursywnie jest kolejnym elementem SignerInfo. W zasadzie może istnieć sekwencja takich kontrapisów. Kontrasignature jest nieuwierzytelniony atrybut w odniesieniu do podpisu w SignerInfo; oznacza to, że może zostać umieszczony po pierwotnym podpisie. W formularzu konspektu:

SignedData (PKCS #7)

  • Wersja (PKCS #7, ogólnie wersja 1)
  • DigestAlgorithms (kolekcja wszystkich algorytmów używanych przez bloki sygnatur SignerInfo do zoptymalizowanego przetwarzania)
  • ContentInfo (contentType równa się SignedData, a także zawartość lub odwołanie do zawartości)
  • OPCJONALNE certyfikaty (kolekcja wszystkich używanych certyfikatów)
  • OPCJONALNE listy CRL (kolekcja wszystkich list CRL)
  • Bloki podpisów SignerInfo (rzeczywisty podpis składający się z co najmniej jednego bloku podpisu SignerInfo)

SignerInfo (blok podpisu)

  • Wersja (PKCS #7, ogólnie wersja 1)
  • Certyfikat (wystawca i numer seryjny w celu unikatowego zidentyfikowania certyfikatu dostawcy podpisów w SignedData)
  • DigestAlgorithm plus DigestEncryptionAlgorithm plus skrót (skrót), plus EncryptedDigest (rzeczywisty podpis)
  • OPCJONALNE uwierzytelnionebuty (na przykład podpisane przez tego sygnatariusza)
  • OPCJONALNE nieuwierzytelnione atrybutyAttributes (na przykład nie podpisane przez tego sygnatariusza)

Przykładem uwierzytelnionego atrybutu jest czas podpisywania (OID 1.2.840.113549.1.9.5), ponieważ jest częścią tego, co oznacza usługa sygnatury czasowej. Przykładem nieuwierzytelnionego atrybutu jest kontraprzypisek (OID 1.2.840.113549.1.9.6), ponieważ można go umieścić po podpisaniu. W takim przypadku sam element SignerInfo zawiera wartość SignerInfo (countersignature).

Nuta

Obiekt, który jest zalogowany w kontrapisie, jest oryginalnym podpisem (czyli EncryptedDigest oryginalnego SignerInfo).

 

SignTool i proces Authenticode

SignTool jest dostępny dla danych binarnych podpisywania i sygnatury czasowej authenticode. Narzędzie jest instalowane w folderze \Bin ścieżki instalacji zestawu Microsoft Windows Software Development Kit (SDK).

Podpisywanie i oznaczanie czasu danych binarnych jest stosunkowo proste przy użyciu narzędzia SignTool. Wydawca musi uzyskać certyfikat podpisywania kodu z komercyjnego urzędu certyfikacji podpisywania kodu. Dla wygody firma Microsoft publikuje i aktualizuje listę publicznych urzędów certyfikacji, w tym te, które wystawiają certyfikaty Authenticode. Gdy wszystko będzie gotowe do opublikowania, pliki obiektów są podpisane i oznaczone sygnaturą czasową przy użyciu odpowiednich parametrów wiersza polecenia za pomocą narzędzia SignTool. Wynikiem każdej operacji SignTool jest zawsze format PKCS #7 SignedData.

Narzędzie SignTool akceptuje jako dane wejściowe nieprzetworzone dane binarne do podpisania i sygnatury czasowej lub wcześniej podpisane dane binarne, które mają być oznaczone sygnaturą czasową. Dane, które wcześniej zostały podpisane, można oznaczyć sygnaturą czasową za pomocą sygnatury czasowej narzędzia signtool polecenia.

Argument Opis
/tHTTPAddress Wskazuje, że plik ma być sygnaturą czasową. Należy podać adres URL określający adres serwera sygnatur czasowych. /t można używać zarówno z signtool signtool, jak i sygnatury czasowej narzędzia signtool.

 

Aby uzyskać więcej informacji na temat narzędzi, które mogą być przydatne w tym kontekście, zobacz narzędzia kryptograficzne i narzędzia SignTool.

Szczegóły implementacji i format przewodu

SignTool opiera się na implementacji Windows Authenticode do tworzenia i sygnatur czasowych. Authenticode działa na plikach binarnych, na przykład .cab, .exe, .dlllub .ocx. Authenticode najpierw tworzy podpis, tworząc PKCS #7 SignedData. Jest to signedData, które muszą być kontrapisane, zgodnie z opisem w PKCS #9.

Proces kontrapisu odbywa się w czterech krokach:

  1. Skopiuj podpis (czyli zaszyfrowanydigest) z signerInfo PKCS #7 SignedData.
  2. Skonstruuj żądanie sygnatury czasowej, którego zawartość jest oryginalną sygnaturą. Wyślij go do serwera sygnatury czasowej notacji abstrakcyjnej one (ASN.1) zakodowane jako TimeStampRequest.
  3. Odbierz sygnaturę czasową sformatowaną jako drugi plik PKCS #7 SignedData, zwrócony z serwera sygnatury czasowej.
  4. Skopiuj signerInfo z sygnatury czasowej bezpośrednio do oryginalnego PKCS #7 SignedData, jako kontrasignature PKCS #9 (czyli nieuwierzytelniony atrybut w SignerInfo oryginału).

Żądanie sygnatury czasowej

Żądanie sygnatury czasowej jest wysyłane w wiadomości HTTP 1.1 POST. W nagłówku HTTP dyrektywa CacheControl jest ustawiona na wartość no-cache, a dyrektywa Content-Type jest ustawiona na wartość application/octet-stream. Treść komunikatu HTTP jest kodowaniem base64 wyróżniających się reguł kodowania (DER) żądania sygnatury czasowej.

Chociaż nie jest obecnie używana, dyrektywa Content-Length powinna być również używana w konstruowaniu komunikatu HTTP, ponieważ pomaga on serwerowi sygnatury czasowej zlokalizować miejsce, w którym żądanie znajduje się w żądaniu HTTP POST.

Inne nagłówki HTTP mogą być również obecne i powinny być ignorowane, jeśli nie są one zrozumiałe przez obiekt żądającego lub serwer sygnatury czasowej.

Żądanie sygnatury czasowej jest zakodowanym komunikatem ASN.1. Format żądania jest następujący.

TimeStampRequest ::= SEQUENCE {
   countersignatureType OBJECT IDENTIFIER,
   attributes Attributes OPTIONAL, 
   content  ContentInfo
}

CountersignatureType jest identyfikatorem obiektu (OID), który identyfikuje to jako sygnaturę czasową kontrapis i powinien być dokładnym identyfikatorem OID 1.3.6.1.4.1.311.3.3.2.1.

Żadne atrybuty nie są obecnie uwzględniane w żądaniu sygnatury czasowej.

Zawartość jest elementem ContentInfo zdefiniowanym przez PKCS #7. Zawartość to dane do podpisania. W przypadku sygnatury czasowej właściwość ContentType powinna mieć wartość Dane, a zawartość powinna być zaszyfrowanaDigest (podpis) z informacji SignerInfo zawartości PKCS #7, która ma być oznaczona sygnaturą czasową.

Odpowiedź sygnatury czasowej

Odpowiedź sygnatury czasowej jest również wysyłana w komunikacie HTTP 1.1. W nagłówku HTTP dyrektywa Content-Type jest również ustawiona na wartość application/octet-stream. Treść komunikatu HTTP jest kodowaniem base64 kodowania DER odpowiedzi sygnatury czasowej.

Odpowiedź sygnatury czasowej to komunikat PKCS #7 podpisany przez sygnaturę czasową. Właściwość ContentInfo komunikatu PKCS #7 jest identyczna z informacją ContentInfo odebraną w sygnaturze czasowej. Zawartość PKCS #7 zawiera uwierzytelniony atrybut czasu podpisywania (zdefiniowany w PKCS #99, OID 1.2.840.113549.9.5).

Po odebraniu sygnatury czasowej z serwera aplikacja Authenticode dołącza sygnaturę czasową do oryginalnego PKCS #7 SignedData jako kontrapis. Aby to osiągnąć, element ContentInfo zwróconego PKCS #7 SignedData jest odrzucany, a informacje signerinfo zwróconej sygnatury czasowej są kopiowane jako kontrasignature do signerInfo oryginalnego PKCS #7 SignedData. Łańcuch certyfikatów sygnatury czasowej jest również kopiowany do certyfikatów w oryginalnym PKCS #7 SignedData jako nieuwierzytelniony atrybut oryginalnego podpisu.