Rutokeni tehnoloogia kasutamise kogemus süsteemis kasutajate registreerimiseks ja autoriseerimiseks (1. osa)

Tere päevast Tahan jagada oma kogemusi sellel teemal.

Rutoken on riist- ja tarkvaralahendused autentimise, infoturbe ja elektroonilise allkirja valdkonnas. Põhimõtteliselt on see mälupulk, mis suudab salvestada autentimisandmeid, mida kasutaja kasutab süsteemi sisselogimiseks.

Selles näites kasutatakse Rutoken EDS 2.0.

Selle Rutokeniga töötamiseks vajate installige draiver Windowsi.

Windowsi puhul tagab vaid ühe draiveri installimine, et kõik vajalik on installitud, et OS näeks teie Rutokenit ja saaks sellega töötada.

Rutokeniga saate suhelda mitmel viisil. Sellele pääsete juurde rakenduse serveri poolelt või otse kliendi poolelt. See näide vaatleb suhtlust Rutokeniga rakenduse kliendi poolel.

Rakenduse kliendiosa suhtleb rutokeniga rutokeni pistikprogrammi kaudu. See on programm, mis installitakse igasse brauserisse eraldi. Windowsi jaoks peate lihtsalt pistikprogrammi alla laadima ja installima, asub sellel lingil.

See on kõik, nüüd saame Rutokeniga suhelda rakenduse kliendi poolel.

See näide käsitleb ideed rakendada süsteemis kasutaja autoriseerimisalgoritmi väljakutse-vastuse skeemi abil.

Idee olemus on järgmine:

  1. Klient saadab serverile autoriseerimispäringu.
  2. Server vastab kliendi päringule, saates juhusliku stringi.
  3. Klient polsterdab seda stringi juhusliku 32 bitiga.
  4. Klient allkirjastab saadud stringi oma sertifikaadiga.
  5. Klient saadab vastuvõetud krüpteeritud sõnumi serverisse.
  6. Server kontrollib allkirja, võttes vastu algse krüptimata sõnumi.
  7. Server eemaldab saadud krüptimata sõnumist viimased 32 bitti.
  8. Server võrdleb saadud tulemust autoriseerimise taotlemisel saadetud sõnumiga.
  9. Kui sõnumid on samad, loetakse autoriseerimine õnnestunuks.

Ülaltoodud algoritmis on olemas selline asi nagu sertifikaat. Selle näite jaoks peate mõistma mõnda krüptograafiateooriat. Habrel on suurepärane artikkel sellel teemal.

Selles näites kasutame asümmeetrilisi krüpteerimisalgoritme. Asümmeetriliste algoritmide rakendamiseks peab teil olema võtmepaar ja sertifikaat.

Võtmepaar koosneb kahest osast: privaatvõtmest ja avalikust võtmest. Privaatvõti, nagu nimigi ütleb, peab olema salajane. Kasutame seda teabe dekrüpteerimiseks. Avalikku võtit saab jagada kõigile. Seda võtit kasutatakse andmete krüptimiseks. Seega saab avaliku võtme abil andmeid krüpteerida iga kasutaja, kuid seda teavet saab dekrüpteerida ainult privaatvõtme omanik.

Sertifikaat on elektrooniline dokument, mis sisaldab teavet sertifikaati omava kasutaja kohta, samuti avalikku võtit. Sertifikaadiga saab kasutaja allkirjastada mis tahes andmeid ja saata need serverisse, mis saab allkirja kontrollida ja andmed dekrüpteerida.

Sõnumi sertifikaadiga korrektseks allkirjastamiseks peate selle õigesti looma. Selleks luuakse esmalt Rutokenis võtmepaar ning seejärel tuleb selle võtmepaari avaliku võtmega siduda sertifikaat. Sertifikaadil peab olema täpselt see avalik võti, mis asub Rutokenil, see on oluline. Kui me lihtsalt loome võtmepaari ja sertifikaadi kohe rakenduse kliendi poolel, siis kuidas saab server selle krüptitud kirja dekrüpteerida? Lõppude lõpuks ei tea ta ei võtmepaarist ega sertifikaadist midagi.

Kui sellesse teemasse süveneda, võib Internetist leida huvitavat infot. On teatud sertifitseerimisasutusi, mida me ilmselgelt usaldame. Need sertifitseerimisasutused saavad kasutajatele sertifikaate väljastada; nad installivad need sertifikaadid oma serverisse. Pärast seda, kui klient sellele serverile ligi pääseb, näeb ta just seda sertifikaati ja näeb, et selle on välja andnud sertifitseerimisasutus, mis tähendab, et seda serverit saab usaldada. Internetis on ka palju infot selle kohta, kuidas kõike õigesti seadistada. Näiteks võite alustada sellest.

Kui pöördume tagasi oma probleemi juurde, tundub lahendus ilmne. Peate kuidagi looma oma sertifitseerimiskeskuse. Enne aga tuleb välja mõelda, mille alusel peaks sertifitseerimiskeskus kasutajale sertifikaadi väljastama, sest ta ei tea sellest midagi. (Näiteks tema eesnimi, perekonnanimi jne) On olemas selline asi, mida nimetatakse tõendipäringuks. Rohkem infot selle standardi kohta leiab näiteks Vikipeediast ru.wikipedia.org/wiki/PKCS
Kasutame versiooni 1.7 – PKCS#10.

Kirjeldame Rutokeni sertifikaadi genereerimise algoritmi (algne allikas: dokumentatsiooni):

  1. Loome kliendil võtmepaari ja salvestame selle Rutokeni. (salvestamine toimub automaatselt)
  2. Koostame kliendile sertifikaadipäringu.
  3. Kliendilt saadame selle päringu serverisse.
  4. Kui saame serveris sertifikaadipäringu, väljastame oma sertifitseerimisasutuselt sertifikaadi.
  5. Saadame selle sertifikaadi kliendile.
  6. Salvestame kliendile Rutokeni sertifikaadi.
  7. Sertifikaat peab olema seotud võtmepaariga, mis loodi esimeses etapis.

Nüüd saab selgeks, kuidas server suudab kliendi allkirja dekrüpteerida, kuna ta ise väljastas talle sertifikaadi.

Järgmises osas vaatleme lähemalt, kuidas seadistada sertifitseerimisasutus täisväärtusliku avatud lähtekoodiga krüptoteegi openSSL alusel.

Allikas: www.habr.com

Lisa kommentaar