SecureStore PKCS11 knihovna
V roce 2009 jsem externě spolupracoval s První certifikační autoritou (I.CA) na projektu SecureStore PKCS11 knihovny. V rámci tohoto projektu byla vyvinuta knihovna implementující PKCS#11 rozhraní pro komunikaci s čipovými kartami běžícími na operačním systému Starcos. Knihovna byla realizována v jazyce C++ na platformě Microsoft Windows.
Knihovna umožňuje různým programům spolupracovat s čipovými kartami pro potřeby digitálního podepisování, šifrování dat, ukládání osobních certifikátů, apod. Čipová karta funguje jako tzv. „bezpečnostní token“, tj. hardwarové zařízení, na které lze bezpečně uložit osobní privátní klíče, se kterými pak můžeme např. digitálně podepisovat různá data a dokumenty. Pro komunikaci s takovýmto zařízením bylo RSA laboratoří vyvinuto standardizované rozhraní zvané PKCS#11. Knihovna tedy slouží jako prostředník v komunikaci mezi programem a čipovou kartou. Příkladem programu využívajícího rozhraní PKCS#11 je prohlížeč Mozilla Firefox nebo poštovní klient Thunderbird, který token využívá při podepisování emailů.
Během implementace knihovny jsme často „bojovali“ s jistou vágností specifikace rozhraní PKCS#11, která je napsána natolik obecně, aby pokryla nejrůznější bezpečnostní hardware s rozličnými funkcemi. Proto je také pochopitelné, že knihovna implementuje jen část celé (téměř 400stránkové) specifikace, která je pro potřeby klienta užitečná.
Směrem „dolů“ (tj. k vrstvě ovladačů hardware) knihovna využívá další „Core“ knihovny vyvinuté v I.CA. Toto rozvrstvení kódu bylo ze strany I.CA zvoleno záměrně proto, aby bylo možné sjednotit různá rozhraní pro komunikaci na nějaké společné, stále ještě relativně vysokoúrovňové vrstvě kódu. Kromě PKCS#11 rozhraní je v I.CA vyvíjena také knihovna pro nativní rozhraní Microsoft Windows – CryptoAPI.
Hlavní vlastnosti aplikace
- Knihovna podporuje poměrně velkou část specifikace PKCS#11: správu session, zalogování ke kartě, vylistování seznamu dostupných čteček a karet, ukládání objektů na kartu (tj. především certifikátů) a jejich zpětné prohledávání a získávání, inicializaci a nastavování PINu ke kartě, generování klíčů na kartě, digitální podepisování, hashování a šifrování dat.
- Knihovna je testovaná pro spolupráci s webovým prohlížečem Mozilla Firefox, emailovým klientem Thunderbird a funguje také jako nízkoúrovňový ovladač pro Javovský wrapper PKCS#11 rozhraní, tj. zpřístupňuje funkčnost čipových karet programům vyvinutým v Javě. V praxi by knihovna měla fungovat téměř s libovolným programem komunikujícím pomocí PKCS#11 rozhraní.
- Podle nastavení v registrech Windows knihovna případně generuje podrobný log soubor se záznamem své činnosti.
- Samozřejmostí bylo dodržení štábní kultury obvyklé v I.CA (tj. pravidel pro vizuální rozvržení kódu a pojmenovávání objektů v kódu), přestože se poměrně výrazně lišila od mých osobních zvyklostí.
Technologie
- Knihovna je vyvinuta v jazyce C++ na platformě Microsoft Windows (v programu Visual C++ Studio).
- Zdrojový kód: cca 11000 řádků kódu
