Einführung
Codesignatur ist der Prozess, bei dem ein Softwareprogramm, das über das Internet verbreitet werden soll, mit einer digitalen Signatur versehen wird. Code Signing dient dazu, die Echtheit der Software, d. h. die Originalversion, zu überprüfen und sicherzustellen, dass der Code während der Übertragung nicht durch einen Angreifer manipuliert wurde, z. B. durch das Einfügen von Schadcode oder Malware. Die für das Code Signing verwendete digitale Signatur befindet sich in einem digitales Zertifikat das sogenannte Code Signing-Zertifikat.
Codesignaturzertifikate
Wie jedes andere digitale Zertifikat basieren Code-Signatur-Zertifikate auf dem X.509-Standard und müssen ebenfalls von einer vertrauenswürdigen Drittpartei signiert werden, beispielsweise einem Zertifizierungsstelle (CA). Code Signing-Zertifikate können jedoch nicht austauschbar mit anderen Zertifikaten verwendet werden, wie z. B. SSL Zertifikate. Der Hauptgrund dafür ist, dass gemäß der X.509-Spezifikation jedes digitale Zertifikat ein Feld „Schlüsselverwendung“ enthält, das den Verwendungszweck des Zertifikats angibt und bei der Zertifikatserstellung ausgefüllt wird. Zusätzliche Informationen zur Verwendung des Zertifikats können auch in der Erweiterung „Erweiterte Schlüsselverwendung“ enthalten sein. Die X.509-Spezifikation schreibt vor, dass ein Zertifikat nur für den vorgesehenen Zweck verwendet werden darf. Beispielsweise ist bei einem SSL-Zertifikat das Feld „Schlüsselverwendung“ auf „Digitale Signatur“ eingestellt, während bei einem Codesignatur-Zertifikat das Feld „Codesignatur“ eingestellt ist.
Während X.509 die Spezifikation für das Zertifikatsformat bereitstellt, variieren die Technologieimplementierungen zur Zertifikatsgenerierung je nach Anbieter. Authenticode beispielsweise ist eine Code-Signing-Technologie von Microsoft, die Entwicklern hilft, Anwendungen für das Windows-Betriebssystem zu signieren. Authenticode-Zertifikate werden zum Signieren von Dateien mit Erweiterungen wie .exe, .dll, .ocx, .cab und .xpi verwendet. Ebenso werden Apple-Code-Signing-Zertifikate zum Signieren von Anwendungen für iOS, Java-Code-Signing-Zertifikate zum Signieren von JAR-Dateien für die Java Runtime Environment (JRE) und Adobe AIR-Zertifikate zum Signieren von .air- oder .airi-Dateien verwendet.
Der Prozess zum Erhalt eines Code Signing-Zertifikats ähnelt dem anderer digitaler Zertifikate. Jede Organisation, die Software zur Verbreitung über das Internet veröffentlichen möchte, beantragt ein Code Signing-Zertifikat bei einer Zertifizierungsstelle (CA) und übermittelt dabei ihren öffentlichen Schlüssel und weitere Organisationsinformationen. Beachten Sie, dass das öffentlich-private Schlüsselpaar wie bei jedem digitalen Zertifikat separat generiert werden muss. Die CA validiert den Entwickler (die Organisation), der das Zertifikat beantragt, signiert das Zertifikat als Validierungsnachweis und stellt es dem Entwickler oder Softwareherausgeber aus. Das von der CA ausgestellte Zertifikat enthält Informationen wie die Identität des Herausgebers, den öffentlichen Schlüssel des Herausgebers, die Gültigkeitsdauer des Zertifikats, die digitale Signatur der CA und weitere Details.
Arten von Code Signing-Zertifikaten
Selbstsignierte Zertifikate:
Softwarehersteller können eigene selbstsignierte Zertifikate erstellen. In solchen Fällen wird jedoch bei der Signaturprüfung während der Softwareinstallation eine Warnung ausgegeben, dass die Software von einem unbekannten Hersteller stammt. Selbstsignierte Zertifikate können zum Testen und zur lokalen Entwicklung von Software verwendet werden, bevor diese allgemein zur öffentlichen Verteilung freigegeben wird. Selbstsignierte Zertifikate sollten jedoch nicht für Produktionssoftware verwendet werden, die an Endbenutzer verteilt wird.
Für die öffentliche Softwareverteilung sind von Zertifizierungsstellen ausgestellte Zertifikate die beste Option. Es gibt zwei Arten von von Zertifizierungsstellen ausgestellten Code-Signatur-Zertifikaten, die sich nach der Art der Validierung unterscheiden.
Standardvalidierungszertifikate:
Dies ist der Standardtyp des Code Signing-Zertifikats und beinhaltet grundlegende Validierungen des Herausgebers oder Entwicklers durch die Zertifizierungsstelle. Um ein Standard-Code Signing-Zertifikat zu erhalten, müssen Softwareherausgeber einige grundlegende Anforderungen erfüllen, wie z. B. Mindestschlüssellänge, maximale Gültigkeitsdauer und Zeitstempel für digitale Signaturen.
Extended Validation (EV)-Zertifikate:
EV-Code-Signing-Zertifikate beinhalten ein Höchstmaß an Validierung und Überprüfung des Softwareherausgebers durch die Zertifizierungsstelle und werden in der Regel auf einem Hardware-Token ausgestellt, um zusätzliche Sicherheit zu gewährleisten. Um ein EV-Zertifikat zu erhalten, müssen Softwareherausgeber neben den grundlegenden Anforderungen von Standardzertifikaten auch deutlich strengere Anforderungen erfüllen – beispielsweise die Aufbewahrung privater Schlüssel in einem Hardware-Sicherheitsmodul (HSM) das ist konform mit FIPS (Federal Information Processing Standards) 140 Level 2 oder gleichwertig.
Ablauf des Zertifikats und Zeitstempel
Wie jedes digitale Zertifikat verlieren auch Code-Signing-Zertifikate nach Ablauf ihrer Gültigkeitsdauer ihre Gültigkeit. Nach Ablauf ist die Signatur nicht mehr validiert, und die Software lässt sich möglicherweise nicht mehr ordnungsgemäß installieren oder ausführen, obwohl mit der Software selbst alles in Ordnung ist. Dieses Problem wird durch die Zeitstempelung gelöst, bei der der Code zum Zeitpunkt der Signierung der Datei mit einem Zeitstempel versehen wird. Dies geschieht in der Regel durch eine vertrauenswürdige dritte Partei, die sogenannte Time Stamp Authority (TSA), um die Gültigkeit und Authentizität des Zeitstempels zu bestätigen. Der Zeitstempel stellt sicher, dass die Software auch nach Ablauf des Code-Signing-Zertifikats weiterhin ausgeführt wird, sodass der Herausgeber Zeit hat, das Zertifikat zu erneuern.
Widerruf des Zertifikats
Wir haben in früheren Artikeln gesehen, dass die Stärke von Public-Key-Infrastruktur (PKI) Systeme hängen davon ab, wie die privaten Schlüssel verwaltet und gesichert werden. Wenn der private Schlüssel eines digitalen Zertifikats kompromittiert wird, muss das Zertifikat von der ausstellenden Zertifizierungsstelle für ungültig erklärt oder widerrufen werden. Der Widerruf eines Zertifikats ist im Falle eines Verstoßes von entscheidender Bedeutung: Er stellt sicher, dass Endbenutzer darauf hingewiesen werden, dass das Zertifikat nicht mehr vertrauenswürdig ist, und schreckt sie vom Herunterladen, Installieren und weiteren Verwenden der Software ab. Der Widerruf eines Zertifikats erfolgt durch die Aufnahme des widerrufenen Zertifikats in eine Zertifikatsperrliste (Certificate Revocation List, CRL) oder durch die Aktualisierung des Zertifikatsstatus mithilfe des Online Certificate Status Protocol (OCSP). Weitere Einzelheiten zu CRLs und OCSP werden in einem späteren Artikel behandelt.
