Guten Tag! Ich möchte meine Erfahrungen zu diesem Thema teilen.
Rutoken ist eine Hardware- und Softwarelösung im Bereich der Authentifizierung, Informationssicherheit und elektronischen Signaturen. Im Grunde handelt es sich um einen USB-Stick, der Authentifizierungsdaten speichern kann, die der Benutzer für den Zugang zum System verwendet.
In diesem Beispiel wird Rutoken ECP 2.0 verwendet.
Um mit diesem Rutoken zu arbeiten, ist es notwendig,.
Für Windows stellt die Installation nur des Treibers sicher, dass alles Notwendige installiert wird, damit das Betriebssystem Ihren Rutoken erkennt und damit gearbeitet werden kann.
Mit dem Rutoken kann auf verschiedene Weise interagiert werden. Der Zugriff kann sowohl von der Serverseite der Anwendung als auch direkt von der Clientseite erfolgen. In diesem Beispiel wird die Interaktion mit dem Rutoken aus der Clientseite der Anwendung betrachtet.
Die Clientseite der Anwendung interagiert mit dem Rutoken über das Rutoken-Plugin. Dies ist ein Programm, das separat in jedem Browser installiert wird. Für Windows muss das Plugin einfach heruntergeladen und installiert werden, .
Jetzt können wir mit dem RUToken aus dem Client-Teil der Anwendung interagieren.
In diesem Beispiel betrachten wir die Idee der Implementierung eines Benutzerauthentifizierungsalgorithmus im System unter Verwendung des Challenge-Response-Verfahrens.
Die Idee ist wie folgt:
- Der Client sendet eine Authentifizierungsanfrage an den Server.
- Der Server antwortet auf die Anfrage des Clients mit einer zufälligen Zeichenfolge.
- Der Client ergänzt diese Zeichenfolge mit zufälligen 32 Bit.
- Der Client signiert die erhaltene Zeichenfolge mit seinem Zertifikat.
- Der Client sendet das erhaltene codierte Nachricht an den Server.
- Der Server überprüft die Signatur, indem er die ursprüngliche nicht codierte Nachricht erhält.
- Der Server trennt die letzten 32 Bit von der erhaltenen nicht codierten Nachricht ab.
- Der Server vergleicht das erhaltene Ergebnis mit der Nachricht, die bei der Authentifizierungsanfrage gesendet wurde.
- Wenn die Nachrichten übereinstimmen, gilt die Authentifizierung als erfolgreich.
Im obigen Algorithmus gibt es das Konzept des Zertifikats. Im Rahmen dieses Beispiels ist es wichtig, etwas kryptographische Theorie zu verstehen. Auf Habr gibt es .
In diesem Beispiel werden wir asymmetrische Verschlüsselungsalgorithmen verwenden. Für die Implementierung asymmetrischer Algorithmen ist ein Schlüsselpaar und ein Zertifikat erforderlich.
Das Schlüsselpaar besteht aus zwei Teilen: einem privaten Schlüssel und einem öffentlichen Schlüssel. Der private Schlüssel muss, wie der Name schon sagt, geheim bleiben. Er wird zur Entschlüsselung von Informationen verwendet. Der öffentliche Schlüssel kann an jeden weitergegeben werden. Dieser Schlüssel wird zum Verschlüsseln von Daten verwendet. So kann jeder Benutzer Daten mit dem öffentlichen Schlüssel verschlüsseln, aber nur der Inhaber des privaten Schlüssels kann diese Informationen entschlüsseln.
Ein Zertifikat ist ein elektronisches Dokument, das Informationen über den Benutzer enthält, dem das Zertifikat gehört, sowie den öffentlichen Schlüssel. Mit einem Zertifikat kann der Benutzer beliebige Daten signieren und an den Server senden, der diese Signatur überprüfen und die Daten entschlüsseln kann.
Um eine Nachricht korrekt mit einem Zertifikat zu signieren, muss sie richtig erstellt werden. Dazu wird zunächst ein Schlüsselpaar auf dem RUTOKEN erzeugt, und das Zertifikat muss mit dem öffentlichen Schlüssel dieses Schlüsselpaares verknüpft werden. Das Zertifikat muss genau den öffentlichen Schlüssel enthalten, der sich auf dem RUTOKEN befindet; das ist wichtig. Wenn wir einfach ein Schlüsselpaar und sofort ein Zertifikat auf der Clientseite der Anwendung erstellen, wie kann der Server dann die verschlüsselte Nachricht entschlüsseln? Er weiß ja überhaupt nichts über das Schlüsselpaar oder das Zertifikat.
Wenn man tiefer in dieses Thema eintaucht, findet man interessante Informationen im Internet. Es gibt bestimmte Zertifizierungsstellen, denen wir bewusst vertrauen. Diese Zertifizierungsstellen können Zertifikate an Benutzer ausstellen, die diese Zertifikate auf ihrem Server installieren. Wenn der Client sich dann an diesen Server wendet, sieht er genau dieses Zertifikat und erkennt, dass es von einer Zertifizierungsstelle ausgestellt wurde. Das bedeutet, dass diesem Server vertraut werden kann. Auch im Internet gibt es viele Informationen darüber, wie alles richtig eingerichtet wird. .
Wenn wir zu unserer Aufgabe zurückkehren, scheint die Lösung offensichtlich. Wir müssen in irgendeiner Weise unsere eigene Zertifizierungsstelle erstellen. Aber zuerst müssen wir klären, auf welcher Grundlage die Zertifizierungsstelle dem Benutzer ein Zertifikat ausstellen soll, da sie nichts über ihn weiß. (Zum Beispiel seinen Namen, Nachnamen usw.) Es gibt etwas, das als Zertifikatsanforderung bezeichnet wird. Mehr zu diesem Standard kann man beispielsweise auf Wikipedia nachlesen.
Wir werden Version 1.7 — PKCS#10 verwenden.
Lassen Sie uns den Algorithmus zur Erstellung eines Zertifikats auf dem RuToken beschreiben (Ursprung — ):
- Auf dem Client erstellen wir ein Schlüsselpaar und speichern es auf dem RuToken. (Die Speicherung erfolgt automatisch.)
- Auf dem Client erstellen wir eine Zertifikatsanforderung.
- Von dem Client senden wir diese Anfrage an den Server.
- Bei Erhalt der Zertifikatsanfrage auf dem Server stellen wir das Zertifikat mit unserer Zertifizierungsstelle aus.
- Wir senden dieses Zertifikat an den Client.
- Auf dem Client speichern wir das Zertifikat auf dem RuToken.
- Das Zertifikat muss an das Schlüsselpaar gebunden werden, das im ersten Schritt erstellt wurde.
Jetzt wird klar, wie der Server die Unterschrift des Clients entschlüsseln kann, da er ihm selbst das Zertifikat ausgestellt hat.
Im nächsten Teil werden wir ausführlich besprechen, wie Sie Ihre Zertifizierungsstelle auf der Basis der voll funktionsfähigen Open-Source-Kryptografiebibliothek openSSL einrichten können.
Quelle: habr.com
