Od 1.7.2018 se vydává občanský průkaz s elektronickým čipem, umožňujícím nahrátí kryptografických klíčů spolu s certifikátem, který lze použít k „autentizaci vůči informačním systémům, např. webovým stránkám, internetovým službám“ 01. Pojďme se podívat, jestli je možné využít tuto kartičku jako úložiště pro ssh klíče..
Pořídit hardwarový kryptografický token není dnes ani obtížné, ani příliš drahé. Nicméně proč pořizovat další kus plastu, když OP nosí většina z nás u sebe? Cena široce známého tokenu Yubikey 5 se pohybuje mezi jedním a dvěma tisíci korun, poplatek za výměnu OP je v řádu jednotek stovek korun a mít u sebe platný průkaz je celkem běžnou záležitostí.
Občanský průkaz, model s čipem zdroj: MVČR
Současný model občanského průkazu umožňuje[02] skrze aplikaci eObčanka uložení kryptografických klíčů a certifikátů. Současně, součástí instalace eObčanky jsou ovladače čipu občanského průkazu pro práci s certifikáty standardu PKCS#11[03].
Úložiště certifikátů implementující rozhraní PKCS#11 je možné využít k uložení ssh klíče[04].
Zákon hovoří jasnou řečí, dle [05] se občan se dopustí přestupku tím, že:
(16) neoprávněně zapíše, předá, zveřejní, zablokuje, zlikviduje nebo jinak neoprávněně zpracovává údaje vedené v kontaktním elektronickém čipu.
Je tedy nanejvýše vhodné se ujistit, zda naší aktivitou neporušujeme výše citovaná ustanovení. Pro vyloučení všech pochybností, následující návod je primárně určen pro s občanským průkazem kompatibilní čipovou kartu.
Pomocí utility ssh-keygen vytvoříme ECDSA klíč ve formátu pem.
$ ssh-keygen -t ecdsa -m pem -f /home/jose/projects/key_for_ssh2/key2.key Generating public/private ecdsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/jose/projects/key_for_ssh2/key2.key. Your public key has been saved in /home/jose/projects/key_for_ssh2/key2.key.pub. The key fingerprint is: SHA256:3QDuOXtezo+2d5pTWhqWG7wuQUyWXgPwBQuhS6rfe60 jose@laptop The key's randomart image is: +---[ECDSA 256]---+ | . +oo+. | | . o o+oo | | + .=o. . | | + + o+ | | . S .... . | | . o . * o| | . . ...o X | | . . o.++.B..| | . ooEo=*=+ | +----[SHA256]-----+ $
Dle dostupné dokumentace obslužná aplikace k čipové kartě podporuje nahrátí certifikátu, nikoliv samotného klíče, vytvoříme si tedy self-signed certifikát, obsahující v předešlém kroku vygenerovaný klíč:
$ openssl req -key ./key2.key -new -nodes -x509 -days 365 -out key2_certificate.pem You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:CZ State or Province Name (full name) [Some-State]:Czechia Locality Name (eg, city) []:Prague Organization Name (eg, company) [Internet Widgits Pty Ltd]:N/A Organizational Unit Name (eg, section) []:N/A Common Name (e.g. server FQDN or YOUR name) []:N/A Email Address []:test@mailinator.com $
Zde je nutné poznamenat, že i když specifikujeme platnost certifikátu, při ssh autentizaci se tato neověřuje, a tudíž platnost certifikátu v žádném případě nelze považovat jako relevantní pro bezpečnost.
Vytvořený certifikát zabalíme do archivu pkcs12, a pokud plánujeme vzniklý soubor archivovat, zvolíme dostatečně bezpečnou passphrase.
$ openssl pkcs12 -export -inkey key2.key -in key2_certificate.pem -out key2_archive.p12 Enter Export Password: Verifying - Enter Export Password: $
Stáhneme a nainstalujeme si aplikaci eObčanka, v současné době dostupné jako „Instalační balíček eObčanka pro Linux“ v podobě deb balíku. Postup jsem vyzkoušel na distribuci (K)ubuntu 19.10.
Zjistíme cestu ke knihovně poskytující PKCS11# rozhraní:
$ dpkg -c ./eObcanka.deb | grep libeop2v1czep11.so -rw-r--r-- root/root 2058136 2019-02-19 12:22 ./usr/lib/x86_64-linux-gnu/libeop2v1czep11.so.1.5.19.0218 -rw-r--r-- root/root 256 2019-02-19 12:22 ./usr/local/etc/crplus/sigs/x64/libeop2v1czep11.so.sig lrwxrwxrwx root/root 0 2019-09-26 13:46 ./usr/lib/x86_64-linux-gnu/libeop2v1czep11.so -> /usr/lib/x86_64-linux-gnu/libeop2v1czep11.so.1.5.19.0218 $
Jak je vidno výše, soubor, resp symlink vedoucí na skutečný soubor je nainstalován zde:
/usr/lib/x86_64-linux-gnu/libeop2v1czep11.so
Čipovou kartu zasuneme do kompatibilní čtečky, použil jsem vestavěnou smart-card čtečku v mém laptopu a spustíme aplikaci „eObčanka – Správce karty“, kde vidíme dostupné kontejnery:
eobčanka – detail čipové karty
Na příkladu výše vidíme, že máme dostupné čtyři kontejnery pro klíč ECC o maximální velikosti 521 bitů.
V souladu s příručkou k aplikaci provedeme „Import klíče“. Aplikace si vyžádá PIN ke kartě, nahraje do karty certifikát, a při pokusu o reload nejspíše spadne. Aplikaci nastartujeme ještě jednou, a měli bychom nově vidět obsazený kontejner:
eObčanka – náš 256b certifikát je v prvním „růžovém“ kontejneru
Ověření provedeme utilitkou ssh-keygen za použití .so knihovny zjištěné výše. Knihovna se nás skrze ssh-keygen zeptá na PIN k čipové kartě, a vypíše jeho veřejnou část:
$ ssh-keygen -D /usr/lib/x86_64-linux-gnu/libeop2v1czep11.so -e Enter PIN for 'eOP2v1 CZE 123123123': ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFPXGcLyE8bWDvSzQ7ah2Lg2vTIQaHtbIp7ODtNN/IAXbGmoCBJyQ+/VvWZ3keccQDWVIyHye6WopreWBvRhX1Q= $
obsah by měl být identický s *.pub souborem vygenerovaným příkazem ssh-keygen v prvních krocích tohoto návodu. Identifikační řetězec na konci klíče je však oříznut:
$ cat key2.key.pub ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFPXGcLyE8bWDvSzQ7ah2Lg2vTIQaHtbIp7ODtNN/IAXbGmoCBJyQ+/VvWZ3keccQDWVIyHye6WopreWBvRhX1Q= xxx@xxxxxxxx $
Praktické využití je již nejspíše zřejmé, na serveru, ať už v souboru authorized_keys, nebo snad více sofistikovaných řešení např. pomocí LDAP zadefinujeme veřejnou část klíče, a měli bychom být schopní se přihlásit klíčem na čipové kartě:
user@laptop:~$ ssh -I /usr/lib/x86_64-linux-gnu/libeop2v1czep11.so user@server Enter PIN for 'eOP2v1 CZE 123123123': Linux server 3.16.0-10-amd64 #1 SMP Debian 3.16.74-1 (2019-09-24) x86_64 user@server:~$
Nechám již na fantazii čtenáře, jak libeop2v1czep11.so použít automaticky.
Jako poslední krok není na škodu bezpečně zničit veškeré privátní klíče, které jsme vytvořili v průběhu tohoto postupu. Budou-li se nám válet na lokálním disku, myšlenka použití čipové karty jako relativně bezpečného úložiště přijde vniveč. Popřípadě, dle Vaší zálohovací politiky, zvažte zašifrování a odzálohování klíčů na bezpečné úložiště.
Já ji nemám ale měl bych dotazy :
1) Takže podle zveřejněného screenu tam může být max 16 klíčů?
2) Ten první RSA 2048b je vygenerovaný od policie?
3) Co ty ostatní RSA až 4096 bitů, ty lze nahrát taky ?
Do policejního psacího stroje se čipová občanka strčit nedá :-) od policie tam nahraté jistě nic není. Pokud tam někdo něco nahrává tak je to stát jako takový (myslím v základu když ji dostanete).
> Takže podle zveřejněného screenu tam může být max 16 klíčů?
V manuálu k aplikaci je uvedeno, že kapacita karty (množství "kontejnerů") se může měnit dle verze čipu v občance. Já sám jsem kartu zaplnit nezkoušel, už proto, že "elektronický podpis" má užší význam právní než technický, a rád bych se vyhnul "neoprávněnému zápisu" o kterém jsem se zmínil, že je zakázaný.
> Ten první RSA 2048b je vygenerovaný od policie?
nn, to je tzv. "komerční" certifikát který používám v thunderbirdu pro S/MIME podpisy a krypto. K ssh autentizaci lze použít také, ale v systémech které administruji používám eliptické křivky.. Do karty jsem si ho nahrál skrze Thunderbird a jeho GUI, kam jsem přidal /usr/lib/x86_64-linux-gnu/libeop2v1czep11.so jako security device.
> Co ty ostatní RSA až 4096 bitů, ty lze nahrát taky ?
Nezkoušel jsem. Pokud vás to opravdu zajímá, tak dejte vědět a zkusím to.
A neslo by obcanku presvedcit, aby klic vygenerovala sama? Pak by se ten privatni klic vubec nikdy nedostal mimo ni, coz je podle me idealni stav...
souhlas, a věřím, že slušná karta tohle umí.
Chtěl jsem se ale vyhnout neoficiálním nástrojům, abych se nedostal do nějakého nedefinovaného stavu. (vzpomeňme si např. na INkartu s expirovaným kuponem která shazovala průvodčím POPky :) )
To bych si netroufl, protože nemáš jak zjistit, že ten vygenerovaný klíč není backdoornutý.
//CAPTCHA pro přihlášené? srsly?
Pro standardní S/MIME klíče (pro podepisování resp. autentizaci/šifrování) se to tak dělá, bez toho by se ty klíče nedaly použít pro kvalifikovaný elektronický podpis (tam je potřeba zaručit, že privátní klíč je jen na bezpečném zařízení). Je to hlavní výhoda toho čipu v občance, že spolu s občankou dostanete i kvalifikovaný prostředek na vytváření podpisů.
> Jako poslední krok není na škodu bezpečně zničit veškeré privátní klíče, které jsme vytvořili v průběhu tohoto postupu. Budou-li se nám válet na lokálním disku, myšlenka použití čipové karty jako relativně bezpečného úložiště přijde vniveč.
Tohle není moc rozumná rada. Pokud se stane, to že si občanku poškodíte nebo ztratíte, tak máte po klíčích. Daleko rozumnější mi přijde kliče zašifrovat a dát na nějaké bezpečné místo.
Jinak netušíte kolik zápisů ten chip vlastně vyrdží? Ptám kvůli tomu, že jsem dřív používal yubikey s opengpg appletem. Bohužel se mi cca po roce a půl pokazil a myslím si, že na vině bylo to, že si ukládal počet použítí klíče přímo do paměti chipu. Je navíc možné, že to dělal hloupě a každý zápis fyzicky zapsal na stejné místo v paměti. Tohle je v případě tokenu poměrně nešťastná věc, protože pokud např. pracujete jako vývojář, tak není problém vytvořit přes den stovky zápisů (gpg podpisy + ssh spojení na git servery).
> Daleko rozumnější mi přijde kliče zašifrovat a dát na nějaké bezpečné místo.
Tady záleží na bezpečnostní a zálohovací politice. V kontextu infrastruktury ve které pracuji jsou klíče spotřební materiál svázaný s hardwarem, a dojde-li ke zničení, je poměrně triviální vytvořit a nasadit nový key-pair.
Každopádně toto nemusí vyhovovat všem, a doplnil jsem tedy vaši myšlenku do blogpostu včetně reference na váš příspěvek.
To neni dobry napad, nekde ukladat kopii privatniho klice pro SSH. Neni k tomu duvod.
To ze se nekam nedostane, je daleko lepe resitelne tim, ze existuje vice ruznych autorizovanych klicu. Ma to dobry duvod. Pokud je najake zrizeni kompromitovane, pripadne rovnou ukradene, neni problem ten konkretni klic smaznout ze seznamu autorizovanych a hotovo. Neni treba sahat jinam.
> Jinak netušíte kolik zápisů ten chip vlastně vyrdží?
zkusil jsem použít nástroje z balíků okolo opensc (open Smart Card) ale karta není rozpoznána. Tzn. k techničtějšímu datasheetu jsem se nedostal.
Jako kompaktní malinkou USB čtečku eObčanky i všech klasických ID1 čipových karet doporučuji estonskou +iD - https://www.xtel.cz/id (a během Cyber Monday se slevou 20 %). Kukněte. Bez problémů funkční na všech Linux distros.
Nicméně proč pořizovat další kus plastu, když OP nosí většina z nás u sebe?
Snad jen k této větě bych měl připomínku. Ten, kdo řídí auto, většinou jezdí jen s řidičákem - je to doklad totožnosti ČR a je zbytečné s sebou vozit dvě kartičky (OP+ŘP). Ale to opravdu jen na okraj, ten kdo bude chtít eObčanku používat jako úložiště, si ji jistě rád vezme s sebou navíc.
Len potom bacha pri ceste na Slovensko. Netusim, aka ju u nas presne legislativna uprava (teda ci je vodicak/ridicak plnohodnotny identifikacny doklad) ale nasi policajti pri kontrole vyzaduju aj obciansky preukaz.
Tady si dovolím nesouhlasit. ŘP rozhodně není dokladem totožnosti, maximálně tě dle něj PČR může snadněji ztotožnit, ale to může udělat dokonce i bez jakéhokoliv dokladu, neboť již není povinnost u sebe OP nosit. Ovšem také se ti může stát pokud OP nemáš a budeš na příslušníka třeba drzý, že tě příslušník bude ztotožňovat nějakou tu hodinku na služebně.
Na poště jim to k prokázání toho že jsi kdo tvrdíš pro vydání doporučeného psaní také postačí, ale tam kde je opravdu vyžadován doklad totožnosti (např. u soudu, v bance, na celní kontrole atd.) ti bude řidičák plat prtný.
ridicak opravdu dokladem totoznosti neni. neni mozne ho tak pouzit, a zadna instituce ho jako doklad totoznosti neuznava.
Ale houby, podle ŘP Vás ověří soud, notáři ověří podpis atd. Občanský průkaz nemá v českém právním řádu žádnou speciální roli. Je to jeden z úředních dokladů, na kterém je podobenka. Dalšími jsou např. cestovní pas, zbrojní průkaz atd.
Viz třeba zde: http://www.enotar.cz/overovani-listin-a-podpisu/
Občanský průkaz bylo nutno nosit při sobě, ale to padlo někdy v devadesátých letech. Dnes u sebe nemusíte mít žádný doklad totožnosti, jen u speciálních činností. Řízení, nebo při nošeni zbraně - ale v obou případech slouží řidičský / zbrojní průkaz zároveň ke ztotožnění.
Toto je mýtus, který se v lidech třicet let drží.
K prokázání totožnosti v zásadě potřebujete prokázat své jméno, příjmení, adresu bydliště a datum narození.
OP má v této věci zvláštní postavení z toho titulu, že obsahuje všechny tyto potřebné údaje, a podle fotky na něm ověří, že je OP váš. Na rozdíl od vámi zmiňovaného pasu nebo ŘP, kde chybí např. adresa trvalého pobytu, vás lze pomocí OP ověřit "offline".
To, že k prokázání můžete použít třeba ten ŘP, je pravda, ověřující osoba se Vás zeptá ještě na adresu TP, ověří to v evidenci obyvatel a když bude vámi proklamovný údaj sedět s tím co zjistí, může vás považovat za ověřeného. Ale na to potřebuje přístup do evidence obyvatel a vaše prohlášení o adrese. Stejně tak vás může ověřit bez dokladu prostě tak, že se vás na dané údaje zeptá a ověří si je včetně vaší podoby v evidenci.
Samozřejmě se může spokojit třeba jen s vaším jménem, ale pokud by se později ukázalo, že s daným jménem existuje více osob, bude mít taková osoba problém s prokazováním, že jste tam byl identifikován vy, a ne váš jmenovec... Čtyřkombinace uvedená v úvodu je považována za dostatečně unikátní ergo postačující k plnohodnotnému ověření.
To má několik zásadních problémů:
1. Adresa trvalého pobytu je čistě evidenční, pro identifikaci nemá žádnou roli.
2. Adresa bydliště != adresa trvalého pobytu. Občanský zákoník obecně pracuje hlavně s bydlištěm (s adresou, kterou sám občan dobrovolně uvádí), trvalý pobyt řeší zákon o evidenci obyvatel a pracuje s ním spíš menšina dalších zákonů
3. Zcela dobrovolně nemusíte mít trvalý pobyt zapsán, můžete být evidován na ohlašovně (ohlašovna nenahrazuje trvalý pobyt, viz. zákon o evidenci obyvatel)
4. Pro identifikaci osoby, když už, slouží daleko častěji místo narození - to je během života neměnné a je tím dán pevný odkaz na matriku, kde jsou o občanovi vedené prvotní záznamy
5. Cizinec může mít český ŘP, ale nemusí mít trvalý pobyt v ČR - a adresa mimo ČR je stejně orgánům (opět) k ničemu
6. K identifikaci beze sporu slouží i cestovní pas - a v cestovním pase trvalý pobyt ani bydliště uvedeny nejsou (zatímco datum a místo narození ano)
7. Hlavně: místo narození v ŘP uvedené JE
Takže proto ŘP nebo zbrojní průkaz, nebo cestovní pas - všechny tyto doklady plně identifikují osobu.
Ještě nějaké odkazy:
https://www.pardubice.eu/urad/konik/spravni-agendy/prestupky/jake-doklady-musim-mit-u-sebe-pri-rizeni-motoroveho-vozidla/
(Dle zákona nemusíte mít občanský průkaz, ale je vhodné ho mít při sobě také.)
https://www.klikpojisteni.cz/rizeni-vozidla-jake-doklady-mit-u-sebe/
(V zákoně sice není doslovně uvedeno, že je řidič povinen při sobě občanský průkaz mít, je ale doporučováno nosit ho (nejen při řízení) neustále při sobě.)
http://www.1227.cz/aktuality/doklady-pri-rizeni-vozidla-jake-u-sebe-mit-papiry-a-ktere-muze-chtit-mestska-policie
(Zákon o provozu na pozemních komunikacích doslovně neuvádí, že je řidič povinen mít při sobě občanský průkaz. Jste ovšem na vyzvání povinní prokázat svoji totožnost, a to buď prostřednictvím občanského průkazu, nebo pasu. Alternativně poslouží i řidičský průkaz (který stejně policii předkládáte), v krajním případě mohou policisté ověřit totožnost podle údajů z evidence obyvatel. Podle Nejvyššího správního soudu dokonce stačí pouze udat jméno, příjmení a datum narození.)
Možná bych zkusil ten certifikát vygenerovat s platností pár dnů a ověřit jak se to zachová po jeho vypršení. Aby se náhodou nestalo, že karta k tomu certifikátu zařízne přístup, protože přeci vypršel...
Zdravím. Podnětný článek. Mám biometrickou občanku. Na ní jsem hned první den nainstaloval 3 letý certifikovaný podpis od PostSignum. mají na to šikovnou utilitu. Dotaz. Vygeneroval jsem podle tohoto návodu klíč rsa:4096 a v pohodě to na Woknech 10 nacpal do eOP. Tak a teď otázka. Tak moc se v tom zase nevyznám. Ale mám doma asi 10 linuxových věcí. Například raspbeery, těch mám hafo. Do nich lezu cestou putty a winscp. Neexistuje možnost jak vygenerovat a uložit na eOP klíče které používá putty a winscp tak abych měl klíče na eOP a dostal se na vlastní zařízení odkudkoliv? Jde to?