Existují různé způsoby, kterými si uživatel může ochránit soukromý klíč proti krádeži a zneužití. Mezi ty jednodušší patří správné nastavení práv přístupu k souboru s tímto klíčem a ochrana (zašifrování) heslem, tzv. passphrase. Pro bezpečnější uložení soukromých klíčů a certifikátů a zároveň pohodlný proces autentizace dnes existují malá kapesní zařízení v různých provedeních. Jedním z nich je token do USB portu, který zde představíme.
Šifrovací token Ikey 3000 je předmět, který slouží k identifikaci svého držitele, podobně jako například známější čipové (smart) karty. K počítači se připojuje pomocí USB portu, není tedy potřeba speciální čtečka či další harware.
Instalace
Pro použití USB tokenu v Linuxu je potřeba mít funkční podporu USB hotplug, to už ale není problém většiny současných distribucí. Správnou detekci tokenu můžeme ověřit v seznamu připojených USB zařízení po zasunutí do portu.
# lsusb Bus 005 Device 003: ID 04b9:1300 Rainbow Technologies, Inc. iKey 3000 Tokendebug = 0;
Dále je potřeba doinstalovat balík OpenCT, který představuje nízkoúrovňovou vrstvu poskytující ovladače pro tokeny a čipové karty. Díky spolupráci s hotplug komunikuje i s USB tokeny a mezi podporovanými nechybí ani iKey 3000. Balíček OpenCT bývá přímo součástí distribucí, většinou i s nachystaným init skriptem, kterým spustíme službu:
# /etc/init.d/openct start
Poté můžeme vyzkoušet utilitu openct-tool a pokusit se identifikovat vložený token:
# openct-tool list 0 Rainbow iKey 3000
Pokud něco není v pořádku, je potřeba zkontrolovat konfigurační soubor /etc/openct.conf, který by měl mít nastavené v našem případě tyto parametry:
hotplug = yes; ifdhandler = /usr/sbin/ifdhandler; driver ikey3k { ids = { usb:04b9/1300, }; };
Dále budeme potřebovat systém rozšířit o vrstvu, která umožní přístup aplikací k uvedenému technickému zařízení pomocí rozhraní PKCS #15. Pro Linux máme k dispozici implementaci nazvanou OpenSC.
Po nainstalování (balíček opensc) je třeba upravit konfigurační soubor /etc/opensc.conf. Jeho výchozí obsah bývá dobře okomentovaný a zhruba nastavený v ukázkovém souboru /usr/share/opensc/opensc.conf.example. Pro začátek by mělo stačit použít nastavení v následující podobě:
app default { debug = 0; profile_dir = /usr/share/opensc; framework pkcs15 { use_caching = true; } }
Jako první pokus si můžeme otestovat například výpis všech objektů na tokenu pomocí nástroje pkcs15-tool, který slouží pro manipulaci s datovými strukturami na tokenech:
# pkcs15-tool -D
Pokud místo seznamu objektů obdržíme hlášení PKCS#15 initialization failed: Unsupported card, nesmíme brát doslovně informaci, že vlastníme nepodporovaný token. Znamená to, že ještě nebyl inicializován. Naopak pokud obsahuje nějaké objekty po předchozích použitích, je možno je zrušit a token dostat do tohoto neinicializovaného stavu příkazem # pkcs15-init -E.
Inicializace tokenu
Mějme tedy vložený neinicializovaný token. Nejdříve bude potřeba založit v něm potřebné datové struktury a přiřadit ho ke konkrétní osobě, tj. nastavit uživatelův PIN. Ve firemním nasazení je možno nastavit ještě PIN pro správce (Security Officer PIN - SOPIN), bez kterého nelze úspěšně provádět některé operace. Pomineme nyní tuto variantu a inicializujeme token bez SOPIN. K inicializaci a personalizaci slouží program pkcs15-init, provedeme tedy s jeho pomocí počáteční naformátování:
# pkcs15-init -C --no-so-pin
a založíme nový PIN:
# pkcs15-init -P --auth-id 01 --label "Vasek"
PIN může obsahovat číslice a znaky abecedy. Pokud by token používalo více lidí, může být nastaveno více PINů. Správně zadaný PIN umožňuje přístup k objektům, které jsou identifikovány stejným identifikátorem auth-id. Podobně jako např. u SIM karet, patří k PINu ještě PUK kód, který slouží k odblokování, např. po vyčerpání limitu neúspěšných pokusů.
Dále si k této nové identitě vygenerujeme dvojici RSA klíčů. Použijeme opět jednu z funkcí programu pkcs15-init, která tentokrát aktivuje vnitřní generátor klíčů v tokenu.
# pkcs15-init -G rsa/1024 --auth-id 01 --label "Vasek"
Při generování a práci s objekty je dobré pro přehled průběžně sledovat změny ve výpisu objektů na tokenu: # pkcs15-tool -D .
Pokud máme klíče, můžeme vygenerovat SSL certifikát ve formátu PEM pomocí OpenSSL, který umí komunikovat a šifrovat tokenem pomocí knihovny opensc-pkcs11.so:
# openssl OpenSSL> engine dynamic -pre \\ SO_PATH:/usr/lib/opensc/engine_pkcs11.so \\ -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD \\ -pre MODULE_PATH:/usr/lib/pkcs11/opensc-pkcs11.so OpenSSL> req -engine pkcs11 -new -key id_45 -keyform engine -out cert.pem -text -x509
Nakonec certifikát, uložený v souboru cert.pem, vložíme do tokenu:
pkcs15-init -X cert.pem --auth-id 01 --id 45
Z uvedeného postupu je patrné, že privátní klíč se vůbec nedostal mimo token, výrobce dokonce tvrdí, že ani není možnost ho přečíst, a tedy ani zálohovat. Zřejmě proto také existuje i možnost importovat privátní klíč vygenerovaný jiným (vnějším) generátorem, protože existují aplikace, ve kterých by případná fyzická ztráta nebo porucha tokenu představovala i ztrátu dat (např. šifrované soubory).
Použití
V Linuxu existuje velká řada aplikací, které umějí používat bezpečnostní hardware pomocí rozhraní a knihoven OpenSC. V první řadě mezi ně patří autentizační vrstva PAM a tedy i programy, které ji používají. Dále jmenujme OpenSSL, OpenSSH a OpenVPN pro bezpečnou komunikaci, prohlížeč Mozilla pro provoz bezpečných www aplikací, GnuPG pro podepisování zpráv, a další.
Jako poměrně jednoduchý příklad použijeme PAM modul pro OpenSC a ukážeme funkčnost tokenu na přihlašovacím mechanismu do systému. Modul pam_opensc.so by se měl do adresáře /lib/security nainstalovat jako součást opensc. Pokud ne, bývá zvlášť v samostatném balíčku nebo jako volitelný parametr při instalaci.
Token může posloužit nejen implementátorům bezpečnostních řešení ve větších projektech, ale i individuálním uživatelům. Správným nasazením se dají sjednotit různé autentizační procesy a nahradit několikeré zadávání různých hesel.
Zasáhneme tedy do souboru /etc/pam.d/system-auth a nahradíme dosavadní modul provádějící autentizaci heslem za modul pro token. V případě ponechání původního modulu by po selhání autentizace tokenem podle pořadí řádků následovala možnost dalšího mechanismu.
auth sufficient pam_opensc.so #auth sufficient pam_unix.so likeauth nullok
Nakonec v domovském adresáři každého uživatele, který bude přistupovat ke stanici, vytvoříme adresář .eid a vložíme certifikát, ke kterému se bude muset prokazovat privátním klíčem v tokenu.
mkdir /home/vasek/.eid pkcs15-tool -r 45 -o -/home/vasek/.eid/authorized_certificates chown vasek /home/vasek/.eid -R
Přepnutím do nepřihlášené konzole můžeme ihned vyzkoušet, zda se nám podařilo správné nastavení. Jako superuživatel si certifikát obdobně umístíme i do /root/.eid, abychom se mohli přihlásit i tam. Přihlašovací proces by měl vyžadovat jméno a místo klasického hesla PIN.
login: vasek Using card reader Rainbow iKey 3000 Enter PIN131 [Vasek]: linux#
Pokud není vložen token, přihlašování skončí neúspěšně. Obdobně se nyní začne chovat i přihlášení do grafického prostředí (XDM), příkaz su a spuštění programu pod jiným uživatelem.
Zařízení produkuje americká společnost SafeNet Inc., která se dlouhodobě specializuje na bezpečnost v informačních technologiích. Mezi jeho zajímavé vlastnosti patří:
- podpora v Linuxu (PKSC#15 API);
- hardwarová podpora RSA (1024bit), MD5;
- vnitřní hardwarový RSA generátor párů klíčů - privátní klíč nikdy neopouští token;
- možnost ukládat do tokenu jakékoliv jiné klíče generované pomocí softwaru;
- k dispozici volných 20 kB na EEPROM pro ukládání certifikátů a klíčů;
- bezpečný obal - k elektronice se nelze dostat bez viditelného poškození;
- Bezpečnostní evropská certifikace ITSEC E4 High, OPSEC NG;
- data na tokenu jsou chráněna PINem, který se zadává po připojení k počítači.