Experiența utilizării tehnologiei Rutoken pentru înregistrarea și autorizarea utilizatorilor în sistem (partea 1)

Bună ziua! Vreau să împărtășesc experiența mea pe această temă.

Rutoken este o soluție hardware și software în domeniul autentificării, protecției informațiilor și semnăturii electronice. Practic, este un stick USB care poate stoca datele de autentificare folosite de utilizator pentru a accesa sistemul.

În acest exemplu, se folosește Rutoken ECP 2.0.

Pentru a lucra cu acest Rutoken, este necesar să instalați driverul pe Windows..

Pentru Windows, instalarea doar a driverului asigură tot ce este necesar pentru ca sistemul de operare să recunoască Rutokenul dumneavoastră și să poată lucra cu el.

Cu Rutokenul se poate interacționa în diverse moduri. Se poate accesa din partea serverului aplicației sau direct din partea clientului. În acest exemplu, se va analiza interacțiunea cu Rutokenul din partea clientului aplicației.

Partea clientului aplicației interacționează cu Rutokenul prin intermediul plugin-ului Rutoken. Aceasta este o aplicație care se instalează separat în fiecare browser. Pentru Windows, trebuie doar să descărcați și să instalați plugin-ul, disponibil la acest link..

Acum putem interacționa cu Rutokenul din partea clientului aplicației.

În acest exemplu, este prezentată ideea realizării unui algoritm de autorizare a utilizatorului în sistem utilizând schema challenge-response.

Ideea principală este următoarea:

  1. Clientul trimite o cerere de autorizare către server.
  2. Serverul, ca răspuns la cererea clientului, trimite un șir aleator.
  3. Clientul completează acest șir cu 32 de biți aleatori.
  4. Clientul semnează șirul obținut cu certificatul său.
  5. Clientul trimite serverului mesajul codificat obținut.
  6. Serverul verifică semnătura, obținând mesajul inițial necodificat.
  7. Serverul separă ultimii 32 de biți din mesajul necodificat obținut.
  8. Serverul compară rezultatul obținut cu mesajul care a fost trimis la cererea de autorizare.
  9. Dacă mesajele sunt identice, autorizarea este considerată reușită.

În algoritmul de mai sus există noțiunea de certificat. În cadrul acestui exemplu, este necesar să înțelegem o anumită teorie criptografică. Pe Habr există un articol excelent pe această temă..

În acest exemplu, vom folosi algoritmi de criptare asimetrici. Pentru a implementa algoritmi de criptare asimetrici, este necesar să avem un pereche de chei și un certificat.

Perechea de chei constă din două părți: cheia privată și cheia publică. Cheia privată, așa cum sugerează și numele său, trebuie să fie secretă. O folosim pentru a decripta informațiile. Cheia publică poate fi distribuită oricui. Această cheie este utilizată pentru criptarea datelor. Astfel, orice utilizator poate cripta datele folosind cheia publică, dar doar deținătorul cheii private poate decripta aceste informații.

Certificatul este un document electronic care conține informații despre utilizatorul căruia îi aparține certificatul, precum și cheia publică. Având un certificat, utilizatorul poate semna orice date și le poate trimite pe server, care poate verifica această semnătură și decripta datele.

Pentru a putea semna corect un mesaj cu un certificat, este necesară crearea corectă a acestuia. Astfel, pe RUTOKEN, mai întâi se creează o pereche de chei, iar apoi certificatul trebuie să fie legat de cheia publică a acestei perechi de chei. Certificatul trebuie să aibă exact cheia publică care se află pe RUTOKEN, este important. Dacă creăm pur și simplu o pereche de chei și un certificat pe partea clientului a aplicației, cum va putea apoi serverul să decripteze acest mesaj criptat? Deoarece nu știe nimic nici despre perechea de chei, nici despre certificat.

Dacă te aprofundezi mai mult în acest subiect, poți găsi informații interesante pe internet. Există anumite autorități de certificare în care avem încredere. Aceste autorități de certificare pot emite certificate utilizatorilor, iar ele instalează aceste certificate pe propriul server. După aceea, când clientul se conectează la acest server, vede acel certificat și observă că a fost emis de o autoritate de certificare, ceea ce înseamnă că acest server poate fi de încredere. Informații suplimentare despre cum să configurezi totul corect se găsesc și pe internet. De exemplu, poți începe cu aceasta.

Dacă ne întoarcem la sarcina noastră, soluția pare evidentă. Trebuie să creăm cumva centrul nostru de certificare. Dar înainte de asta, trebuie să clarificăm pe ce bază centrul de certificare ar trebui să emită un certificat utilizatorului, având în vedere că nu știe nimic despre el. (De exemplu, numele său, prenumele etc.) Există o chestie care se numește cerere de certificat. Mai multe detalii despre acest standard pot fi găsite, de exemplu, pe Wikipedia. ro.wikipedia.org/wiki/PKCS
Vom folosi versiunea 1.7 — PKCS#10.

Vom descrie algoritmul de generare a certificatului pe RutuToken (sursa originală — documentația):

  1. Pe client, creăm o pereche de chei și o salvăm pe RutuToken. (salvarea se face automat)
  2. Pe client, creăm o cerere de certificat.
  3. Trimitem această cerere de la client la server.
  4. La primirea cererii de certificat pe server, emitim certificat cu centrul nostru de certificare.
  5. Trimitem acest certificat la client.
  6. Pe client, salvăm certificatul pe RutuToken.
  7. Certificatul trebuie să fie legat de perechea de chei care a fost creată la primul pas.

Acum devine clar cum va putea serverul să decripteze semnătura clientului, având în vedere că el însuși i-a emis certificat.

În partea următoare, vom analiza în detaliu cum să configurăm centrul nostru de certificare pe baza unei biblioteci criptografice complete cu sursă deschisă openSSL.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster