Zeitstempeln von Authenticode-Signaturen

Microsoft Authenticode-Signaturen bieten Autoren- und Integritätsgarantien für Binärdaten. Der Authenticode-Zeitstempel basiert auf PKCS # 7-Standard-Gegensignaturen. Mit Signaturtools von Microsoft können Entwickler Zeitstempel gleichzeitig mit Authenticode-Signaturen anbringen. Mit dem Zeitstempel können Authenticode-Signaturen überprüfbar sein, auch nachdem die für die Signatur verwendeten Zertifikate abgelaufen sind.

Eine kurze Einführung in Authenticode

Authenticode wendet digitale Signaturtechnologie an, um die Erstellung und Integrität von Binärdaten wie installierbarer Software zu gewährleisten. Ein Clientwebbrowser oder andere Systemkomponenten können die Authenticode-Signaturen verwenden, um die Integrität der Daten zu überprüfen, wenn die Software heruntergeladen oder installiert wird. Authenticode-Signaturen können mit vielen Softwareformaten verwendet werden, einschließlich .cab, .exe, OCX und .dll.

Microsoft verwaltet eine Liste mit öffentlichen Zertifizierungsstellen (CAs). Aussteller von Authenticode-Zertifikaten sind derzeit SSL.com, Digicert, Sectigo(Comodo)und GlobalSign.

Informationen zum kryptografischen Zeitstempel

In der Vergangenheit wurde eine Vielzahl kryptografischer Zeitstempelmethoden vorgeschlagen. Weitere Informationen finden Sie z.B. unter Haber und Stornulator "How to Time-Stamp a Digital Document" im Journal of Cryptology (1991) und Benaloh and de Signature "One-Way Accumulators: A Decentralized Alternative to Digital Signatures" (How to Time-Stamp a Digital Document) im Journal of Cryptology (1991) und Benaloh and de Signature "One-Way Accumulators: A Decentralized Alternative to Digital Signatures" (One-Way-Akkumulatoren: Eine dezentralisierte Alternative zu digitalen Signaturen) in Springer-Notes Notes in Computer Science Vol. 765 (EUROCRYPT '93). Eine erweiterte Zusammenfassung dieses Artikels ist bei Microsoft Research verfügbar. (Diese Ressourcen sind in einigen Sprachen und Ländern oder Regionen möglicherweise nicht verfügbar.) Da die Zeit eine physische statt einer mathematischen Menge ist, betreffen diese Methoden im Allgemeinen, wie Objekte so verlinkt werden, dass ihre Reihenfolge der Erstellung bestimmt werden kann, oder wie Objekte effizient gruppieren, die alle als gleichzeitig erstellt beschrieben werden können.

Systeme, die die Authentifizierungszeit als Menge vortäugen, erfordern immer eine Form von Vertrauensstellung. In einer stark konversiellen Einstellung können komplexe Protokolle verwendet werden, um ein gewisses Maß an Synchronität sicherzustellen. Diese Protokolle erfordern jedoch eine umfassende Interaktion zwischen den betroffenen Parteien. In der Praxis kann die Quelle einfach als Notar fungieren, wenn nur eine Zeitzertifizierung von einer vertrauenswürdigen Quelle benötigt wird, indem eine signierte Anweisung (Zertifizierung) angegeben wird, dass das Objekt zum angegebenen Zeitpunkt zur Signatur präsentiert wurde.

Die unten implementierte Gegensignaturmethode des Zeitstempels ermöglicht die Überprüfung von Signaturen, auch nachdem das Signaturzertifikat abgelaufen oder widerrufen wurde. Mit dem Zeitstempel kann der Verifizierer zuverlässig wissen, zu welchem Zeitpunkt die Signatur angebracht wurde, und dadurch der Signatur vertrauen, wenn sie zu diesem Zeitpunkt gültig war. Der Zeitstempel sollte über eine zuverlässige und geschützte Zeitquelle verfügen.

SIGNIERTE PKCS # 7-Dokumente und Gegensignaturen

PKCS 7 ist ein Standardformat für kryptografische Daten, einschließlich signierter Daten, Zertifikate und Zertifikatsperrlisten # (Certificate Revocation Lists, CRLs). Der spezielle PKCS 7-Typ, der im Kontext des Zeitstempels von Interesse ist, sind signierte Daten, die dem von # PKCS 7 definierten # SignedData-Inhaltstyp entspricht.

Das PKCS 7-Paket besteht aus SignedData, die den tatsächlichen Inhalt und bestimmte Informationen darüber sowie # SignerInfo-Signaturblöcke identifiziert. SignerInfo kann selbst eine Gegensignatur enthalten, die rekursiv eine weitere SignerInfo ist. Im Prinzip kann eine Sequenz solcher Gegensignaturen vorhanden sein. Die Gegensignatur ist ein nicht authentifiziertes Attribut in Bezug auf die Signatur in SignerInfo. Das heißt, es kann nach der ursprünglichen Signatur angebracht werden. Im Umrissformular:

SignedData (PKCS # 7)

  • Version (von PKCS # 7, in der Regel Version 1)
  • DigestAlgorithms (Sammlung aller Algorithmen, die von SignerInfo-Signaturblöcken für die optimierte Verarbeitung verwendet werden)
  • ContentInfo (contentType entspricht SignedDataplus Inhalt oder Verweis auf Inhalt)
  • OPTIONALe Zertifikate (Sammlung aller verwendeten Zertifikate)
  • OPTIONALe CRLs (Sammlung aller CRLs)
  • SignerInfo-Signaturblöcke (die tatsächliche Signatur, die aus einem oder mehreren SignerInfo-Signaturblöcken besteht)

SignerInfo (signaturblock)

  • Version (von PKCS # 7, in der Regel Version 1)
  • Zertifikat (Aussteller und Seriennummer zur eindeutigen Identifizierung des Zertifikats des Signers in SignedData)
  • DigestAlgorithm plus DigestEncryptionAlgorithm plus Digest (Hash) plus EncryptedDigest (tatsächliche Signatur)
  • OPTIONAL AuthenticatedAttributes (z. B. von diesem Signator signiert)
  • OPTIONALe UnauthenticatedAttributes (z. B. nicht von diesem Signator signiert)

Ein Beispiel für ein authentifizierte Attribut ist die Signierungszeit (OID 1.2.840.113549.1.9.5), da sie Teil der Signatur des Zeitstempeldiensts ist. Ein Beispiel für ein nicht authentifizierte Attribut ist die Gegensignatur (OID 1.2.840.113549.1.9.6), da sie nach dem Signieren angebracht werden kann. In diesem Fall enthält SignerInfo selbst eine SignerInfo (die Gegensignatur).

Hinweis

Das -Objekt, das in der Gegensignatur signiert ist, ist die ursprüngliche Signatur (d. h. encryptedDigest der ursprünglichen SignerInfo).

SignTool und der Authenticode-Prozess

SignTool ist für Authenticode-Signatur- und Zeitstempel-Binärdaten verfügbar. Das Tool wird im Ordner \ Bin des Installationspfads des Microsoft Windows Software Development Kit (SDK) installiert.

Das Signieren und Das Zeitstempeln von Binärdaten ist mit SignTool relativ einfach. Der Herausgeber muss ein Codesignaturzertifikat von einer kommerziellen Codesignatur-Zertifizierungsstelle erhalten. Der Einfachheit halber veröffentlicht und aktualisiert Microsoft eine Liste öffentlicher Zertifizierungsstelle, einschließlich der Zertifizierungsstelle, die Authenticode-Zertifikate aushing. Wenn sie zur Veröffentlichung bereit sind, werden die Objektdateien mithilfe der entsprechenden Befehlszeilenparameter mit dem SignTool-Tool signiert und mit einem Zeitstempel versehen. Das Ergebnis eines SignTool-Vorgangs ist immer das PKCS # 7-Format SignedData.

SignTool akzeptiert als Eingabe entweder binäre Rohdaten, die signiert und mit Einem Zeitstempel versehen werden sollen, oder zuvor signierte Binärdaten, die mit einem Zeitstempel versehen werden sollen. Daten, die zuvor signiert wurden, können mithilfe des Befehls signtool timestamp mit einem Zeitstempel versehen werden.

Argument BESCHREIBUNG
/t HTTPAddress Gibt an, dass für die Datei ein Zeitstempel verwendet werden soll. Eine URL, die eine Adresse eines Zeitstempelservers angibt, muss angegeben werden. /t kann sowohl mit signtool sign- als auch mit signtool-Zeitstempelbefehlen verwendet werden.

Weitere Informationen zu Tools, die in diesem Kontext nützlich sein können, finden Sie unter Cryptography Tools and SignTool ( Kryptografietools und SignTool).

Implementierungsdetails und Wire Format

SignTool verwendet die Windows Authenticode-Implementierung, um Signaturen und Zeitstempel zu erstellen. Authenticode arbeitet mit Binärdateien, z. B. .cab, .exe, .dll oder OCX. Authenticode erstellt zuerst die Signatur und erzeugt einen PKCS # 7 SignedData-Wert. Diese SignedData-Daten müssen gegensigniert werden, wie in PKCS # 9 beschrieben.

Der Gegensignaturprozess erfolgt in vier Schritten:

  1. Kopieren Sie die Signatur (d. h. encryptedDigest) aus signerInfo von PKCS # 7 SignedData.
  2. Erstellen Sie eine Zeitstempelanforderung, deren Inhalt die ursprüngliche Signatur ist. Senden Sie diese an den Zeitstempelserver Abstract Syntax Notation One (ASN.1), der als TimeStampRequest codiert ist.
  3. Sie erhalten einen Zeitstempel, der als zweites PKCS 7 SignedData formatiert ist # und vom Zeitstempelserver zurückgegeben wird.
  4. Kopieren Sie SignerInfo direkt aus dem Zeitstempel in die ursprüngliche # PKCS 7 SignedData-Dateials PKCS 9-Gegensignatur (d. h. ein nicht authentifiziertes Attribut # in der SignerInfo des Originals).

Zeitstempelanforderung

Die Zeitstempelanforderung wird innerhalb einer HTTP 1.1 POST-Nachricht gesendet. Im HTTP-Header ist die CacheControl-Direktive auf no-cache und die Content-Type-Direktive auf application/octet-stream festgelegt. Der Text der HTTP-Nachricht ist eine Base64-Codierung Distinguished Encoding Rules (DER) der Zeitstempelanforderung.

Obwohl derzeit nicht verwendet, sollte die Content-Length-Direktive auch zum Erstellen der HTTP-Nachricht verwendet werden, da sie dem Zeitstempelserver dabei hilft, zu ermitteln, wo sich die Anforderung innerhalb des HTTP POST befindet.

Andere HTTP-Header können ebenfalls vorhanden sein und sollten ignoriert werden, wenn sie vom Angeber oder Zeitstempelserver nicht verstanden werden.

Die Zeitstempelanforderung ist eine ASN.1-codierte Nachricht. Das Format der Anforderung lautet wie folgt.

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

CountersignatureType ist der Objektbezeichner (Object Identifier, OID), der dies als Zeitstempel-Gegensignatur identifiziert und die genaue OID 1.3.6.1.4.1.311.3.2.1 sein sollte.

Derzeit sind keine Attribute in der Zeitstempelanforderung enthalten.

Der Inhalt ist eine ContentInfo gemäß PKCS # 7-Definition. Der Inhalt ist die zu signierten Daten. Für den Signaturzeitstempel sollte ContentType "Data" sein, und der Inhalt sollte die encryptedDigest (Signatur) aus signerInfo des PKCS 7-Inhalts sein, für den ein Zeitstempel # erstellt werden soll.

Zeitstempelantwort

Die Zeitstempelantwort wird auch innerhalb einer HTTP 1.1-Nachricht gesendet. Im HTTP-Header wird die Content-Type-Direktive ebenfalls auf application/octet-stream festgelegt. Der Text der HTTP-Nachricht ist eine Base64-Codierung der DER-Codierung der Zeitstempelantwort.

Die Zeitstempelantwort ist eine vom Zeitstempeler signierte PKCS # 7-Nachricht. Die ContentInfo der PKCS # 7-Nachricht ist identisch mit der ContentInfo, die im Zeitstempel empfangen wurde. Der PKCS 7-Inhalt enthält das authentifizierte Signaturzeitattribut # (definiert in PKCS # 99, OID 1.2.840.113549.9.5).

Nachdem Authenticode den Zeitstempel vom Server empfangen hat, integriert Authenticode den Zeitstempel in die ursprünglichen PKCS # 7 SignedData-Daten als Gegensignatur. Zu diesem Zweck wird die ContentInfo der zurückgegebenen PKCS # 7 SignedData verworfen, und die SignerInfo des zurückgegebenen Zeitstempels wird als Gegensignatur in die SignerInfo der ursprünglichen PKCS # 7 SignedData kopiert. Die Zertifikatkette des Zeitstempels wird auch in der ursprünglichen PKCS # 7 SignedData als nicht authentifiziertes Attribut des ursprünglichen Signaturgebers in Zertifikate kopiert.