Code Signung Zertifikate sind seit vielen Jahren in Verwendung, um die Authentizität von Software und Treibern zu bestätigen. Die jährlichen Preise für diesen speziellen Zertifikatstyp liegen zwischen rd. 280€ von internationalen Anbietern und rd. 350–360€ bei Anbietern aus dem deutschsprachigen Raum.
In der Vergangenheit reichten oft auch Standard Code Signing Zertifikate für die Erstellung von Software aus, jedoch hat Microsoft die Richtlinien verschärft und setzt für einige Services nun Extended Validation (EV) Zertifikate voraus. Zu diesen Diensten zählen Local Security Authority (LSA) Plug-Ins oder Treiber und UEFI Module. Zusätzlich erkennt auch der Microsoft’s SmartScreen® Application Filter EV signierte Anwendungen und bringt die für Softwarelieferanten lästige Schutzmeldung “Windows protected your PC” bzw. “Der Computer wurde durch Windows geschützt.” nicht mehr.
Extended Validation nur auf Krypto-Hardware
Speziell die Extended Validation (EV) Zertifikate werden nun nur mehr auf Krypto-Hardware ausgeliefert, wobei der Kunde entscheiden kann, ob er das Code Siging Zertifikat in einem USB-Token geliefert haben möchte, oder das Schlüsselmaterial in einem Hardware Security Modul (HSM) erstellt und vom akkreditierten Zertifizierungsdiensteanbieter unterschrieben wird. Der hohe Schutz der Schlüssel in Krypto-Hardware schützt Softwareunternehmen nachhaltig vor dem Diebstahl der Code Signung Schlüssel durch Dritte, da der private Schlüssel weder vom USB-Token noch vom HSM exportiert werden kann.
Kleinere Umgebungen können mit dem USB-Token sicherlich gut arbeiten, bei der Code Signatur muss dieser USB-Token direkt mit dem Build-Server verbunden werden und zur rechten Zeit muss der PIN des USB-Token eingegeben werden.
Internationale Entwicklerteams oder große, abteilungsübergreifende Entwicklungen können mit einem einfachen USB-Schlüssel in der Regel nicht arbeiten. Der administrative Aufwand den Token immer zur rechten Zeit an der richtigen Stelle zu haben ist zu groß. Hier empfiehlt sich zur Software Signatur der Einsatz eines Hardware Security Moduls (HSM), entweder per USB-Schnittstelle oder USB-Port-Server verbunden mit den Build-Servern, oder für größere Umgebungen als zentralisierten Netzwerk-Infrastruktur.
Schlüsselspeicherung nur am Hardware Security Modul (HSM)
Hier das Beispiel eines typischen Certificate Signing Requests (CSR) für ein Code Signing Zertifikat:
—–BEGIN CERTIFICATE REQUEST—–
MIIC6zCCAdMCAQAwgaUxCzAJBgNVBAYTAkFUMRYwFAYDVQQIDA1VcHBlciBBdXN0
cmlhMQ0wCwYDVQQHDARMaW56MR4wHAYDVQQKDBVjcHNkIGl0IHNlcnZpY2VzIEdt
YkgxEjAQBgNVBAsMCUNyeXB0b1BybzEeMBwGA1UEAwwVY3BzZCBpdCBzZXJ2aWNl
cyBHbWJIMRswGQYJKoZIhvcNAQkBFgxpbmZvQGNwc2QuYXQwggEiMA0GCSqGSIb3
DQEBAQUAA4IBDwAwggEKAoIBAQDVZlx1IUZYE/6VSnzcGQPILmS5wNw59JrRmlA6
wuHoug8Ag1rNcdWJ+5CvksTw8g5nAaRulWbQA1Nd46/aVyvFni8Eaa2yJh13Vm5M
80rBq5AxlmJ91XAeVy6glyN9j3ZIcX/2TwGYPwUGEDq3lM6UPgBg3tmV8CZDWqVn
Zm05S1q00W0L5N7vlGYiRDLnPQvjchg9kpDZYG7xzuK0C3qCieIJcFoTfMRQS9g3
trZ4qdGmHNRBzNBUIHC00jY51JsEKfvPe1RogFZ5PHvuTjztKqXPG3SCU0UaaydP
j7Ib8HwJEilWBw8uhOxqqIg6WcBHxlFukND0Ip4WjLj4HmNFAgMBAAGgADANBgkq
hkiG9w0BAQsFAAOCAQEAmBCouUifwV/kJQxWax86sBsV2EgxSXk4hTplgOrhCwez
nLaPRx2wqsqTTQ1Q+zYzl8YMLHHdWJk3QYaGd3PHmvZdV1MaSHdWybJGdfcf4bpB
0Hl0bNzI5ElTzw22vY7MhKrHzlzna9Y3bxgkDsg26ZLLq1XvWryDg/R3f/4Q9sCc
ALlsIpif1QeeHFZrMtEPh4A0RcP+nd6isNSvGXs98gP1qWsUDhrbipADu6fvvLHx
dI/l7OBFXbNZYu2Txbz8bmhEsRv6Pg5QDXCl9cae5X+kiE1dagGL9T+z4WVYERLa
skpySr+oGcKfVtxxi5EgKoAxdweZZjqAzmuI2gRplA==
—–END CERTIFICATE REQUEST—–
Der private Schlüssel des Certificate Signing Requests muss direkt am HSM erstellt werden und bleibt natürlich privat. In dem CSR verbirgt sich jedoch der öffentliche Schlüssel (public Key) des Schlüsselpaares. Dieser Antrag wird vom akkreditierten Zertifizierungsdiensteanbieter nach Überprüfung des Antragstellers signiert.
Über die diversen Schnittstellen des HSM, beispielsweise PKCS#11, OpenSSL, Java (JCE), Microsoft CAPI und CNG, kann das Code Signing Zertifikat auf unterschiedlichen Linux und Windows Software-Entwicklungssystemen genutzt werden. Es ist jedoch erforderlich, dass die HSM Middleware auf den Build-Servern installiert ist. Die Performance des HSM spielt bei diesem Anwendungsfall keine Rolle, da bei jedem Software-Build nur sehr wenige Signaturprozesse am HSM durchgeführt werden.
“Die Performance des HSM spielt bei diesem Anwendungsfall keine Rolle, da bei jedem Software-Build nur sehr wenige Signaturprozesse am HSM durchgeführt werden.”
Das ist schlicht falsch! Bei entsprechenden Projekten werden viele Daten signiert. Dauert ein Build-Prozess mit reiner Software-Lösung nur Sekunden pro Datei kommt der Hardware-Unfug auf Minuten. Womit ein Build-Prozess von Minuten Laufzeit in den Bereich von Stunden kommt, nur weil HSM oder Token langsam sind.
Vielen Dank für den Erfahrungsaustausch!
Da reine Software Zertifikate zu leicht gestohlen werden können, wird man in Zukunft immer mehr Schlüssel in Hardware (in Crypto-Token oder HSMs) fordern.
Warum werden in den referenzierten Projekten so viele Daten signiert und gibt es heute nicht schon zumind. von Microsoft eine Compliance-Anforderung nach Hardware-Signatur?
Sichere Grüße, Andreas Schuster