Skúsenosti s používaním technológie Rutoken na registráciu a autorizáciu používateľov v systéme (časť 1)

Dobrý deň Chcem sa podeliť o svoje skúsenosti na túto tému.

Rutoken sú hardvérové ​​a softvérové ​​riešenia v oblasti autentifikácie, informačnej bezpečnosti a elektronického podpisu. V podstate ide o flash disk, ktorý dokáže uchovávať autentifikačné údaje, ktoré používateľ používa na prihlásenie do systému.

V tomto príklade je použitý Rutoken EDS 2.0.

Na prácu s týmto Rutokenom potrebujete nainštalovať ovládač na windows.

V prípade systému Windows inštalácia iba jedného ovládača zaistí, že sa nainštaluje všetko, čo je potrebné, aby OS videl váš Rutoken a mohol s ním pracovať.

S Rutokenom môžete interagovať rôznymi spôsobmi. Môžete k nemu pristupovať zo serverovej strany aplikácie alebo priamo zo strany klienta. Tento príklad sa pozrie na interakciu s Rutokenom zo strany klienta aplikácie.

Klientska časť aplikácie interaguje s rutokenom prostredníctvom zásuvného modulu rutokenu. Ide o program, ktorý sa inštaluje samostatne do každého prehliadača. Pre Windows si stačí stiahnuť a nainštalovať plugin, nachádza sa na tomto odkaze.

To je všetko, teraz môžeme komunikovať s Rutokenom z klientskej strany aplikácie.

Tento príklad popisuje myšlienku implementácie algoritmu autorizácie používateľa v systéme pomocou schémy výzva-odpoveď.

Podstata myšlienky je nasledovná:

  1. Klient odošle na server požiadavku na autorizáciu.
  2. Server odpovedá na požiadavku od klienta odoslaním náhodného reťazca.
  3. Klient doplní tento reťazec náhodnými 32 bitmi.
  4. Klient podpíše prijatý reťazec svojim certifikátom.
  5. Klient odošle prijatú zašifrovanú správu na server.
  6. Server overí podpis prijatím pôvodnej nezašifrovanej správy.
  7. Server odoberie posledných 32 bitov z prijatej nezašifrovanej správy.
  8. Server porovná prijatý výsledok so správou, ktorá bola odoslaná pri žiadosti o autorizáciu.
  9. Ak sú správy rovnaké, autorizácia sa považuje za úspešnú.

Vo vyššie uvedenom algoritme existuje niečo ako certifikát. Pre tento príklad musíte pochopiť nejakú kryptografickú teóriu. Na Habré je skvelý článok na túto tému.

V tomto príklade použijeme asymetrické šifrovacie algoritmy. Ak chcete implementovať asymetrické algoritmy, musíte mať pár kľúčov a certifikát.

Pár kľúčov pozostáva z dvoch častí: súkromného kľúča a verejného kľúča. Súkromný kľúč, ako naznačuje jeho názov, musí byť tajný. Používame ho na dešifrovanie informácií. Verejný kľúč môže byť distribuovaný komukoľvek. Tento kľúč sa používa na šifrovanie údajov. Každý používateľ teda môže šifrovať údaje pomocou verejného kľúča, ale iba vlastník súkromného kľúča môže tieto informácie dešifrovať.

Certifikát je elektronický dokument, ktorý obsahuje informácie o používateľovi, ktorý certifikát vlastní, ako aj verejný kľúč. Pomocou certifikátu môže používateľ podpísať akékoľvek údaje a odoslať ich na server, ktorý môže overiť podpis a dešifrovať údaje.

Aby ste mohli správne podpísať správu certifikátom, musíte ho správne vytvoriť. Na tento účel sa najprv vytvorí pár kľúčov na Rutokene a potom sa musí certifikát prepojiť s verejným kľúčom tohto páru kľúčov. Certifikát musí mať presne ten verejný kľúč, ktorý sa nachádza na Rutokene, to je dôležité. Ak jednoducho vytvoríme pár kľúčov a certifikát okamžite na strane klienta aplikácie, ako potom môže server dešifrovať túto zašifrovanú správu? O páre kľúčov ani o certifikáte totiž nevie vôbec nič.

Ak sa do tejto témy ponoríte hlbšie, na internete nájdete zaujímavé informácie. Existujú určité certifikačné autority, ktorým očividne dôverujeme. Tieto certifikačné autority môžu používateľom vydávať certifikáty, ktoré si inštalujú na svoj server. Potom, keď klient pristupuje na tento server, vidí práve tento certifikát a vidí, že bol vydaný certifikačnou autoritou, čo znamená, že tento server môže byť dôveryhodný. Na internete je tiež dostatok informácií o tom, ako všetko správne nastaviť. Môžete začať napríklad týmto.

Ak sa vrátime k nášmu problému, riešenie sa zdá byť zrejmé. Musíte si nejakým spôsobom vytvoriť vlastné certifikačné centrum. Ešte predtým si však treba vybaviť, na základe čoho má certifikačné centrum vydať používateľovi certifikát, pretože o ničom nevie. (Napríklad jeho krstné meno, priezvisko atď.) Existuje taká vec, ktorá sa nazýva žiadosť o certifikát. Viac informácií o tomto štandarde nájdete napríklad na Wikipédii ru.wikipedia.org/wiki/PKCS
Budeme používať verziu 1.7 - PKCS#10.

Poďme si popísať algoritmus na generovanie certifikátu na Rutokene (pôvodný zdroj: dokumentáciu):

  1. Na klientovi vytvoríme kľúčový pár a uložíme ho na Rutoken. (ukladanie prebieha automaticky)
  2. Na klientovi vytvoríme žiadosť o certifikát.
  3. Od klienta posielame túto požiadavku na server.
  4. Keď dostaneme žiadosť o certifikát na server, vystavíme certifikát od našej certifikačnej autority.
  5. Tento certifikát zasielame klientovi.
  6. Certifikát Rutoken uložíme na klienta.
  7. Certifikát musí byť naviazaný na pár kľúčov, ktorý bol vytvorený v prvom kroku.

Teraz je jasné, ako bude server schopný dešifrovať podpis klienta, pretože sám mu vydal certifikát.

V ďalšej časti sa bližšie pozrieme na to, ako nastaviť certifikačnú autoritu na základe plnohodnotnej open-source kryptografickej knižnice openSSL.

Zdroj: hab.com

Pridať komentár