Experiència en l'ús de la tecnologia Rutoken per registrar i autoritzar usuaris al sistema (part 1)

Bona tarda Vull compartir la meva experiència sobre aquest tema.

Rutoken és solucions de maquinari i programari en l'àmbit de l'autenticació, la seguretat de la informació i la signatura electrònica. Essencialment, es tracta d'una unitat flaix que pot emmagatzemar dades d'autenticació que l'usuari utilitza per iniciar sessió al sistema.

En aquest exemple, s'utilitza Rutoken EDS 2.0.

Per treballar amb aquest Rutoken necessites instal·lar el controlador a Windows.

Per a Windows, la instal·lació d'un sol controlador garanteix que tot el que es necessita estigui instal·lat perquè el sistema operatiu vegi el vostre Rutoken i pugui treballar-hi.

Podeu interactuar amb Rutoken de diverses maneres. Podeu accedir-hi des del costat del servidor de l'aplicació o directament des del costat del client. Aquest exemple examinarà la interacció amb Rutoken des del costat del client de l'aplicació.

La part client de l'aplicació interactua amb el rutoken mitjançant el connector de rutoken. Aquest és un programa que s'instal·la per separat a cada navegador. Per a Windows només cal que baixeu i instal·leu el connector, localitzat en aquest enllaç.

Això és tot, ara podem interactuar amb Rutoken des del costat del client de l'aplicació.

Aquest exemple discuteix la idea d'implementar un algorisme d'autorització d'usuari al sistema mitjançant l'esquema desafiament-resposta.

L'essència de la idea és la següent:

  1. El client envia una sol·licitud d'autorització al servidor.
  2. El servidor respon a una sol·licitud del client enviant una cadena aleatòria.
  3. El client emplena aquesta cadena amb 32 bits aleatoris.
  4. El client signa la cadena rebuda amb el seu certificat.
  5. El client envia el missatge xifrat rebut al servidor.
  6. El servidor verifica la signatura rebent el missatge original sense xifrar.
  7. El servidor elimina els últims 32 bits del missatge sense xifrar rebut.
  8. El servidor compara el resultat rebut amb el missatge que es va enviar en sol·licitar l'autorització.
  9. Si els missatges són els mateixos, l'autorització es considera correcta.

A l'algorisme anterior hi ha un certificat. Per a aquest exemple, heu d'entendre alguna teoria criptogràfica. A Habré n'hi ha gran article sobre aquest tema.

En aquest exemple, utilitzarem algorismes de xifratge asimètrics. Per implementar algorismes asimètrics, heu de tenir un parell de claus i un certificat.

Un parell de claus consta de dues parts: una clau privada i una clau pública. La clau privada, com el seu nom indica, ha de ser secreta. El fem servir per desxifrar informació. La clau pública es pot distribuir a qualsevol persona. Aquesta clau s'utilitza per xifrar dades. Així, qualsevol usuari pot xifrar les dades mitjançant la clau pública, però només el propietari de la clau privada pot desxifrar aquesta informació.

Un certificat és un document electrònic que conté informació sobre l'usuari propietari del certificat, així com una clau pública. Amb un certificat, l'usuari pot signar qualsevol dada i enviar-la al servidor, que pot verificar la signatura i desxifrar les dades.

Per signar correctament un missatge amb un certificat, cal crear-lo correctament. Per fer-ho, primer es crea un parell de claus a Rutoken i després s'ha d'enllaçar un certificat a la clau pública d'aquest parell de claus. El certificat ha de tenir exactament la clau pública que es troba a Rutoken, això és important. Si simplement creem un parell de claus i un certificat immediatament al costat del client de l'aplicació, llavors com pot el servidor desxifrar aquest missatge xifrat? Després de tot, no sap res ni del parell de claus ni del certificat.

Si aprofundeixes en aquest tema, pots trobar informació interessant a Internet. Hi ha certes autoritats de certificació en les quals òbviament confiem. Aquestes autoritats de certificació poden emetre certificats als usuaris, instal·lant aquests certificats al seu servidor. Després d'això, quan el client accedeix a aquest servidor, veu aquest mateix certificat i veu que va ser emès per una autoritat de certificació, el que significa que es pot confiar en aquest servidor. També hi ha molta informació a Internet sobre com configurar-ho tot correctament. Per exemple, podeu començar amb això.

Si tornem al nostre problema, la solució sembla òbvia. Heu de crear d'alguna manera el vostre propi centre de certificació. Però abans d'això, cal esbrinar sobre quina base el centre de certificació hauria d'emetre un certificat a l'usuari, perquè no en sap res. (Per exemple, el seu nom, cognom, etc.) Hi ha una cosa que s'anomena sol·licitud de certificat. Es pot trobar més informació sobre aquest estàndard, per exemple, a la Viquipèdia ru.wikipedia.org/wiki/PKCS
Utilitzarem la versió 1.7 - PKCS#10.

Anem a descriure l'algorisme per generar un certificat a Rutoken (font original: documentació):

  1. Creem un parell de claus al client i el desem a Rutoken. (l'estalvi es fa automàticament)
  2. Creem una sol·licitud de certificat al client.
  3. Des del client enviem aquesta petició al servidor.
  4. Quan rebem una sol·licitud de certificat al servidor, emetem un certificat de la nostra autoritat de certificació.
  5. Enviem aquest certificat al client.
  6. Desem el certificat de Rutoken al client.
  7. El certificat ha d'estar vinculat al parell de claus que es va crear al primer pas.

Ara queda clar com el servidor podrà desxifrar la signatura del client, ja que ell mateix li va emetre el certificat.

A la següent part, veurem més de prop com configurar la vostra autoritat de certificació basada en la biblioteca de criptografia de codi obert openSSL.

Font: www.habr.com

Afegeix comentari