Kategorien: KEYnote
Vorteile von Zertifikaten
Bei einer asymmetrischen Signatur wird ein Fingerabdruck mit dem privaten Schlüssel unterschrieben. Mit dem öffentlichen Schlüssel des Unterschreibenden kann jeder überprüfen, dass die Signatur gültig ist und zum Fingerabdruck passt. Doch woher kennt der Überprüfende den öffentlichen Schlüssel des Unterschreibenden? Und woher weiß er, dass dieser auch wirklich echt ist? Vor allem, wenn es mehrere Personen mit individuellen Schlüsselpaaren gibt, die unterschreiben dürfen, ist dies eine Herausforderung, die mit Zertifikaten gemeistert werden kann.
Was ist ein Zertifikat?
Stellen Sie sich vor, Ihre Firma möchte zukünftig E-Mails signieren. Damit erreichen Sie, dass Ihre Geschäftspartner sicher sein können, dass eine E-Mail wirklich von Ihnen gekommen ist und nicht verändert wurde. Dazu erhält jeder Ihrer Kollegen ein Schlüsselpaar. Doch wie verteilt man die öffentlichen Schlüssel aller Mitarbeiter an alle Geschäftspartner? Dies ist praktisch unmöglich. Deshalb wird der öffentliche Schlüssel zusammen mit den Daten des Mitarbeiters, dem der öffentliche Schlüssel gehört, von einer zentralen Stelle unterschrieben. In diesem Fall sind die Daten die E-Mail-Adresse und der Name des Mitarbeiters. Das unterschriebene elektronische Dokument, welches den öffentlichen Schlüssel des Mitarbeiters und seine Daten enthält, nennt man Zertifikat. Jeder Mitarbeiter, der eine E-Mail verschickt, unterschreibt die E-Mail mit seinem privaten Schlüssel und hängt sein Zertifikat an. Ihr Geschäftspartner benötigt nun lediglich den öffentlichen Schlüssel der zentralen Stelle. Damit kann er jedes von Ihnen erstellte Zertifikat prüfen und mit dem öffentlichen Schlüssel im Zertifikat die E-Mail des Mitarbeiters.
Zertifikate können eine ganze Kette von Zertifikaten enthalten. So kann zum Beispiel von einer dritten Partei der öffentliche Schlüssel Ihrer zentralen Stelle durch ein Zertifikat beglaubigt werden. Die Zertifikate der Mitarbeiter enthalten dann in der Regel die komplette Kette von Zertifikaten.
Certificate Authority (Zertifizierungsstelle)
Es gibt Firmen, die sich auf die Ausgabe von Zertifikaten spezialisiert haben. Zu den aktuell führenden Anbietern gehören Symantec, Comodo, Go Daddy und GlobalSign. Sogenannte Wurzelzertifikate, die den öffentlichen Schlüssel dieser Anbieter enthalten, werden bereits mit aktuellen Betriebs-
systemen ausgeliefert. Die entsprechenden Zertifizierungsstellen bezeichnet man als vertrauenswürdige Zertifizierungsstellen. Alle Zertifikate, die von vertrauenswürdigen Zertifizierungsstellen ausgestellt wurden, können sofort überprüft werden.
Einer vertrauenswürdigen Zertifizierungsstelle fällt damit die Verpflichtung zu, die Personen und Organisationen, denen sie Zertifikate ausstellen, genau zu überprüfen. Eine der Methoden zur Überprüfung ist zum Beispiel der Rückruf beim Geschäftsführer der anfragenden Firma über eine im Telefonbuch recherchierte Telefonnummer.
Format eines Zertifikates
Prinzipiell kann ein Zertifikat ein beliebiges Format haben. Im Internet werden in der Regel X.509-Zertifikate verwendet. Ein X.509-Zertifikat wird beispielsweise an eine E-Mail-Adresse oder einen DNS-Namen gebunden. Ein Erweiterungs-Feld des X.509-Zertifikats enthält den Verwendungszweck (KeyUsage). Damit kann überprüft werden, ob das Zertifikat überhaupt für einen entsprechenden Zweck eingesetzt werden darf. So muss zum Beispiel ein Wurzelzertifikat die Berechtigung „Certificate Sign“ besitzen.
Zum Schutz von Software gegen Manipulationen verwendet Wibu-Systems ein eigenes proprietäres und kompaktes Format für Zertifikate. Der Grund dafür ist, dass X.509 sowohl viele Ressourcen benötigt als auch langsam ist. Zwei Dinge, die gerade auf kleinen Embedded Devices nicht vorhanden sind. Auch werden zusätzliche Informationen benötigt, die in X.509 nicht definiert sind. Im Grundprinzip sind der Aufbau und die Sicherheit des Wibu-Systems-eigenen Formates vergleichbar mit einem X.509-Zertifikat.
CodeMeter kann auch Standard-X.509-Zertifikate speichern und ist somit kompatibel mit allen standardkonformen Anwendungen. Es wird lediglich eine PKI Middleware (CSSI) benötigt, die CodeMeter mit den Standardschnittstellen (PKCS#11 / Microsoft CSP) verbindet.
Zertifikate sind nicht an bestimmte Verschlüsselungsalgorithmen gebunden. Als Fingerabdruck können beispielsweise MD5, SHA1 oder SHA256 verwendet werden, als Signaturalgorithmus RSA oder ECDSA.
Zertifikate und der private Schlüssel
Nicht selten findet man den Satz „Dann unterschreibt man dies mit seinem Zertifikat“. Genaugenommen ist dies falsch. Man unterschreibt mit seinem privaten Schlüssel und legt seinen mit einem Zertifikat beglaubigten öffentlichen Schlüssel bei. Der private Schlüssel ist kein Bestandteil des Zertifikats. Allerdings gibt es Dateiformate, bei denen ein Zertifikat und der zugehörige private Schlüssel in einer Datei transportiert werden.
CodeMeter bietet die Möglichkeit, einen privaten Schlüssel sicher in einem -CmContainer zu speichern. Der private Schlüssel bleibt im CmContainer. Der zu unterschreibende Fingerabdruck wird per CodeMeter-API an den CmContainer geschickt und dort signiert. Im Falle eines CmDongles erfolgt dies im SmartCard-Chip des Dongles. Im Falle einer softwarebasierten CmActLicense erfolgt dies in der CodeMeter Runtime, die als Dienst oder Dämon läuft und gegen Auslesen von Daten und Debuggen entsprechend geschützt ist. Das Zertifikat kann entweder im CmContainer selber, in einem auslesbaren Teil oder als Datei auf dem PC gespeichert werden.
Was passiert, wenn ich ein Zertifikat verliere?
Wenn man ein Zertifikat verliert, dann passiert gar nichts, da in einem Zertifikat keine geheimen Informationen stehen. Aber es kann fatale Folgen haben, wenn man den privaten Schlüssel zu einem Zertifikat verliert oder wenn jemand diesen Schlüssel unberechtigt in die Hände bekommt. Dann kann diese Person in meinem Namen Dinge unterschreiben und das entsprechende Zertifikat verwenden, um meinen öffentlichen Schlüssel zu beglaubigen.
Dies ist einer der Gründe, warum Stuxnet sein Ziel erreicht hat. Softwareanbieter unterschreiben ihre Software, vor allem Treiber, mit ihrem privaten Schlüssel. Durch ein Zertifikat wird von einer vertrauenswürdigen Zertifizierungsstelle der öffentliche Schlüssel bestätigt. Virenscanner arbeiten anhand eines Punktesystems. Software, die von einem bekannten Hersteller unterschrieben wurde, erhält Bonuspunkte. Bei Stuxnet wurden die privaten Schlüssel von zwei namhaften Anbietern von Treibern gestohlen und der Virus damit unterschrieben. Dies hat dazu geführt, dass der Virus von den Antivirenprogrammen nicht erkannt wurde und sich somit stillschweigend und weit verbreiten konnte.
Für einen solchen Fall gibt es Zertifikatssperrlisten (Certificate Revocation List – CRL). Eine Sperrliste enthält die Seriennummern der gesperrten Zertifikate. Darüber ist ein Zertifikat eindeutig identifizierbar. Sperrlisten sind ebenfalls unterschrieben, um ihre Integrität zu gewährleisten.
Sowohl Zertifikate als auch Sperrlisten haben ein Ablaufdatum, bis wann sie gültig sind. Daher müssen Zertifikate und Sperrlisten regelmäßig aktualisiert werden. Bei einem PC mit Internetverbindung ist dies kein -
Problem – anders ist es bei einem Embedded Device, welches offline für viele Jahre eine Anlage steuern soll. Hier ist im Einzelfall abzuwägen, wie lang ein Zertifikat gültig sein soll. Eine wegen Zertifikatsablaufs stillstehende Brause-Fabrik produziert lediglich keinen Gewinn, während ein Hochofen in solch einer Situation erkaltet und unbrauchbar wird.
Wie erhält man ein Zertifikat?
Prinzipiell gibt es hierfür zwei Wege. Der klassische Weg ist, dass man sich selbst ein Schlüsselpaar erzeugt. Bei CodeMeter ist dies wahlweise über die CSSI Middleware (RSA-Schlüsselpaar) oder das CodeMeter-API (RSA- oder ECC-Schlüsselpaar) möglich. Im Falle eines CmDongles und eines ECC-Schlüsselpaars kann der interne Zufallszahlengenerator des SmartCard-Chips verwendet werden. Der private Schlüssel wird dann im CmDongle erzeugt und verlässt diesen CmDongle nie. Der öffentliche Schlüssel kann per CodeMeter-API berechnet werden.
Im zweiten Schritt wird ein Zertifikats-Antrag (Certificate Signing Request – CSR) erstellt. Dieser enthält bereits Daten wie Inhaber und den öffentlichen Schlüssel. Der CSR wird an die Stelle geschickt, welche die Zertifikate erstellt.
Mit dem privaten Schlüssel der Zertifizierungsstelle wird nun ein Zertifikat erzeugt. Dabei werden in der Regel die Daten aus dem CSR übernommen und überprüft. Prinzipiell ist es möglich, weitere Daten und Felder hinzuzufügen. Falls die Zertifizierungsstelle keine Wurzelzertifizierungsstelle ist, wird das Zertifikat der Zertifizierungsstelle ins Zertifikat eingebunden.
Das so erzeugte Zertifikat wird an den Antragsteller zurückgeschickt und dort gespeichert.
Da dieses Verfahren in der Praxis oft zu umständlich ist, verwendet man häufig die folgende Alternative: Die Zertifizierungsstelle erzeugt das Schlüsselpaar, außerdem das Zertifikat und schickt Zertifikat und privaten Schlüssel an den Inhaber des Zertifikats. Dieses Verfahren hat zwei große Nachteile:
Zwei Parteien kennen den privaten Schlüssel: der Inhaber des Zertifikats und die Zertifizierungsstelle. Wie schwer dieser Nachteil wiegt, hängt vom Anwendungsfall und dem Bedrohungsszenario ab. Für den Betreiber einer Webseite, der seine Anwender per selbst erstellten Client-Zertifikat (Client Certificate) identifizieren möchte, stellt dies kein Problem dar.
Übermittlung des privaten Schlüssels. Diese Übertragung muss so abgesichert sein, dass kein unbefugter Dritter den privaten Schlüssel mitlesen kann. In der Regel erfolgt dies per Passwort.
CodeMeter bietet eine einfache Möglichkeit, private Schlüssel sicher zu übertragen. Eine Lizenz (welche als Datenfelder Schlüssel enthalten kann) kann per Fernprogrammierung in einen CmContainer übertragen werden. Dabei erstellt der Anwender zuerst eine Remote-Context-Datei (WibuCmRaC). Diese enthält den öffentlichen Schlüssel des jeweiligen CmContainers. Der Herausgeber der Lizenz erzeugt damit eine Remote-Update-Datei (WibuCmRaU). Die darin enthaltenen Lizenzdaten sind so verschlüsselt, dass sie nur vom entsprechenden CmContainer entschlüsselt werden können. Die Entschlüsselung erfolgt innerhalb des CmContainers, so dass der private Schlüssel nie im Klartext außerhalb eines CmContainers vorliegt. CodeMeter vereinfacht die Erstellung und Verteilung von privaten Schlüsseln und Zertifikaten.
Selbstunterschriebene Zertifikate
Ein selbstunterschriebenes Zertifikat (Self Signed Certificate) ist ein Zertifikat, welches man sich selber mit seinem eigenen privaten Schlüssel erstellt hat. Dies ist eine einfache Möglichkeit, Zertifikate vor allem zu Testzwecken zu erzeugen. Ein selbstunterschriebenes Zertifikat muss in der Regel manuell zur Liste der vertrauenswürdigen Zertifikate hinzugefügt werden, bevor es akzeptiert wird. Daher werden diese Zertifikate in der Regel nur zu Testzwecken eingesetzt.
Typische Anwendungsfälle
Ein Anwendungsfall sind Server-Zertifikate. Mit einem Server-Zertifikat wird zum einen die Identität eines Webservers sichergestellt und zum anderen die Kommunikation zwischen Browser und Server verschlüsselt.
Ein weiterer Anwendungsfall sind Client-Zertifikate. Der Betreiber einer Webseite erstellt und verteilt die entsprechenden Zertifikate. Der Browser verwendet das Zertifikat und den privaten Schlüssel, um sich am Server anzumelden. Auf dem Server besteht die Möglichkeit, das Zertifikat auszulesen und zum Beispiel anhand der eingetragenen Organisational Unit (OU) den Zugriff auf bestimmte Bereiche zu gewähren.
Ein dritter Anwendungsfall sind -Codesignatur-Zertifikate. Der Softwarehersteller unterschreibt seine Software und über das entsprechende Zertifikat wird die Herkunft von eben diesem Softwarehersteller beglaubigt. Während das Windows-eigene Verfahren entwickelt wurde, um den Anwender vor Viren zu schützen, setzt CodeMeter dies auf Embedded Devices ein, um die Integrität des kompletten Gerätes sicherzustellen.
Weitere Anwendungsfälle sind E-Mail-Verschlüsselung und der neue Personalausweis (NPa).
OPC UA
Auch bei OPC UA (OLE for Process Control Unified Architecture) werden Zertifikate verwendet. Diese werden als Server- und als Client-Zertifikate verwendet. CodeMeter vereinfacht auch hier den Prozess der Ausstellung und Verwaltung. Vorgefertigte Zertifikate können einfach durch das Stecken eines vorbereiteten CmDongles an eine Steuerung oder an einen PC verteilt werden.
Fazit
Zertifikate spielen eine wichtige Rolle bei der Identifizierung von Personen und Maschinen und dienen dem Nachweis der Echtheit von Daten. Zertifikate und die zugehörigen privaten Schlüssel können verwendet werden, um einen sicheren Kommunikationskanal aufzubauen. Zertifikate sind eine Ergänzung zu einem Lizenzierungs- und -Kopierschutzsystem wie CodeMeter. CodeMeter ist bestens dafür gerüstet, mit Zertifikaten und privaten Schlüsseln zu arbeiten. Private Schlüssel werden sicher und nicht auslesbar im CmContainer gespeichert. CodeMeter unterstützt den Standard X.509 und bietet ein eigenes kleines und schlankes Format für Systeme mit wenigen Ressourcen.