E‑podpis: diskriminace tučňáků?

Image of the author

Sjiamnocna @sjiamnocna

V poslední době řeším různé úřednosti. A protože jsme “líní ajťáci”, nechceme pálit energii chozením na úřady nebo poštu a raději strávíme pár hodin hledáním cesty, jak se tomu vyhnout

Kvalifikovaný elektronický podpis potřebujete v Česku pro některé hodně specifické úkony, většinou už stačí datová schránka.

Ale někdy je to zkrátka povinná výbava, např. při řízení právnícké osoby (např. s.r.o., spolek ap.).

A pak vás dostihne realita - pokud jste rozumný a samostatný tvor, který nechce mít nařízeno, jak používat svůj počítač (nebo kdy jej nepoužívat a hodit do koše!), stát s vaší existencí odmítá počítat.
Už dávno nejde jen o „několik nerdů“. Většina věcí funguje out of box a počet lidí, kteří používají Linux, roste i v souvislosti s podmínkami současné geopolitické situace a snahou o technologickou a bezpečnostní nezávislost.

Takže proč právě teď není čas na státní úrovni opustit (jednostranně) výhodné smlouvy s americkými korporáty a jít cestou otevřenosti jako to probíhá např. ve Francii?

Post signum a kvalifikovaný token pro Linux

Na stránkách PostSignum je Linux u TokenME EVO vedený jako „nepodporovaný“.
V oficiální dokumentaci je ale uvedeno, že TokenME EVO Linux podporuje.

Paradoxní je, že zrovna systém, který je v bezpečnosti první volba každého, kdo bezpečnosti rozumí, dostává od úředního šotka stopku.

Dobrá zpráva: jde to. Jen je potřeba jít trochu oklikou.

Krok 1: Vyberte kvalifikovaný prostředek

Nejdřív potřebujete zařízení, kam se certifikát uloží.

Pro svoji potřebu jsem zvolil právě TokenME EVO.

Krok 2: Vygenerujte žádost (ano, přes OpenSSL)

Oficiální cesta tlačí online formulář, který ale funguje jen na Windows:

Naštěstí je vlastně celá bezpečnost postavená nad OpenSSL, což je nativní linuxový a open source nástroj:

Poznámka: V dokumentaci je příklad s klíčem rsa:2048, ale v praxi už tak krátký klíč nesmí být použit, proto jsem použil 4096 bitů:

openssl req -out request.req -new -newkey rsa:4096 -keyout privatekey.key

Pak je potřeba nahrát žádost přes formulář pro získání ID žádosti (typicky SMS):

Po uložení přijde ID žádosti (SMS). To je klíčová informace pro vydání certifikátu.

Krok 3: Czech POINT kolečko

S ID žádosti vyrazíte na pobočku Czech POINT.

Co mít s sebou:

  • vyplněnou a vytištěnou smlouvu: Smlouva PO/PFO (PDF)
  • číslo žádosti ze SMS
  • občanku a trpělivost

Po ověření dostanete vydaný certifikát (obvykle e-mailem), který následně nějak potřebujete dostat na kvalifikovaný podpisovací prostředek - pro mě teda konkrétně TokenME EVO.

Krok 4: Linux balíčky a ovladače

Na Linuxu se hodí mít alespoň základní balíčky:

sudo apt install pcscd pcsc-tools opensc

Při troše štěstí doinstalujete dostupné ovladače / utility:

Výrobce tokenu linuxovou podporu uvádí, bohužel žádné ovladače na webu nelze najít:

Krok 5: Stažení podpisovacího certifikátu a uložení na zařízení

  • Po obdržení zařízení je silně doporučeno změnit PIN kód, který slouží k odemčení zařízení při každém použití certifikátu.

  • To je možné udělat pomocí Bit4id PKI Manageru.

  • Certifikát ve formátu *.pem potvrdíte a stáhnete z webu PostSignum (přijde Vám e-mailem po návštěvě Czech POINTu).

  • Aplikace ISignum je opět pouze pro vyvolené, proto se musíme uchýlit k alternativním řešením a Bit4id PKI Manager ani prohlížeč vkládání certifikátů do zařízení neumožňuje.

  • Pokud všechny kroky proběhly bez problémů, měly byste mít certifikáty připravené v souborovém systému. (soubory *.pem a *.crt)

Krok 6: Cesta nejmenšího odporu

  • Přihlášením k zařízení přes pkcs11-tool zjistíme aktuální stav klíčů v tokenu. Po zadání PIN kódu by to mělo vypadat nějak takto:
$ pkcs11-tool --module /usr/lib/libbit4ipki.so --list-objects --login

Using slot 0 with a present token (0x0)
Logging in to "TokenME EVO".
Please enter User PIN: 
Private Key Object; RSA 
  label:      .prekeyPS
  ID:         xxxxxxxxxxxxxxxxxx
  Usage:      decrypt, sign, signRecover, unwrap
  Access:     sensitive, always sensitive, never extractable, local
warning: PKCS11 function C_GetAttributeValue(MODULUS_BITS) failed: rv = CKR_ATTRIBUTE_SENSITIVE (0x11)

Public Key Object; RSA 0 bits
  label:      .prekeyPS
  ID:         xxxxxxxxxxxxxxxxxx
  Usage:      encrypt, veriqfy, verifyRecover, wrap, derive
  Access:     local
  • Je potřeba převést *.pem certifikát na *.der formát:
openssl x509 -in ABCDEFGH42.pem -out certifikat.der -outform DER 
  • Posledním krokem je vložení certifikátu do zařízení přes pkcs11-tool:
$ pkcs11-tool --module /usr/lib/libbit4ipki.so --login --write-object certifikat_na_token.der --type cert --id 2e7072656b65795053 --label "PostSignum Certifikat" 

Using slot 0 with a present token (0x0)
Logging in to "TokenME EVO".
Please enter User PIN: 
Created certificate:
Certificate Object; type = X.509 cert
  label:      PostSignum Certifikat
  subject:    DN: C=CZ/organizationIdentifier=NTRCZ-17131944, O=\xC5\xA0imon Jan\xC4\x8Da, OU=1, CN=Bc. \xC5\xA0imon Jan\xC4\x8Da, SN=Jan\xC4\x8Da, GN=\xC5\xA0imon/serialNumber=xxxxxxx
  serial:     0173A028
  ID:         xxxxxxxxxxxxxxxxxx

Podepisování dokumentů

  • Pro podepisování dokumentů je potřeba přidat podpis do databáze podpisů:
# Vytvoří/otevře databázi a přidá do ní tvůj Bit4Id modul
modutil -dbdir sql:$HOME/.pki/nssdb -add "Bit4Id Token" -libfile /usr/lib/libbit4ipki.so
  • Jednodušeji to ale lze udělat pomocí zobrazovače PDF Okular, který umí podepisovat dokumenty přes pkcs11-tool.

    • V menu Tools vyberete “Digitally sign” a postupujete podle instrukcí.

Krátké shrnutí

Uff!

Kvalifikovaný podpis na Linuxu zařídit jde, jen to bohužel není automatický proces.
Potřebujete:

  1. správný token,
  2. žádost přes OpenSSL (4096 bitů),
  3. nahrání žádosti pro získání ID,
  4. vyplněnou a vytištěnou smlouvu SMLOUVA O POSKYTOVÁNÍ CERTIFIKAČNÍCH SLUŽEB,
  5. návštěvu Czech POINT,
  6. základní linuxovou PKI výbavu a Bit4id PKI Manager.
  7. Nahrát certifikát do tokenu a do databáze podpisů.
  8. Podepisovat dokumenty např. přes Okular.
  9. Smazat soubory klíčů z počítače pro bezpečnost.

Není to nejkratší cesta. Je to ale funkční cesta.

Řešení

Kde je vůle, tam je cesta.

Zařízení pro podepisování by mělo být po nastavení možné v Linuxu normálně používat.

Co z toho plyne

„Nepodporujeme Linux“ v tomto kontextu často znamená spíš:

Není na to jedno velké tlačítko.

a

Nemáme čas a ochotu se tím zabývat, takže to nefunguje.