Dobrý den! Chci se podělit o své zkušenosti na toto téma.
Rutoken jsou hardwarová a softwarová řešení v oblasti autentizace, ochrany informací a elektronického podpisu. V podstatě jde o USB flash disk, který může uchovávat autentizační údaje, které uživatel používá k přihlášení do systému.
V tomto příkladu se používá Rutoken ECP 2.0.
Pro práci s tímto Rutokenem je nutné.
Pro Windows zajišťuje instalace jednoho ovladače všechno potřebné, aby operační systém viděl váš Rutoken a bylo s ním možné pracovat.
S Rutokenem lze interagovat různými způsoby. Můžete k němu přistupovat ze serverové části aplikace, nebo přímo z klientské. V tomto příkladu bude prozkoumána interakce s Rutokenem z klientské části aplikace.
Klientská část aplikace interaguje s Rutokenem prostřednictvím Rutoken pluginu. Jedná se o program, který je nutné odděleně nainstalovat do každého prohlížeče. Pro Windows stačí jednoduše stáhnout a nainstalovat plugin, .
Teď můžeme interagovat s Rutokenem z klientské části aplikace.
V tomto příkladu je prozkoumána myšlenka realizace algoritmu autorizace uživatele v systému s využitím schématu challenge-response.
Podstata myšlenky je následující:
- Klient odešle žádost o autorizaci na server.
- Server v odpovědi na žádost od klienta odešle náhodný řetězec.
- Klient doplní tento řetězec náhodnými 32 bity.
- Klient podepíše obdržený řetězec svým certifikátem.
- Klient odešle serveru obdržané zakódované zprávy.
- Server kontroluje podpis, přičemž získává původní nezakódovanou zprávu.
- Server odděluje posledních 32 bitů od přijaté nezakódované zprávy.
- Server porovnává získaný výsledek s tímto zprávou, která byla odeslána při žádosti o autorizaci.
- Pokud jsou zprávy shodné, autorizace se považuje za úspěšnou.
Ve výše uvedeném algoritmu existuje pojem certifikát. V rámci tohoto příkladu je třeba chápat určitou kryptografickou teorii. Na Habru je .
V tomto příkladu budeme používat asymetrické šifrovací algoritmy. Pro realizaci asymetrických algoritmů je třeba mít klíčový pár a certifikát.
Klíčový pár se skládá ze dvou částí: soukromého klíče a veřejného klíče. Soukromý klíč, jak napovídá jeho název, by měl být tajný. Používáme ho k dešifrování informací. Veřejný klíč lze sdílet s kýmkoli. Tento klíč se používá k šifrování dat. Takže jakýkoli uživatel může zašifrovat data pomocí veřejného klíče, ale pouze vlastník soukromého klíče je může dešifrovat.
Certifikát je elektronický dokument, který obsahuje informace o uživateli, jemuž certifikát patří, a také veřejný klíč. Mít certifikát umožňuje uživateli podepsat jakákoli data a poslat je na server, který může tuto podpisovou validaci provést a dešifrovat data.
Aby bylo možné správně podepsat zprávu certifikátem, je třeba jej správně vytvořit. Nejprve se na Ruttoken vytvoří klíčový pár a poté se veřejný klíč tohoto klíčového páru musí přivázat k certifikátu. Certifikát musí mít právě ten veřejný klíč, který se nachází na Ruttokenu, což je důležité. Pokud jednoduše vytvoříme klíčový pár a certifikát na klientské části aplikace, jak pak server může dešifrovat tuto zašifrovanou zprávu? Vždyť o klíčovém páru ani certifikátu neví vůbec nic.
Pokud se ponoříte hlouběji do tohoto tématu, můžete na internetu najít zajímavé informace. Existují certifikační autority, kterým důvěřujeme. Tyto certifikační autority mohou vydávat certifikáty uživatelům, které nainstalují na svůj server. Poté, když klient přistupuje k tomuto serveru, vidí tento certifikát a zjistí, že byl vydán certifikační autoritou, což znamená, že tomuto serveru lze důvěřovat. O tom, jak vše správně nastavit, je na internetu také spousta informací. .
Pokud se vrátíme k našemu úkolu, vypadá řešení jako zřejmé. Je třeba nějakým způsobem vytvořit vlastní certifikační autoritu. Ale před tímto krokem je nutné vyřešit, na základě čeho by certifikační autorita měla vydávat certifikát uživateli, protože o něm nic neví. (Například jeho jméno, příjmení atd.) Existuje taková věc, která se nazývá žádost o certifikát. Více o tomto standardu si můžete prohlédnout například na Wikipedii.
Budeme používat verzi 1.7 — PKCS#10.
Popíšeme algoritmus pro vytváření certifikátu na Rutuokenu (původní zdroj — ):
- Na klientovi vytvoříme pár klíčů a uložíme ho na Rutuokenu. (ukládání probíhá automaticky)
- Na klientovi vytvoříme žádost o certifikát.
- Žádost odesíláme ze klienta na server.
- Při obdržení žádosti o certifikát na serveru vydáme certifikát naší certifikační autoritou.
- Odesíláme tento certifikát zpět na klienta.
- Na klientovi uložíme certifikát na Rutuokenu.
- Certifikát by měl být přiřazen k té klíčové páru, která byla vytvořena v prvním kroku.
Nyní je jasné, jak server může dešifrovat podpis klienta, protože sám mu vydal certifikát.
V příští části podrobně probereme, jak nastavit vlastní certifikační autoritu na základě plnohodnotné kryptografické knihovny s otevřeným zdrojovým kódem openSSL.
Zdroj: habr.com
