Izkušnje z uporabo tehnologije Rutoken za registracijo in avtorizacijo uporabnikov v sistemu (1. del)

Dober večer Rad bi delil svoje izkušnje na to temo.

Rutoken je strojna in programska rešitev na področju avtentikacije, informacijske varnosti in elektronskega podpisa. V bistvu je to bliskovni pogon, ki lahko shrani podatke za preverjanje pristnosti, ki jih uporabnik uporablja za prijavo v sistem.

V tem primeru je uporabljen Rutoken EDS 2.0.

Za delo s tem Rutokenom potrebujete namestitev gonilnika na windows.

Za Windows namestitev samo enega gonilnika zagotavlja, da je nameščeno vse, kar je potrebno, tako da OS vidi vaš Rutoken in lahko deluje z njim.

Z Rutokenom lahko komunicirate na različne načine. Do njega lahko dostopate s strežniške strani aplikacije ali neposredno s strani odjemalca. Ta primer bo obravnaval interakcijo z Rutokenom z odjemalske strani aplikacije.

Odjemalski del aplikacije komunicira z rutokenom prek vtičnika rutoken. To je program, ki se namesti v vsak brskalnik posebej. Za Windows morate samo prenesti in namestiti vtičnik, ki se nahaja na tej povezavi.

To je to, zdaj lahko z Rutokenom komuniciramo z odjemalske strani aplikacije.

Ta primer obravnava idejo implementacije algoritma avtorizacije uporabnika v sistemu z uporabo sheme izziv-odziv.

Bistvo ideje je naslednje:

  1. Odjemalec strežniku pošlje zahtevo za avtorizacijo.
  2. Strežnik se na zahtevo odjemalca odzove s pošiljanjem naključnega niza.
  3. Odjemalec dopolni ta niz z naključnimi 32 biti.
  4. Odjemalec podpiše prejeti niz s svojim certifikatom.
  5. Odjemalec pošlje prejeto šifrirano sporočilo strežniku.
  6. Strežnik preveri podpis tako, da prejme izvirno nešifrirano sporočilo.
  7. Strežnik iz prejetega nešifriranega sporočila odstrani zadnjih 32 bitov.
  8. Strežnik primerja prejeti rezultat s sporočilom, ki je bilo poslano ob zahtevi za avtorizacijo.
  9. Če so sporočila enaka, se avtorizacija šteje za uspešno.

V zgornjem algoritmu obstaja takšna stvar, kot je potrdilo. Za ta primer morate razumeti nekaj kriptografske teorije. Na Habréju obstaja odličen članek na to temo.

V tem primeru bomo uporabili asimetrične algoritme šifriranja. Za implementacijo asimetričnih algoritmov morate imeti par ključev in certifikat.

Par ključev je sestavljen iz dveh delov: zasebnega ključa in javnega ključa. Zasebni ključ mora biti, kot že ime pove, tajen. Uporabljamo ga za dešifriranje informacij. Javni ključ se lahko razdeli komur koli. Ta ključ se uporablja za šifriranje podatkov. Tako lahko vsak uporabnik šifrira podatke z javnim ključem, vendar lahko te informacije dešifrira le lastnik zasebnega ključa.

Certifikat je elektronski dokument, ki vsebuje podatke o uporabniku, ki je lastnik certifikata, ter javni ključ. S certifikatom lahko uporabnik podpiše poljubne podatke in jih pošlje strežniku, ki lahko preveri podpis in dešifrira podatke.

Če želite pravilno podpisati sporočilo s certifikatom, ga morate pravilno ustvariti. Če želite to narediti, se na Rutokenu najprej ustvari par ključev, nato pa je treba potrdilo povezati z javnim ključem tega para ključev. Certifikat mora imeti točno tisti javni ključ, ki se nahaja na Rutokenu, to je pomembno. Če preprosto ustvarimo par ključev in potrdilo takoj na odjemalski strani aplikacije, kako lahko potem strežnik dešifrira to šifrirano sporočilo? Navsezadnje ne ve ničesar niti o paru ključev niti o certifikatu.

Če se poglobite v to temo, lahko najdete zanimive informacije na internetu. Obstajajo nekateri certifikacijski organi, ki jim očitno zaupamo. Ti overitelji lahko uporabnikom izdajo potrdila; ta potrdila namestijo na svoj strežnik. Potem, ko odjemalec dostopa do tega strežnika, vidi prav to potrdilo in vidi, da ga je izdal overitelj, kar pomeni, da temu strežniku lahko zaupamo. Na internetu je tudi veliko informacij o tem, kako vse pravilno nastaviti. Na primer, lahko začnete s tem.

Če se vrnemo k našemu problemu, se zdi rešitev očitna. Nekako morate ustvariti svoj certifikacijski center. Pred tem pa je treba ugotoviti, na podlagi česa naj certifikacijski center uporabniku izda potrdilo, saj o tem ne ve nič. (Na primer njegovo ime, priimek itd.) Obstaja nekaj takega, ki se imenuje zahteva za potrdilo. Več informacij o tem standardu lahko najdete na primer na Wikipediji ru.wikipedia.org/wiki/PKCS
Uporabili bomo različico 1.7 - PKCS#10.

Naj opišemo algoritem za generiranje potrdila na Rutoken (izvirni vir: dokumentacijo):

  1. Ustvarimo par ključev na stranki in ga shranimo na Rutoken. (shranjevanje se zgodi samodejno)
  2. Na naročniku izdelamo zahtevo za certifikat.
  3. Od odjemalca to zahtevo pošljemo strežniku.
  4. Ko na strežniku prejmemo zahtevo za potrdilo, izdamo potrdilo našega overitelja.
  5. To potrdilo pošljemo naročniku.
  6. Certifikat Rutoken shranimo na stranko.
  7. Certifikat mora biti vezan na par ključev, ki je bil ustvarjen v prvem koraku.

Zdaj postane jasno, kako bo strežnik lahko dešifriral strankin podpis, saj mu je potrdilo izdal sam.

V naslednjem delu si bomo podrobneje ogledali, kako nastavite overitelja potrdil, ki temelji na polnopravni odprtokodni kriptografski knjižnici openSSL.

Vir: www.habr.com

Dodaj komentar