Erfaring med å bruke Rutoken-teknologi for registrering og autorisering av brukere i systemet (del 1)

God ettermiddag Jeg ønsker å dele min erfaring om dette emnet.

Rutoken er maskinvare- og programvareløsninger innen autentisering, informasjonssikkerhet og elektronisk signatur. I hovedsak er dette en flash-stasjon som kan lagre autentiseringsdata som brukeren bruker for å logge på systemet.

I dette eksemplet brukes Rutoken EDS 2.0.

For å jobbe med denne Rutoken trenger du installere driveren på windows.

For Windows sikrer installasjon av bare én driver at alt som trengs er installert slik at operativsystemet ser Rutoken og kan jobbe med den.

Du kan samhandle med Rutoken på forskjellige måter. Du kan få tilgang til den fra serversiden av applikasjonen, eller direkte fra klientsiden. Dette eksemplet vil se på interaksjon med Rutoken fra klientsiden av applikasjonen.

Klientdelen av applikasjonen samhandler med rutoken gjennom rutoken-plugin. Dette er et program som installeres separat på hver nettleser. For Windows trenger du bare å laste ned og installere plugin-en, ligger på denne linken.

Det er det, nå kan vi samhandle med Rutoken fra klientsiden av applikasjonen.

Dette eksemplet diskuterer ideen om å implementere en brukerautorisasjonsalgoritme i systemet ved å bruke utfordring-svar-skjemaet.

Essensen av ideen er som følger:

  1. Klienten sender en autorisasjonsforespørsel til serveren.
  2. Serveren svarer på en forespørsel fra klienten ved å sende en tilfeldig streng.
  3. Klienten fyller denne strengen med tilfeldige 32 biter.
  4. Klienten signerer den mottatte strengen med sitt sertifikat.
  5. Klienten sender den mottatte krypterte meldingen til serveren.
  6. Serveren bekrefter signaturen ved å motta den originale ukrypterte meldingen.
  7. Serveren fjerner de siste 32 bitene fra den mottatte ukrypterte meldingen.
  8. Serveren sammenligner det mottatte resultatet med meldingen som ble sendt ved forespørsel om autorisasjon.
  9. Hvis meldingene er de samme, anses autorisasjonen som vellykket.

I algoritmen ovenfor er det noe slikt som et sertifikat. For dette eksempelet, må du forstå noe kryptografisk teori. På Habré er det flott artikkel om dette emnet.

I dette eksemplet vil vi bruke asymmetriske krypteringsalgoritmer. For å implementere asymmetriske algoritmer må du ha et nøkkelpar og et sertifikat.

Et nøkkelpar består av to deler: en privat nøkkel og en offentlig nøkkel. Den private nøkkelen, som navnet antyder, må være hemmelig. Vi bruker den til å dekryptere informasjon. Den offentlige nøkkelen kan distribueres til hvem som helst. Denne nøkkelen brukes til å kryptere data. Dermed kan enhver bruker kryptere data ved å bruke den offentlige nøkkelen, men bare eieren av den private nøkkelen kan dekryptere denne informasjonen.

Et sertifikat er et elektronisk dokument som inneholder informasjon om brukeren som eier sertifikatet, samt en offentlig nøkkel. Med et sertifikat kan brukeren signere alle data og sende dem til serveren, som kan verifisere signaturen og dekryptere dataene.

For å signere en melding med et sertifikat på riktig måte, må du opprette den riktig. For å gjøre dette opprettes først et nøkkelpar på Rutoken, og deretter må et sertifikat kobles til den offentlige nøkkelen til dette nøkkelparet. Sertifikatet må ha nøyaktig den offentlige nøkkelen som ligger på Rutoken, dette er viktig. Hvis vi bare oppretter et nøkkelpar og et sertifikat umiddelbart på klientsiden av applikasjonen, hvordan kan da serveren dekryptere denne krypterte meldingen? Han vet tross alt ingenting om hverken nøkkelparet eller sertifikatet.

Hvis du dykker dypere inn i dette emnet, kan du finne interessant informasjon på Internett. Det er visse sertifiseringsinstanser som vi åpenbart stoler på. Disse sertifiseringsmyndighetene kan utstede sertifikater til brukere; de ​​installerer disse sertifikatene på serveren sin. Etter dette, når klienten får tilgang til denne serveren, ser han dette sertifikatet, og ser at det ble utstedt av en sertifiseringsinstans, noe som betyr at denne serveren kan stoles på. Det er også mye informasjon på Internett om hvordan du setter opp alt riktig. Du kan for eksempel begynne med dette.

Hvis vi går tilbake til problemet vårt, virker løsningen åpenbar. Du må på en eller annen måte lage ditt eget sertifiseringssenter. Men før det må du finne ut på hvilket grunnlag sertifiseringssenteret skal utstede et sertifikat til brukeren, fordi han ikke vet noe om det. (For eksempel hans fornavn, etternavn osv.) Det er noe slikt som kalles en sertifikatforespørsel. Mer informasjon om denne standarden finner du for eksempel på Wikipedia ru.wikipedia.org/wiki/PKCS
Vi vil bruke versjon 1.7 - PKCS#10.

La oss beskrive algoritmen for å generere et sertifikat på Rutoken (opprinnelig kilde: dokumentasjonen):

  1. Vi lager et nøkkelpar på klienten og lagrer det på Rutoken. (lagring skjer automatisk)
  2. Vi oppretter en sertifikatforespørsel på klienten.
  3. Fra klienten sender vi denne forespørselen til serveren.
  4. Når vi mottar en forespørsel om et sertifikat på serveren, utsteder vi et sertifikat fra vår sertifiseringsinstans.
  5. Vi sender dette sertifikatet til klienten.
  6. Vi lagrer Rutoken-sertifikatet på klienten.
  7. Sertifikatet må være bundet til nøkkelparet som ble opprettet i det første trinnet.

Nå blir det klart hvordan serveren vil være i stand til å dekryptere klientens signatur, siden den selv utstedte sertifikatet til ham.

I neste del skal vi se nærmere på hvordan du setter opp sertifiseringsmyndigheten din basert på det fullverdige open-source kryptografibiblioteket openSSL.

Kilde: www.habr.com

Legg til en kommentar