St4nd3l blog

Podivné zápisky

Použití SmartCard

2012-02-15

Pokud používáte pro přihlašováni/podpisování nějaký certifikát nebo klič. Jistě Vás již napadlo že je to vlastně jen soubor chráněny heslem a že tedy může byt klidně odcizen a zneužit. A když například ztratíte notebook s takovým souborem nemůžete si byt jisti že se nedostal někam kam neměl. V horši variantě muže byt počítač napaden a útočník má jak Váš certfikat tak heslo k němu. A že by bylo tedy fajn oddělit tyto citlivé přihlašovací od počítače a nosit je sebou nebo je mít zamknuté třeba v šuplíku. A přesně tuto možnost nám dávají eTokeny nebo SmartCard. Do těchto zařízení lze nahrát certifikát. V zařízeni je pak chráněn tento certifikát PINem. A co je hlavní certifikát (tedy jeho privátní část) již ze zařízení nedostanete. A crypto operace (podpisování, přihlašování) se provádí přímo v tokenu.

V Linuxu lze pro tokeny použít open source midleware open-sc. Midleware je vrstva díky která dělá prostředníka mezi programem a tokenem. Token jsem použil od čínské firmy Feitan a zakoupil jsem ho na gozze.eu.

PKCS15 PKCS11 a co s tím? S těmito názvy se jistě setkáte při práci s tokeny. Jednoduše lze říci že PKCS15 je formát v kterém jsou na těchto zařízeních uloženy data. PKCS11 je pak API které slouží pro komunikaci programů s tokenem/kartou. Abychom mohli začít s tokenem pracovat je nutné nainstalovat midleware. Tedy balík open-sc ten si sebou ještě dotáhne pcscd (daemon který zřistůpní token uživatelům) a pkcs11-helper. Když máme vše nainstalované stačí nastartovat službu pcscd a zasunou token.

Jestli token správně vidíme ověříme:
opensc-tool -a
Mělo by se objevit něco podobného:


Using reader with a card: Feitian ePass2003 00 00
3b:9f:95:81:31:fe:9f:00:66:46:53:05:01:00:11:71:df:00:00:03:90:00:80

Nyní tedy mužem token vymazat:

pkcs15-init -E

A vytvořit znovu strukturu:

pkcs15-init --create-pkcs15 --profile pkcs15+onepin --use-default-transport-key --pin 0000 --puk 123456 --label "Standa Schattke"
A nahrát zde třeba certifikát nebo klíč:

pkcs15-init --store-private-key somecert.p12 --format pkcs12 --label "muj certifikat" --auth-id 01
pkcs15-init --store-private-key .ssh/id_rsa --label "ssh"  --auth-id 01

Vygenerování noveho klíče:

pkcs15-init -G RSA/2048 --label 'ssh' --auth-id 01

Vypsat si seznam objektů na tokenu můžete například:


pkcs15-tool -D

Když již máme data na tokenu je dobré je začít nějak používat. Co se tyka ssh je možné si token přidat do ssh-agenta nebo použit přimo v ssh příkazu. Přidání do ssh agenta:

ssh-add -s /usr/lib/opensc-pkcs11.so

Odebrání ze ssh agenta (pozor nefunguje -d nebo -D):
ssh-add -e /usr/lib/opensc-pkcs11.so

Přímé použití s ssh:
ssh -I /usr/lib/opensc-pkcs11.so user@muj.server

U Firefoxu stačí načíst /usr/lib/opensc-pkcs11.so jako další Security Device.

Pokud chceme změnit/odblokovat pin mužem použít pkcs15-tool:


pkcs15-tool --change-pin
pkcs15-tool --unblock-pin