Esperienza nell'uso della tecnologia Rutoken per la registrazione e l'autorizzazione degli utenti nel sistema (parte 1)

Buon pomeriggio Voglio condividere la mia esperienza su questo argomento.

Rutoken è soluzioni hardware e software nel campo dell'autenticazione, della sicurezza delle informazioni e della firma elettronica. Essenzialmente, si tratta di un'unità flash in grado di memorizzare i dati di autenticazione che l'utente utilizza per accedere al sistema.

In questo esempio viene utilizzato Rutoken EDS 2.0.

Per lavorare con questo Rutoken di cui hai bisogno installare il driver su windows.

Per Windows, l'installazione di un solo driver garantisce che tutto ciò che è necessario sia installato in modo che il sistema operativo veda il tuo Rutoken e possa funzionare con esso.

Puoi interagire con Rutoken in vari modi. Puoi accedervi dal lato server dell'applicazione o direttamente dal lato client. Questo esempio esaminerà l'interazione con Rutoken dal lato client dell'applicazione.

La parte client dell'applicazione interagisce con rutoken tramite il plug-in rutoken. Questo è un programma che viene installato separatamente su ciascun browser. Per Windows è sufficiente scaricare e installare il plugin, si trova a questo link.

Questo è tutto, ora possiamo interagire con Rutoken dal lato client dell'applicazione.

Questo esempio discute l'idea di implementare un algoritmo di autorizzazione dell'utente nel sistema utilizzando lo schema sfida-risposta.

L’essenza dell’idea è la seguente:

  1. Il client invia una richiesta di autorizzazione al server.
  2. Il server risponde a una richiesta del client inviando una stringa casuale.
  3. Il client riempie questa stringa con 32 bit casuali.
  4. Il client firma la stringa ricevuta con il proprio certificato.
  5. Il client invia il messaggio crittografato ricevuto al server.
  6. Il server verifica la firma ricevendo il messaggio originale non crittografato.
  7. Il server rimuove gli ultimi 32 bit dal messaggio non crittografato ricevuto.
  8. Il server confronta il risultato ricevuto con il messaggio inviato durante la richiesta di autorizzazione.
  9. Se i messaggi sono gli stessi, l'autorizzazione viene considerata riuscita.

Nell'algoritmo di cui sopra esiste qualcosa come un certificato. Per questo esempio, è necessario comprendere alcune teorie crittografiche. Su Habré c'è ottimo articolo su questo argomento.

In questo esempio utilizzeremo algoritmi di crittografia asimmetrica. Per implementare algoritmi asimmetrici, è necessario disporre di una coppia di chiavi e di un certificato.

Una coppia di chiavi è composta da due parti: una chiave privata e una chiave pubblica. La chiave privata, come suggerisce il nome, deve essere segreta. Lo usiamo per decrittografare le informazioni. La chiave pubblica può essere distribuita a chiunque. Questa chiave viene utilizzata per crittografare i dati. Pertanto, qualsiasi utente può crittografare i dati utilizzando la chiave pubblica, ma solo il proprietario della chiave privata può decrittografare queste informazioni.

Un certificato è un documento elettronico che contiene informazioni sull'utente proprietario del certificato, nonché una chiave pubblica. Con un certificato, l'utente può firmare qualsiasi dato e inviarlo al server, che può verificare la firma e decrittografare i dati.

Per firmare correttamente un messaggio con un certificato, è necessario crearlo correttamente. Per fare ciò, viene prima creata una coppia di chiavi su Rutoken, quindi un certificato deve essere collegato alla chiave pubblica di questa coppia di chiavi. Il certificato deve avere esattamente la chiave pubblica che si trova su Rutoken, questo è importante. Se creiamo semplicemente una coppia di chiavi e un certificato immediatamente sul lato client dell'applicazione, come può il server decrittografare questo messaggio crittografato? Dopotutto, non sa nulla né della coppia di chiavi né del certificato.

Se approfondisci questo argomento, puoi trovare informazioni interessanti su Internet. Ci sono alcune autorità di certificazione di cui ovviamente ci fidiamo. Queste autorità di certificazione possono rilasciare certificati agli utenti; installano questi certificati sul proprio server. Successivamente, quando il client accede a questo server, vede proprio questo certificato e vede che è stato emesso da un'autorità di certificazione, il che significa che questo server può essere considerato attendibile. Ci sono anche molte informazioni su Internet su come impostare tutto correttamente. Ad esempio, puoi iniziare con questo.

Se torniamo al nostro problema, la soluzione sembra ovvia. Devi in ​​qualche modo creare il tuo centro di certificazione. Ma prima è necessario capire su quali basi il centro di certificazione dovrebbe rilasciare un certificato all'utente, perché non ne sa nulla. (Ad esempio, il suo nome, cognome, ecc.) Esiste una cosa chiamata richiesta di certificato. Maggiori informazioni su questo standard possono essere trovate, ad esempio, su Wikipedia ru.wikipedia.org/wiki/PKCS
Utilizzeremo la versione 1.7 - PKCS#10.

Descriviamo l'algoritmo per generare un certificato su Rutoken (fonte originale: la documentazione):

  1. Creiamo una coppia di chiavi sul client e la salviamo su Rutoken. (il salvataggio avviene automaticamente)
  2. Creiamo una richiesta di certificato sul client.
  3. Dal client inviamo questa richiesta al server.
  4. Quando riceviamo una richiesta di certificato sul server, emettiamo un certificato dalla nostra autorità di certificazione.
  5. Inviamo questo certificato al cliente.
  6. Salviamo il certificato Rutoken sul client.
  7. Il certificato deve essere associato alla coppia di chiavi creata nel primo passaggio.

Ora diventa chiaro come il server sarà in grado di decifrare la firma del cliente, dal momento che è stato lui stesso a rilasciargli il certificato.

Nella parte successiva, daremo uno sguardo più da vicino a come impostare la tua autorità di certificazione in base alla libreria di crittografia open source completa openSSL.

Fonte: habr.com

Aggiungi un commento