Zkušenosti s používáním technologie Rutoken pro registraci a autorizaci uživatelů v systému (část 1)

Dobré odpoledne Chci se podělit o své zkušenosti na toto téma.

Rutoken je hardwarová a softwarová řešení v oblasti autentizace, informační bezpečnosti a elektronického podpisu. V podstatě se jedná o flash disk, který může ukládat autentizační údaje, které uživatel používá k přihlášení do systému.

V tomto příkladu je použit Rutoken EDS 2.0.

Pro práci s tímto Rutokenem potřebujete nainstalovat ovladač na windows.

Pro Windows instalace pouze jednoho ovladače zajistí, že se nainstaluje vše, co je potřeba, takže OS uvidí váš Rutoken a může s ním pracovat.

S Rutokenem můžete komunikovat různými způsoby. Můžete k němu přistupovat ze serverové strany aplikace nebo přímo ze strany klienta. Tento příklad se podívá na interakci s Rutoken z klientské strany aplikace.

Klientská část aplikace interaguje s rutokenem prostřednictvím zásuvného modulu rutokenu. Jedná se o program, který se instaluje samostatně do každého prohlížeče. Pro Windows stačí stáhnout a nainstalovat plugin, umístěný na tomto odkazu.

To je vše, nyní můžeme komunikovat s Rutokenem z klientské strany aplikace.

Tento příklad popisuje myšlenku implementace algoritmu autorizace uživatele v systému pomocí schématu výzva-odpověď.

Podstata myšlenky je následující:

  1. Klient odešle na server požadavek na autorizaci.
  2. Server odpoví na požadavek od klienta odesláním náhodného řetězce.
  3. Klient doplní tento řetězec náhodnými 32 bity.
  4. Klient podepíše přijatý řetězec svým certifikátem.
  5. Klient odešle přijatou zašifrovanou zprávu na server.
  6. Server ověří podpis přijetím původní nezašifrované zprávy.
  7. Server odebere z přijaté nezašifrované zprávy posledních 32 bitů.
  8. Server porovná přijatý výsledek se zprávou, která byla odeslána při žádosti o autorizaci.
  9. Pokud jsou zprávy stejné, je autorizace považována za úspěšnou.

Ve výše uvedeném algoritmu existuje něco jako certifikát. Pro tento příklad musíte pochopit nějakou kryptografickou teorii. Na Habré je skvělý článek na toto téma.

V tomto příkladu použijeme asymetrické šifrovací algoritmy. Chcete-li implementovat asymetrické algoritmy, musíte mít pár klíčů a certifikát.

Pár klíčů se skládá ze dvou částí: soukromého klíče a veřejného klíče. Soukromý klíč, jak jeho název napovídá, musí být tajný. Používáme jej k dešifrování informací. Veřejný klíč může být distribuován komukoli. Tento klíč se používá k šifrování dat. Každý uživatel tedy může šifrovat data pomocí veřejného klíče, ale pouze vlastník soukromého klíče může tyto informace dešifrovat.

Certifikát je elektronický dokument, který obsahuje informace o uživateli, který certifikát vlastní, a také veřejný klíč. Pomocí certifikátu může uživatel podepsat jakákoli data a odeslat je na server, který může podpis ověřit a data dešifrovat.

Abyste mohli správně podepsat zprávu certifikátem, musíte jej správně vytvořit. K tomu je nejprve vytvořen pár klíčů na Rutokenu a poté musí být certifikát propojen s veřejným klíčem tohoto páru klíčů. Certifikát musí mít přesně ten veřejný klíč, který se nachází na Rutokenu, to je důležité. Pokud jednoduše vytvoříme pár klíčů a certifikát okamžitě na straně klienta aplikace, jak pak může server dešifrovat tuto zašifrovanou zprávu? O páru klíčů ani o certifikátu totiž neví vůbec nic.

Pokud se do tohoto tématu ponoříte hlouběji, můžete na internetu najít zajímavé informace. Existují určité certifikační autority, kterým samozřejmě důvěřujeme. Tyto certifikační autority mohou uživatelům vydávat certifikáty a instalovat tyto certifikáty na svůj server. Poté, když klient přistupuje na tento server, vidí právě tento certifikát a vidí, že byl vydán certifikační autoritou, což znamená, že tomuto serveru lze důvěřovat. Na internetu je také dostatek informací o tom, jak vše správně nastavit. Začít můžete například tímto.

Pokud se vrátíme k našemu problému, řešení se zdá být zřejmé. Musíte si nějak vytvořit vlastní certifikační centrum. Ještě předtím je ale potřeba vymyslet, na základě čeho má certifikační centrum uživateli certifikát vydat, protože o ničem neví. (Například jeho jméno, příjmení atd.) Existuje něco, čemu se říká žádost o certifikát. Více informací o tomto standardu lze nalézt například na Wikipedii ru.wikipedia.org/wiki/PKCS
Budeme používat verzi 1.7 - PKCS#10.

Pojďme si popsat algoritmus pro generování certifikátu na Rutokenu (původní zdroj: dokumentaci):

  1. Na klientovi vytvoříme klíčový pár a uložíme jej na Rutoken. (ukládání probíhá automaticky)
  2. Na klientovi vytvoříme žádost o certifikát.
  3. Od klienta odešleme tento požadavek na server.
  4. Když na serveru obdržíme žádost o certifikát, vystavíme certifikát od naší certifikační autority.
  5. Tento certifikát zasíláme klientovi.
  6. Certifikát Rutoken uložíme na klienta.
  7. Certifikát musí být svázán s párem klíčů, který byl vytvořen v prvním kroku.

Nyní je jasné, jak bude server schopen dešifrovat podpis klienta, protože mu sám vydal certifikát.

V příštím díle se blíže podíváme na to, jak nastavit certifikační autoritu na základě plnohodnotné open-source kryptografické knihovny openSSL.

Zdroj: www.habr.com

Přidat komentář