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

Bună ziua Vreau să împărtășesc experiența mea pe acest subiect.

Rutoken este soluții hardware și software în domeniul autentificării, securității informațiilor și semnăturii electronice. În esență, aceasta este o unitate flash care poate stoca date de autentificare pe care utilizatorul le folosește pentru a se conecta la sistem.

În acest exemplu, este folosit Rutoken EDS 2.0.

Pentru a lucra cu acest Rutoken ai nevoie instalați driverul pe Windows.

Pentru Windows, instalarea unui singur driver asigură că este instalat tot ceea ce este necesar, astfel încât sistemul de operare să vă vadă Rutoken-ul și să poată lucra cu el.

Puteți interacționa cu Rutoken în diferite moduri. Îl puteți accesa din partea de server a aplicației sau direct din partea clientului. Acest exemplu va analiza interacțiunea cu Rutoken din partea client a aplicației.

Partea client a aplicației interacționează cu rutoken-ul prin intermediul pluginului rutoken. Acesta este un program care este instalat separat pe fiecare browser. Pentru Windows trebuie doar să descărcați și să instalați pluginul, aflat la acest link.

Gata, acum putem interacționa cu Rutoken din partea client a aplicației.

Acest exemplu discută ideea implementării unui algoritm de autorizare a utilizatorului în sistem folosind schema provocare-răspuns.

Esența ideii este următoarea:

  1. Clientul trimite o cerere de autorizare către server.
  2. Serverul răspunde la o solicitare din partea clientului prin trimiterea unui șir aleatoriu.
  3. Clientul completează acest șir cu 32 de biți aleatori.
  4. Clientul semnează șirul primit cu certificatul său.
  5. Clientul trimite mesajul criptat primit către server.
  6. Serverul verifică semnătura primind mesajul original necriptat.
  7. Serverul scoate ultimii 32 de biți din mesajul necriptat primit.
  8. Serverul compară rezultatul primit cu mesajul care a fost trimis la solicitarea autorizației.
  9. Dacă mesajele sunt aceleași, atunci autorizarea este considerată reușită.

În algoritmul de mai sus există un astfel de lucru ca un certificat. Pentru acest exemplu, trebuie să înțelegeți o teorie criptografică. Pe Habré există excelent articol pe acest subiect.

În acest exemplu, vom folosi algoritmi de criptare asimetrică. Pentru a implementa algoritmi asimetrici, trebuie să aveți o pereche de chei și un certificat.

O pereche de chei este formată din două părți: o cheie privată și o cheie publică. Cheia privată, după cum sugerează și numele, trebuie să fie secretă. Îl folosim pentru a decripta informații. Cheia publică poate fi distribuită oricui. Această cheie este folosită pentru a cripta datele. Astfel, orice utilizator poate cripta datele folosind cheia publică, dar numai proprietarul cheii private poate decripta aceste informații.

Un certificat este un document electronic care conține informații despre utilizatorul care deține certificatul, precum și o cheie publică. Cu un certificat, utilizatorul poate semna orice date și le poate trimite serverului, care poate verifica semnătura și decripta datele.

Pentru a semna corect un mesaj cu un certificat, trebuie să-l creați corect. Pentru a face acest lucru, o pereche de chei este mai întâi creată pe Rutoken, iar apoi un certificat trebuie să fie conectat la cheia publică a acestei perechi de chei. Certificatul trebuie să aibă exact cheia publică care se află pe Rutoken, acest lucru este important. Dacă pur și simplu creăm o pereche de chei și un certificat imediat pe partea client a aplicației, atunci cum poate serverul să decripteze acest mesaj criptat? La urma urmei, el nu știe absolut nimic nici despre perechea de chei, nici despre certificat.

Dacă vă aprofundați în acest subiect, puteți găsi informații interesante pe Internet. Există anumite autorități de certificare în care, evident, avem încredere. Aceste autorități de certificare pot emite certificate utilizatorilor; ei instalează aceste certificate pe serverul lor. După aceasta, când clientul accesează acest server, vede chiar acest certificat și vede că a fost emis de o autoritate de certificare, ceea ce înseamnă că acest server poate fi de încredere. Există, de asemenea, o mulțime de informații pe Internet despre cum să configurați totul corect. De exemplu, puteți începe cu asta.

Dacă revenim la problema noastră, soluția pare evidentă. Trebuie să vă creați cumva propriul centru de certificare. Dar înainte de asta, trebuie să vă dați seama pe ce bază ar trebui să emită un certificat utilizatorului centrul de certificare, deoarece acesta nu știe nimic despre asta. (De exemplu, numele lui, numele de familie etc.) Există așa ceva numit cerere de certificat. Mai multe informații despre acest standard pot fi găsite, de exemplu, pe Wikipedia ru.wikipedia.org/wiki/PKCS
Vom folosi versiunea 1.7 - PKCS#10.

Să descriem algoritmul pentru generarea unui certificat pe Rutoken (sursa originală: documentație):

  1. Creăm o pereche de chei pe client și o salvăm pe Rutoken. (salvarea are loc automat)
  2. Cream o cerere de certificat pe client.
  3. De la client trimitem această solicitare către server.
  4. Când primim o solicitare pentru un certificat pe server, emitem un certificat de la autoritatea noastră de certificare.
  5. Trimitem acest certificat clientului.
  6. Salvăm certificatul Rutoken pe client.
  7. Certificatul trebuie să fie legat de perechea de chei care a fost creată în primul pas.

Acum devine clar cum serverul va putea decripta semnătura clientului, deoarece el însuși i-a emis certificatul.

În următoarea parte, vom arunca o privire mai atentă asupra modului în care vă configurați autoritatea de certificare pe baza bibliotecii de criptare open-source cu drepturi depline openSSL.

Sursa: www.habr.com

Adauga un comentariu