Erfahrung im Einsatz der Rutoken-Technologie zur Registrierung und Autorisierung von Benutzern im System (Teil 1)

Guten Tag! Ich möchte meine Erfahrungen zu diesem Thema teilen.

Rutoken sind Hardware- und Softwarelösungen im Bereich Authentifizierung, Informationssicherheit und elektronische Signatur. Im Wesentlichen handelt es sich dabei um ein Flash-Laufwerk, auf dem Authentifizierungsdaten gespeichert werden können, mit denen sich der Benutzer beim System anmeldet.

In diesem Beispiel wird Rutoken EDS 2.0 verwendet.

Um mit diesem Rutoken arbeiten zu können, benötigen Sie Treiber unter Windows installieren.

Unter Windows stellt die Installation nur eines Treibers sicher, dass alles Notwendige installiert ist, damit das Betriebssystem Ihr Rutoken erkennt und damit arbeiten kann.

Sie können auf verschiedene Arten mit Rutoken interagieren. Sie können von der Serverseite der Anwendung oder direkt von der Clientseite aus darauf zugreifen. In diesem Beispiel wird die Interaktion mit Rutoken von der Clientseite der Anwendung aus betrachtet.

Der Client-Teil der Anwendung interagiert mit dem Rutoken über das Rutoken-Plugin. Hierbei handelt es sich um ein Programm, das in jedem Browser separat installiert wird. Für Windows müssen Sie nur das Plugin herunterladen und installieren. finden Sie unter diesem Link.

Jetzt können wir von der Client-Seite der Anwendung aus mit Rutoken interagieren.

In diesem Beispiel wird die Idee diskutiert, mithilfe des Challenge-Response-Schemas einen Benutzerautorisierungsalgorithmus im System zu implementieren.

Der Kern der Idee ist wie folgt:

  1. Der Client sendet eine Autorisierungsanfrage an den Server.
  2. Der Server antwortet auf eine Anfrage des Clients, indem er eine zufällige Zeichenfolge sendet.
  3. Der Client füllt diese Zeichenfolge mit zufälligen 32 Bits auf.
  4. Der Client signiert den empfangenen String mit seinem Zertifikat.
  5. Der Client sendet die empfangene verschlüsselte Nachricht an den Server.
  6. Der Server überprüft die Signatur, indem er die ursprüngliche unverschlüsselte Nachricht empfängt.
  7. Der Server entfernt die letzten 32 Bits aus der empfangenen unverschlüsselten Nachricht.
  8. Der Server vergleicht das empfangene Ergebnis mit der Nachricht, die bei der Autorisierungsanfrage gesendet wurde.
  9. Wenn die Nachrichten identisch sind, gilt die Autorisierung als erfolgreich.

Im obigen Algorithmus gibt es so etwas wie ein Zertifikat. Für dieses Beispiel müssen Sie einige kryptografische Theorien verstehen. Auf Habré gibt es toller Artikel zu diesem Thema.

In diesem Beispiel verwenden wir asymmetrische Verschlüsselungsalgorithmen. Um asymmetrische Algorithmen zu implementieren, benötigen Sie ein Schlüsselpaar und ein Zertifikat.

Ein 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 sein. Wir verwenden es, um Informationen zu entschlüsseln. Der öffentliche Schlüssel kann an jeden weitergegeben werden. Dieser Schlüssel wird zum Verschlüsseln von Daten verwendet. Somit kann jeder Benutzer Daten mit dem öffentlichen Schlüssel verschlüsseln, aber nur der Besitzer des privaten Schlüssels kann diese Informationen entschlüsseln.

Ein Zertifikat ist ein elektronisches Dokument, das Informationen über den Benutzer, der das Zertifikat besitzt, sowie einen öffentlichen Schlüssel enthält. Mit einem Zertifikat kann der Benutzer beliebige Daten signieren und an den Server senden, der die Signatur überprüfen und die Daten entschlüsseln kann.

Um eine Nachricht korrekt mit einem Zertifikat zu signieren, müssen Sie es korrekt erstellen. Dazu wird zunächst ein Schlüsselpaar auf Rutoken erstellt und anschließend muss ein Zertifikat mit dem öffentlichen Schlüssel dieses Schlüsselpaars verknüpft werden. Das Zertifikat muss genau den öffentlichen Schlüssel haben, der sich auf Rutoken befindet, das ist wichtig. Wenn wir einfach direkt auf der Clientseite der Anwendung ein Schlüsselpaar und ein Zertifikat erstellen, wie kann der Server dann diese verschlüsselte Nachricht entschlüsseln? Schließlich weiß er weder über das Schlüsselpaar noch über das Zertifikat überhaupt etwas.

Wer tiefer in dieses Thema eintaucht, kann im Internet interessante Informationen finden. Es gibt bestimmte Zertifizierungsstellen, denen wir natürlich vertrauen. Diese Zertifizierungsstellen können den Benutzern Zertifikate ausstellen; sie installieren diese Zertifikate auf ihrem Server. Wenn der Client danach auf diesen Server zugreift, sieht er genau dieses Zertifikat und sieht, dass es von einer Zertifizierungsstelle ausgestellt wurde, was bedeutet, dass dieser Server vertrauenswürdig ist. Auch im Internet gibt es jede Menge Informationen, wie man alles richtig einrichtet. Damit können Sie zum Beispiel beginnen.

Wenn wir auf unser Problem zurückkommen, scheint die Lösung offensichtlich. Sie müssen irgendwie Ihr eigenes Zertifizierungszentrum einrichten. Zuvor muss jedoch geklärt werden, auf welcher Grundlage die Zertifizierungsstelle dem Benutzer ein Zertifikat ausstellen soll, da dieser nichts davon weiß. (Zum Beispiel sein Vorname, Nachname usw.) Es gibt so etwas wie eine Zertifikatsanforderung. Weitere Informationen zu diesem Standard finden Sie beispielsweise auf Wikipedia ru.wikipedia.org/wiki/PKCS
Wir werden Version 1.7 – PKCS#10 verwenden.

Beschreiben wir den Algorithmus zum Generieren eines Zertifikats auf Rutoken (Originalquelle: Dokumentation):

  1. Wir erstellen auf dem Client ein Schlüsselpaar und speichern es auf Rutoken. (Speicherung erfolgt automatisch)
  2. Wir erstellen eine Zertifikatsanforderung auf dem Client.
  3. Vom Client senden wir diese Anfrage an den Server.
  4. Wenn wir auf dem Server eine Zertifikatsanfrage erhalten, stellen wir ein Zertifikat unserer Zertifizierungsstelle aus.
  5. Wir senden dieses Zertifikat an den Kunden.
  6. Wir speichern das Rutoken-Zertifikat auf dem Client.
  7. Das Zertifikat muss an das Schlüsselpaar gebunden sein, das im ersten Schritt erstellt wurde.

Jetzt wird klar, wie der Server die Signatur des Clients entschlüsseln kann, da er ihm selbst das Zertifikat ausgestellt hat.

Im nächsten Teil werfen wir einen genaueren Blick darauf, wie Sie Ihre Zertifizierungsstelle auf Basis der vollwertigen Open-Source-Kryptografiebibliothek openSSL einrichten.

Source: habr.com

Kommentar hinzufügen