Doświadczenie zastosowania technologii RUTOKEN do rejestracji i autoryzacji użytkowników w systemie (część 1)

Dzień dobry! Chciałbym podzielić się swoim doświadczeniem na ten temat.

RUTOKEN to sprzętowe i programowe rozwiązania w dziedzinie uwierzytelniania, ochrony informacji i podpisu elektronicznego. W zasadzie jest to taka pamięć flash, która może przechowywać dane uwierzytelniające, które użytkownik wykorzystuje do logowania się do systemu.

W tym przykładzie używany jest RUTOKEN ECP 2.0.

Aby pracować z tym RUTOKENEM, należy zainstalować sterownik na systemie Windows..

Dla systemu Windows, zainstalowanie samego sterownika zapewnia wszystko, czego potrzeba, aby system operacyjny rozpoznał Twój RUTOKEN i umożliwił z nim pracę.

Z RUTOKENEM można wchodzić w interakcje na różne sposoby. Można uzyskać do niego dostęp z części serwerowej aplikacji, a można również bezpośrednio z części klienckiej. W tym przykładzie omówione zostanie wchodzenie w interakcję z RUTOKENEM z części klienckiej aplikacji.

Część kliencka aplikacji wchodzi w interakcję z RUTOKENEM za pośrednictwem wtyczki RUTOKEN. Jest to program, który instaluje się osobno na każdej przeglądarce. Dla systemu Windows wystarczy po prostu pobrać i zainstalować wtyczkę, dostępną pod tym linkiem..

Wszystko, teraz możemy wchodzić w interakcję z RUTOKENEM z części klienckiej aplikacji.

W tym przykładzie omówiono pomysł realizacji algorytmu autoryzacji użytkownika w systemie z wykorzystaniem schematu challenge-response.

Istota pomysłu jest następująca:

  1. Klient wysyła żądanie autoryzacji do serwera.
  2. Serwer w odpowiedzi na żądanie klienta wysyła losowy ciąg.
  3. Klient uzupełnia ten ciąg losowymi 32 bitami.
  4. Klient podpisuje otrzymany ciąg swoim certyfikatem.
  5. Klient wysyła do serwera otrzymaną zakodowaną wiadomość.
  6. Serwer sprawdza podpis, uzyskując oryginalną niezakodowaną wiadomość.
  7. Serwer odłącza ostatnie 32 bity od otrzymanej niezakodowanej wiadomości.
  8. Serwer porównuje otrzymany wynik z wiadomością, która została wysłana przy żądaniu autoryzacji.
  9. Jeśli wiadomości są identyczne, autoryzacja uznawana jest za pomyślną.

W przedstawionym powyżej algorytmie istnieje pojęcie certyfikatu. W ramach tego przykładu należy rozumieć pewną teorię kryptograficzną. Na Habrze znajduje się świetny artykuł na ten temat..

W tym przykładzie użyjemy asymetrycznych algorytmów szyfrowania. Aby zrealizować asymetryczne algorytmy, konieczne jest posiadanie pary kluczy i certyfikatu.

Para kluczy składa się z dwóch części: klucza prywatnego i klucza publicznego. Klucz prywatny, jak wskazuje jego nazwa, musi być sekretny. Używamy go do odszyfrowywania informacji. Klucz publiczny można przekazać każdemu. Ten klucz służy do szyfrowania danych. W ten sposób każdy użytkownik może zaszyfrować dane, używając klucza publicznego, ale tylko właściciel klucza prywatnego może odszyfrować te informacje.

Certyfikat to elektroniczny dokument, który zawiera informacje o użytkowniku, do którego należy certyfikat, oraz o kluczu publicznym. Posiadając certyfikat, użytkownik może podpisać dowolne dane i wysłać je na serwer, który może sprawdzić ten podpis i odszyfrować dane.

Aby poprawnie podpisać wiadomość certyfikatem, należy prawidłowo go stworzyć. W tym celu na RUTOKENIE najpierw tworzy się parę kluczy, a następnie certyfikat musi być powiązany z kluczem publicznym tej pary kluczy. Certyfikat musi mieć dokładnie ten klucz publiczny, który znajduje się na RUTOKENIE, to jest ważne. Jeśli po prostu stworzymy parę kluczy i certyfikat bezpośrednio w aplikacji klienckiej, to w jaki sposób serwer będzie mógł odszyfrować tę zaszyfrowaną wiadomość? W końcu nie zna nic ani o parze kluczy, ani o certyfikacie.

Jeśli zgłębimy ten temat, możemy znaleźć interesujące informacje w internecie. Istnieją pewne centra certyfikacji, które z góry ufamy. Te centra certyfikacji mogą wydawać certyfikaty użytkownikom, którzy instalują te certyfikaty na swoim serwerze. Po tym, gdy klient zwraca się do tego serwera, widzi ten certyfikat i stwierdza, że został wydany przez centrum certyfikacji, co oznacza, że temu serwerowi można ufać. Więcej informacji na temat tego, jak poprawnie wszystko skonfigurować, również jest mnóstwo w internecie. Na przykład można zacząć od tego.

Wracając do naszego zadania, rozwiązanie wydaje się oczywiste. W jakiś sposób musimy stworzyć własny urząd certyfikacji. Ale zanim to zrobimy, musimy zrozumieć, na jakiej podstawie urząd certyfikacji powinien wydawać certyfikat użytkownikowi, ponieważ nic o nim nie wie. (Na przykład jego imię, nazwisko itd.) Istnieje coś, co nazywa się żądaniem certyfikatu. Więcej informacji na temat tego standardu można znaleźć na Wikipedii. ru.wikipedia.org/wiki/PKCS
Będziemy używać wersji 1.7 — PKCS#10.

Opiszemy algorytm generowania certyfikatu na RUTOKENIE (źródło — 文档):

  1. Na kliencie tworzymy parę kluczy i zapisujemy ją na RUTOKENIE. (zapisywanie odbywa się automatycznie)
  2. Na kliencie tworzymy żądanie certyfikatu.
  3. Z klienta wysyłamy to żądanie do serwera.
  4. Po otrzymaniu żądania certyfikatu na serwerze, wystawiamy certyfikat naszym urządzem certyfikacji.
  5. Wysyłamy ten certyfikat do klienta.
  6. Na kliencie zapisujemy certyfikat na RUTOKENIE.
  7. Certyfikat musi być powiązany z tą parą kluczy, która została utworzona w pierwszym kroku.

Teraz staje się jasne, jak serwer będzie w stanie odszyfrować podpis klienta, skoro sam wydał mu certyfikat.

W następnej części szczegółowo omówimy, jak skonfigurować własne urząd certyfikacji na podstawie pełnoprawnej biblioteki kryptograficznej open source openSSL.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster