Administracija servera uz ličnu kartu
Tokom prethodnih godinu dana, radio sam na kreiranju PKCS#11 modula otvorenog koda za srpske lične karte. Motivacija za kreiranje modula bila je pre svega omogućavanje Linux i macOS korisnicima da se uloguju na državne portale poput eUprave ili ePoreza. Međutim, kako je PKCS#11 standard veoma rasprostranjen, neki načini upotrebe otvorili su se o kojima i nisam razmišljao kada sam počeo da radim na modulu. Pre svega, to je potpisivanje (PDF, XML,…) dokumenata, za koje se ispostavilo da radi bez bilo kakvih problema.
Pre neki dan mi je pala na pamet još jedna upotreba: korišćenje SSH-a uz ključeve sa lične karte. Lična karta je zgodna za upotrebu, jer (u teoriji) privatni ključ nikad neće biti izložen, a sama lična je uvek pored korisnika.
Demo time
Naredni redovi važe za Unix sisteme. Na Windows-u treba koristiti modul koji se instalira uz MUP-ov Čelik jer srb-id-pkcs11 za sada ne podržava Windows. Sve ostalo je isto.
Preuzmite srb-id-pkcs11, i povežite ličnu kartu sa računarom.
Prvo je potrebno pročitati javni ključ sa tokena (tj. sa lične karte). To se može lako uraditi sa ssh-keygen komandom (nakon -D treba staviti putanju do preuzetog modula):
ssh-keygen -D ./libsrb-id-pkcs11.so -e
Ispisaće se jedan ili dva javna RSA ključa. Ključevi počinju sa ssh-rsa, a nakon same vrednost ključa sledi opis (/C=RS/serialNumber=...) koji se može pri kopiranju promeniti u nešto jednostavnije.
Jedan od ključeva (bilo koji) je potrebno postaviti na server na koji želimo da se ulogujemo: ključ treba dopisati u ~/.ssh/authorized_keys na serveru. Neke platforme, poput DigitalOcean-a i cPanel-a, imaju web interfejs kroz koji se može dodati ključ.
Nakon toga, možemo koristi ličnu kartu za ulazak na server
ssh -I ./libsrb-id-pkcs11.so root@example.com
Pri svakom logovanju, korisnik će biti upitan za PIN lične karte (dobija se u koverti prilikom preuzimanja lične karte, a može se i promeniti korišćenjem (Baš)Čelika).
Naravno, pametnije je smestiti libsrb-id-pkcs11.so na neku određenu lokaciju i ne treba koristiti root, kako sam ja prikazao u primeru. U lokalnoj SSH konfiguraciji može se podesiti kad i koji ključevi se učitavaju sa modula (tako da ne mora da se kuca -I ./libsrb-id-pkcs11.so pri pokretanju ssh-a). U konfiguraciju je dobro postaviti i IdentitiesOnly yes.
Inače, postupak je isti i za ostale tokene koji podržavaju PKCS#11 (npr. YubiKey).
Da li je ovo bezbedno
Onako.
SSH, RSA, PKCS#11, pametne kartice, su tehnologije koje su u teoriji bezbedne. Ipak postoji par razloga zašto ovo nije na “enterprise” nivou:
- Gemalto, proizvođač pametnih kartica koje se koriste za lične karte karte u Srbiji, ima istoriju katastrofalnih propusta pri proizvodnji.
- 2048-bitni RSA ključ, koji se nalazi na ličnim kartama, nije više preporučen (iako je siguran još ~4 godine).
- padding algoritam koji je trenutno implementiran u modulu (a u skladu sa originalnim modulom), nije odavno siguran.
- činjenica da sam ja sam implementirao modul, čitajući samo standard star 10 godina, bez prethodnog iskustva u primenjenoj kriptografiji.
Svejedno, upotreba je zanimljiva i može poslužiti za pristupačan ulazak u svet asimetrične kriptografije i hardverskih tokena. Npr, studenti koji dobiju SSH pristup fakultetskom serveru (kao nekad na MATF-u, nadam se da još to omogućavaju) mogu da probaju ovaj metod.
O ličnim kartama i kriptografiji
Ostaje gorak ukus, zašto država nije bila otvorenija sve ove godine o tehnologijama koje se koriste na ličnim kartama. Zajednica bi pre 10 godina napravila modul otvorenog koda, rešila sama sve moguće probleme, i našla bezbroj upotreba. Ovako smo se godinama mučili sa Njindows-om i Čelikom.