Experiencia no uso da tecnoloxía Rutoken para rexistrar e autorizar usuarios no sistema (parte 1)

Boas tardes Quero compartir a miña experiencia neste tema.

Rutoken é solucións de hardware e software no campo da autenticación, seguridade da información e sinatura electrónica. Esencialmente, esta é unha unidade flash que pode almacenar datos de autenticación que o usuario usa para iniciar sesión no sistema.

Neste exemplo, úsase Rutoken EDS 2.0.

Para traballar con este Rutoken necesitas instalar controladores en windows.

Para Windows, a instalación dun só controlador garante que todo o necesario está instalado para que o sistema operativo vexa o teu Rutoken e poida traballar con el.

Podes interactuar con Rutoken de varias maneiras. Podes acceder a el desde o lado do servidor da aplicación ou directamente desde o lado do cliente. Este exemplo analizará a interacción con Rutoken desde o lado do cliente da aplicación.

A parte cliente da aplicación interactúa co rutoken a través do complemento rutoken. Este é un programa que se instala por separado en cada navegador. Para Windows só precisa descargar e instalar o complemento, localizado nesta ligazón.

Isto é todo, agora podemos interactuar con Rutoken desde o lado do cliente da aplicación.

Este exemplo discute a idea de implementar un algoritmo de autorización de usuario no sistema usando o esquema desafío-resposta.

A esencia da idea é a seguinte:

  1. O cliente envía unha solicitude de autorización ao servidor.
  2. O servidor responde a unha solicitude do cliente enviando unha cadea aleatoria.
  3. O cliente carga esta cadea con 32 bits aleatorios.
  4. O cliente asina a cadea recibida co seu certificado.
  5. O cliente envía a mensaxe cifrada recibida ao servidor.
  6. O servidor verifica a sinatura recibindo a mensaxe orixinal sen cifrar.
  7. O servidor elimina os últimos 32 bits da mensaxe sen cifrar recibida.
  8. O servidor compara o resultado recibido coa mensaxe que se enviou ao solicitar a autorización.
  9. Se as mensaxes son as mesmas, a autorización considérase exitosa.

No algoritmo anterior hai tal cousa como un certificado. Para este exemplo, cómpre comprender algunha teoría criptográfica. En Habré hai gran artigo sobre este tema.

Neste exemplo, utilizaremos algoritmos de cifrado asimétrico. Para implementar algoritmos asimétricos, debes ter un par de claves e un certificado.

Un par de claves consta de dúas partes: unha clave privada e outra pública. A clave privada, como o seu nome indica, debe ser secreta. Usámolo para descifrar información. A chave pública pódese distribuír a calquera persoa. Esta chave úsase para cifrar datos. Así, calquera usuario pode cifrar os datos mediante a clave pública, pero só o propietario da clave privada pode descifrar esta información.

Un certificado é un documento electrónico que contén información sobre o usuario propietario do certificado, así como unha clave pública. Cun certificado, o usuario pode asinar calquera dato e envialo ao servidor, que pode verificar a sinatura e descifrar os datos.

Para asinar correctamente unha mensaxe cun certificado, cómpre creala correctamente. Para iso, primeiro créase un par de claves en Rutoken e, a continuación, un certificado debe estar ligado á chave pública deste par de claves. O certificado debe ter exactamente a clave pública que se atopa en Rutoken, isto é importante. Se simplemente creamos un par de claves e un certificado inmediatamente no lado do cliente da aplicación, entón como pode o servidor descifrar esta mensaxe cifrada? Despois de todo, non sabe nada nin do par de chaves nin do certificado.

Se profundizas neste tema, podes atopar información interesante en Internet. Hai certas autoridades de certificación nas que obviamente confiamos. Estas autoridades de certificación poden emitir certificados aos usuarios e instalan estes certificados no seu servidor. Despois diso, cando o cliente accede a este servidor, ve este mesmo certificado e ve que foi emitido por unha autoridade de certificación, o que significa que se pode confiar neste servidor. Tamén hai moita información en Internet sobre como configurar todo correctamente. Por exemplo, pode comezar con isto.

Se volvemos ao noso problema, a solución parece obvia. Debes crear dalgunha maneira o teu propio centro de certificación. Pero antes diso, cómpre descubrir en que base o centro de certificación debe emitir un certificado ao usuario, porque non sabe nada sobre iso. (Por exemplo, o seu nome, apelido, etc.) Hai unha cousa chamada solicitude de certificado. Pódese atopar máis información sobre este estándar, por exemplo, na Wikipedia ru.wikipedia.org/wiki/PKCS
Usaremos a versión 1.7 - PKCS#10.

Imos describir o algoritmo para xerar un certificado en Rutoken (fonte orixinal: a documentación):

  1. Creamos un par de claves no cliente e gardámolo en Rutoken. (o gardar ocorre automaticamente)
  2. Creamos unha solicitude de certificado no cliente.
  3. Dende o cliente enviamos esta solicitude ao servidor.
  4. Cando recibimos unha solicitude de certificado no servidor, emitimos un certificado da nosa autoridade de certificación.
  5. Enviamos este certificado ao cliente.
  6. Gardamos o certificado de Rutoken no cliente.
  7. O certificado debe estar ligado ao par de claves que se creou no primeiro paso.

Agora queda claro como o servidor poderá descifrar a sinatura do cliente, xa que el mesmo lle emitiu o certificado.

Na seguinte parte, analizaremos con máis detalle como configurar a súa autoridade de certificación baseándose na biblioteca de criptografía de código aberto openSSL.

Fonte: www.habr.com

Engadir un comentario