HST
Väestörekisterikeskus tarjoaa Suomessa henkilön sähköisen tunnistamisen (HST, eng FINEID) ratkaisua sirullisella henkilökortilla. Kortin myöntää poliisi. Henkilökortilla on julkisen avaimen menetelmään perustuva laatuvarmenne. Varmenteen avulla voi tunnistautua, allekirjoittaa ja salata dokumentteja ja viestiliikennettä.
Peruskäyttäjän tehtävälista
Vaikka sivulla on paljon asiaa, ei tämä oikeasti niin vaikeaa ole, lyhyesti:
- Hanki henkilökortti. Sitä voi anoa paikalliselta poliisilta, toimitusaika kaksi vkoa.
- Hanki kortin lukijalaite, tarkasta tuetut mallit ennen ostamista.
- Päätä kumpaa käytät: pcscd (yleisempi) vai openct?
- Tarvittaessa asenna vaaditut paketit ja konfiguroi ne (lähinnä vanhat lukijat).
- Käy tarvitsemasi sovellukset läpi ja konfiguroi ne.
- Testaa ja käytä. Testaamiseen voit käyttää fineid.fi testisivua.
Arkkitehtuuri
Sovellusohjelma tarvitsee ohjelmointirajapinnan (API) pystyäkseen keskustelemaan älykortin kanssa. RSA Laboratories on määritellyt C-ohjelmointirajapinnan niin sanotuille kryptograafisille tokeneille nimeltä PKCS#11. Se on 11. osa RSA Laboratoriesin sarjassa Public Key Cryptography Standards ja tunnetaan myös lempinimellä Cryptoki (väännös sanoista Cryptographic Token Interface). Cryptoki on tyypillisesti toteutettu ns. pluginina (.so-tiedosto). Useampi sovellus voi käyttää Cryptoki-rajapintaa rinnakkain; kirjaston tehtävänä on synkronoida pääsy yksittäiselle tokenille. Cryptoki pystyy myös hallitsemaan useampaa järjestelmään liitettyä tokenia. OpenSC-ohjelmisto sisältää Cryptoki-toteutuksen jaettuna kirjastona nimellä opensc-pkcs11.so.
PKCS#11-kirjaston ja lukijan välille tarvitaan vielä ns. middleware, josta on avoimena lähdekoodina kaksi vaihtoehtoista toteutusta: PCSC-lite tai OpenCT.
PC/SC (Personal Computer/Smart Card) on alunperin Microsoftilta tullut aloite, joka määrittelee yhtenäisen, laitteistosta riippumattoman, rajapinnan älykorteille. PC/SC:n ja Cryptokin erona on, että PC/SC määrittelee alemman tason rajapinnan älykorteille yleensä, kun taas Cryptoki määrittelee rajapinnan julkisen avaimen cryptotokeneille, jotka eivät välttämättä ole edes toteutettu älykortteina.
OpenCT on OpenSC:n kehittäjien kehittämä "liima" ylemmän tason Cryptoki-kirjaston ja laitteiston välillä. OpenCT on suoraviivaisempi vaihtoehto PC/SC:lle. Se pystyy käsittelemään lukijoita suoraan, kun taas PC/SC (PCSC-lite) tarvitsee erikseen vielä lukijalle ajurin. USB-lukijoilla käytetään CCID-ajuria. Toisaalta OpenCT ei toteuta PC/SC-rajapintaa, joten sitä ei voi käyttää jos sovellus on kirjoitettu käyttämään PC/SC-rajapintaa. Nykyään sen kehitys on pysähtynyt ja siten laitteisto- ja yhteisötuki on heikentynyt.
Alla on esitetty kaavioina yllä mainitut kaksi ohjelmistovaihtoehtoa:
Laitteet
Korttia varten tarvitaan kortinlukija ja lukijaan sopiva ajuri. Lukijoita on pääasiassa kahta tyyppiä. Ulkoinen, tyypillisesti USB-väylään liitettävä lukija, sekä joissakin kannettavissa tietokoneissa oleva sisäinen lukija. Toiset esim kannettavan tietokoneen laajennuskorttipaikkaan sopivat lukijat näkyvät USB-väylässä ja toimivat sen mukaisesti. Hinnat vaihtelevat mallista ja ostopaikasta riippuen, nykyaikaisen USB-lukijan hinta vaihtelee kuuden ja 25 euron välillä.
Nykyaikaiset lukijat
Kun on hankkimassa USB-lukijaa, kannattaa valita ns. CCID (Circuit Card Interface Device) -speksin mukainen lukija. CCID on USB-väylän yhteyteen määritelty ns. Device Class -määrittely, joka määrittelee yhteisen protokollan eri valmistajien USB-lukijoille.
Esimerkkejä CCID-protokollan mukaisista lukijoista ovat:
- Omnikey 1021, 3021, 3121, 4321 ym (4040 varauksella).
- SCM SCR 3310
- Dellin tiettyjen USB-näppäimistömallien integroidut lukijat
Vanhemmat lukijat
Aikanaan valtaosa ensimmäisistä älykorttilukijoista oli RS-232 pohjaisia ja siten niiden käyttöönotto oli myös hieman työläämpää. Ensimmäiset USB-lukijat olivat myös RS-232 laitteita, niissä oli vain sisäinen USB-RS232 adapteripiiri (usein Prolific PL2303, pl2303 ajuri) joten laite lopulta näkyy yhtenä ttyUSB<n>-laitteena ajurinsa perusteella ja pitää siten ottaa käsin käyttöön.
Ennen USB-laitteiden CCID-määrittelyn valmistumista jokainen valmistaja käytti omaa protokollaa; näitä vanhempia lukijoita näkee vielä silloin tällöin.
- Towitoko ChipdDrive-micro 130 - USB-RS232 emulaatiolla oleva ihan toimiva lukija jos jakelu tukee.
- Towitoko ChipDrive Extern 330 - Sama sähköisesti kuin ChipDrive-micro.
Tietyt lukijalaitteiden brändit ovat vaihtuneet kun firmat ovat ostelleet toisiaan.
Towitoko ChipDrive
Ei asennu automaattisesti, tehtävä seuraavat toimenpiteet käsin.
openct:
Poista /etc/openct.conf
tiedostosta kommentointi seuraavan lohkon osalta:
#reader towitoko { # driver = towitoko; # device = serial:/dev/ttyS0; #};
Varmistu, että device osoittaa oikeaan laitteeseen. (esim ttyUSB0). Käynnistä openct palvelu uudelleen.
pcscd:
?
Ohjelmistot
Ajurit ja middleware
Kortin käyttö edellyttää kortinlukijaa sekä asennettua kortinlukijaohjelmistoa. Ohjelmistoksi on olemassa kaksi vaihtoehtoa:
- Avoin OpenSC sekä siihen liittyvät työkalut ja kirjastot
- Kaupallinen mPollux Digisign Client
OpenSC
Avoimessa projektissa kehitettävä OpenSC-ohjelmisto on maailmanlaajuisesti käytössä oleva älykorttiohjelmisto. Se tukeutuu yleensä pcsc-lite laitteistorajapintaan joka toteuttaa PC/SC määritykset. Projektin oma vastaava rajapinta openct on nykyään jo harvemmin käytössä.
Joissakin Linux-jakeluissa on älykorttien käsittely on integroitu toimivaksi kokonaisuudeksi, joiden käyttöönotto parhaimmillaan edellyttää ainoastaan lukijan kytkentää ja WWW-selaimen asetusten asettamista.
OpenSC:lle täysin vaihtoehtoinen ratkaisu on VRK:n jakelema kaupallinen mPollux jonka on kehittänyt Fujitsu Services Oy. Sen arkkitehtuuri- ja jakelutuki on rajoittunut eikä lähdekoodi ole julkisesti saatavilla.
mPollux Digisign Client
Väestörekisterikeskus tarjoaa maksutta Fujitsu Services Oy:n mPollux Digisign Client -kortinlukijaohjelmiston henkilökortin käyttäjille. VRK:n WWW-sivuilta on mahdollista ladata ohjelmisto RHELille, Suselle ja Ubuntulle. Paketit toiminevat myös monissa niille sukua olevissa jakeluissa.
Tästä käkättimestä ei ole 64-bittistä versiota olemassa eikä sitä tiettävästi ole saatavilla minkään Linux-jakelun virallisesta paketinhallinnasta. Käyttäjän tulee huolehtia päivityksistä manuaalisesti kyläilemällä väestörekisterikeskuksen sivuilla säännöllisesti.
Sovellusohjelmien tuki
Sovellustuki voi olla joko suora tai perustua kirjastoon joka on säädetty tukemaan kortinlukijaa ja sen varmenteita.
PAM
PAM (Pluggable Authentication Module) on asetettavissa tunnistamaan tietokoneeseen kirjautuja henkilökortin varmenteella. Tämä mahdollistaa kirjautumisen salasanan asemasta tai niiden rinnakkaisen käytön. Asetukset ja niiden määrittäminen on jakelukohtaisia. Toimiessaan PAM-tasolla, korttituki toimii niin merkkipohjaisessa kuin graafisessa sisäänkirjautumisessa.
Firefox
Palvelun niin vaatiessa, mahdollisuus muodostaa ns client-side varmennetta vaativa SSL-yhteys jossa palvelupää tunnistaa selaimen käyttäjän kortin esimmäisellä varmenteella. Tällöin käyttäjän tiedot löydetään palvelun tietokannoista sähköisellä asiointitunnuksella.
Palvelu voi pyytää käyttäjää allekirjoittamaan sisältöä kortin toisella varmenteella. Teknisiä toteutustapoja on lukuisia ja erityisesti vanhat Java-pohjaiset toimivat huonosti. Uusimmat toteutukset käyttävät C-kielellä toteutettua selaimen pluginia joka tulee asentaa käyttäjän tietokoneeseen ennen palvelun käyttöä.
Uudemmat Firefox-versiot (versiosta 4) vaativat joidenkin palveluiden kohdalla selaimen lisäasetuksen. Tämä johtuu vuonna 2009 löydetystä suunnitteluvirheestä TLS-protokollassa, joka mahdollistaa ns. mies välissä -hyökkäyksen. Firefox yrittää suojautua tätä haavoittuvuutta vastaan kieltämällä TLS-protokollan uusintakättelyn. Tätä ei ole otettu huomioon (tätä kirjoitettaessa 5/2011) muun muasssa niissä palveluissa, jotka käyttävät ns. VETUMA-palvelua (Verkkotunnistautuminen ja maksaminen) käyttäjän tunnistamiseen.
Kunnes tämä ongelma on ratkaistu palvelinpuolella, ongelman pystyy kiertämään sallimalla Firefoxissa TLS-protokollan kaksoiskättelyn haluamilleen osoitteille – VETUMA-palvelun tapauksessa osoite on tunnistus.suomi.fi. Asetukset saa näkyville Firefoxissa kirjoittamalla osoitekenttään about:config. Etsi listasta kenttä security.ssl.renego_unrestricted_hosts
ja anna sille arvoksi tunnistus.suomi.fi
.
Asetuksen vaihdon onnistumisen voi kokeilla VRK:n Omien tietojen tarkistus -palvelusta.
Ssh
OpenSSH tukee henkilökortin käyttöä autentikointiin PKCS#11-rajapinnan kautta. Kortin sisältämän avainparin julkinen osa siirretään niille ssh-palvelimille, joihin halutaan olla yhteydessä. SSH-asiakasohjelma pystyy käyttämään kortilla olevaa salaista osaa kättelyssä palvelimen kanssa. Avainten hallintaan käytetään OpenSSH:n mukana tulevia ssh-agent ja ssh-add apuohjelmia.
ssh-agent on ohjelma, joka säilöö ohjelman ajon ajaksi privaatteja salausavaimia ajomuistiin ssh-ohjelman käyttöön, mutta siinä on myös tuki opensc-pkcs11 pluginille. Tällöin niitä ei ladata muistiin, vaan vain viitataan kortilla olevaa avaimeen kirjaston rajapinnan kautta.
OpenOffice.org
Dokumentteja on mahdollista allekirjoittaa kortin ensimmäisellä tunnistus-varmenteella. Tuki on ohjelmaan sisäänrakennettu eikä vaadi erillistä säätämistä toimiakseen, jos muu korttituki toimii.
qDigiDoc
Graafinen työkalu DigiDoc-määrityksen mukaisten digitaalisten säiliöiden (eng container ) luomiseen ja käsittelyyn. Varmenteella voi allekirjoittaa ja/tai salata säiliön sisällön. Sisältö voi olla mitä tiedostoja tahansa. Ohjelmisto on kehitetty Virossa ja on yhteiskunnassa laajalti käytetty ja hyväksytty sovellus, merkittävin henkilökortin käyttökohde WWW-tunnistamisen rinnalla. Ohjelmasta voi lukea lisää sen omalta qDigiDoc sivulta.
OpenSC-sivustolla on pitkä lista erillaisista ohjelmistojen tuesta varmenteille.
Sovelluskohtaisia ohjeita
OpenSC työkalut
Korttipaikkojen listaus
$ pkcs11-tool -L Slot 8 OmniKey CardMan 3121 00 00 token label: HENKILOKORTTI (perustunnusluku) token manuf: VRK-FINEID token model: PKCS#15 token flags: login required, PIN initialized, token initialized serial num : 4600015034197296 Slot 9 OmniKey CardMan 3121 00 00 token label: HENKILOKORTTI (allekirjoitustunn token manuf: VRK-FINEID token model: PKCS#15 token flags: login required, PIN initialized, token initialized serial num : 4600015034197296
Varmenteiden listaus
$ pkcs15-tool -c Using reader with a card: OmniKey CardMan 3121 00 00 X.509 Certificate [todentamis- ja salausvarmenne] Flags : 0 Authority: no Path : 3f004331 ID : 45 X.509 Certificate [allekirjoitusvarmenne] Flags : 0 Authority: no Path : 3f0050164332 ID : 46 X.509 Certificate [VRK Gov. Root CA] Flags : 0 Authority: yes Path : 3f004334 ID : 48 X.509 Certificate [VRK Gov. CA for Citizen Qualified Certificates] Flags : 0 Authority: yes Path : 3f004333 ID : 47
PIN koodin vaihto
PUK koodin käyttö
PUK (pin unblock key) koodia tarvitaan jos kortti menee jumiin esimerkiksi liian monesta epäonnistuneesta varmenteen käyttöyrityksestä. Koodin voi antaa joko komentorivioptiona (selkeämpi kirjoittaa) tai syöttää sen interaktiivisesti. Vivulla -a määritellään mitä pin-koodia ollaan vaihtamassa, numero yksi tarkoittaa ensimmäistä koodia.
$ pkcs15-tool --unblock-pin --puk 12345678 -a 1 Using reader with a card: OmniKey CardMan 1021 01 00 Enter new PIN [PIN1]: **** Enter new PIN again [PIN1]: ****
CA-varmenteiden lukeminen kortilta
Henkilökortilla on Väestörekisterikeskuksen juuri- ja kansalais- eli ns CA-varmenteet. CA-varmennetta tarvittaessa, järkevintä on ottaa se henkilökortilta eikä ladata verkosta jotta ei altistu teoreettiselle ns man-in-the-middle hyökkäykselle. Valtaosa on saanut korttinsa suoraan poliisilta jolloin voidaan olla suhteellisen varmoja, ettei varmennetta tai korttia ole väärennetty. Jos sovellus ei tue varmenteiden ketjutusta, tulee käyttää sitä CA-varmennetta jolla itse osapuolen varmenne on allekirjoitettu. Muussa tapauksessa juurivarmenne riittää.
Varmenteen saa kopioitua kortilta tiedostoon käyttäen -r vipua ja varmenteen id-numeroa. Yhdistettynä nämä yhdeksi komennoksi:
$ pkcs15-tool -r $(pkcs15-tool -c|grep -A4 "Root"|grep ID|cut -d: -f2) > vrkrootca.pem
Yllä itse varmenne luetaan kortilta ja tulos ohjataan tiedostoon. Tiedostoa voi käyttää sellaisenaan esim WWW-selaimessa tai Apache-httpd palvelimessa.
Firefox
Firefox tukee opensc-pkcs11 pluginia, mutta siinä on ominaisuus joka pistää sen kysymään joka kerta molempia pin-koodeja. Tämän ratkaisusta oli näkemyseroja joka johti pattitilanteeseen ja OpenSC-projekti päätyi kiertämään selaimen kehittäjien jääräpäisyyden tekemällä häkkäyksen itse pluginiin ja oman versionsa siitä jota kutsutaan onepin-opensc-pkcs11 pluginiksi. Aiheesta enemmän projektin postilistan viestissä.
Asettaminen:
- valitse Muokkaa → Asetukset → Lisäasetukset → Salaus → Turvallisuuslaitteet
- paina Lataa
- lisää: /usr/lib/onepin-opensc-pkcs11.so
tai
- valitse Edit → Preferences → Advanced → Encryption → Security Devices
- paina Load
- lisää: /usr/lib/onepin-opensc-pkcs11.so
Thunderbird
- valitse Muokkaa → Asetukset → Lisäasetukset → Varmenteet → Turvallisuuslaitteet
- paina Lataa
- lisää: /usr/lib/opensc-pkcs11.so
- edelleen lisäasetuksista valitse Näytä varmenteet
- valitse Varmentajat-välilehdeltä omat Väestörekisterikeskus CA:n alla olevat Varmenteet ja Muokkaa
- lisää valinnat: "Tämä varmenne voi todentaa WWW-sivustoja" ja "Tämä varmenne voi todentaa sähköpostittajia"
- valitse Muokkaa → Tilien asetukset
- halutun tilin Turvallisuus-valikosta valitse kortin todentamis- ja salausvarmenne
qDigiDoc
Sovelluksen pitäisi toimia myös Suomen henkilökortilla, mutta se vaatii hieman toimenpiteitä ensin. Ohjeet löytyvät kokonaisuudessaan qDigiDoc sivulta.
Ssh
Avaimia lisätään ssh-agent -ohjelmaan ssh-add -ohjelmalla. Älykorttien yhteydessä käytetään -s-optiota, jolla kerrotaan pluginin polku. Kortin avaimeen liittyvä PIN kysytään ssh-add
-komennon yhteydessä ja se jää ssh-agent prosessin muistiin.
Käyttö:
- Aseta kortti lukijaan ja lisää plugin:
$ ssh-add -s /usr/lib/opensc-pkcs11.so
- Avainparin julkisen avaimen saa tulostettua ssh-add -L -komennolla:
$ ssh-add -L ssh-rsa AAAAB3NzaC...VAkWbd0lYyWrg78Q== /usr/lib64/opensc-pkcs11.so
- Jos tätä varmennetta ei ole aiemmin käytetty ssh:n kanssa, lisää ylläoleva tekstirimpsu (koko rivi sellaisenaan)
~/.ssh/authorized_keys
tiedostoon palvelimella. - Nyt ssh-ohjelmat toimivat normaalisti kortin varmenteilla.
Vianmääritys:
- Varmista, että ssh-agent on käynnistynyt sisäänkirjautumisesi yhteydessä (prosessilistauksessa näkyy ssh-agent). Käynnistminen riippuu Linux-jakelustasi, yleensä se on automaattinen eikä mitään tarvitse tehdä. Jos sitä ei siitä huolimatta ole käynnissä, se on voinut kräshätä.
Kleopatra
Ohjelman asetuksissa on välilehti Smartcard Daemon josta löytyy Use NAME as ct-API driver ja Use NAME as PC/SC driver joka viittaisi pcsc:n ohittamista arkkitehtuuripinossa, mutta enempää kirjoittajalla (tuju) ei ole ymmärrystä ohjelman korttituesta. Ilmeisesti se on kuitenkin mahdollista. Testaajan kannattaa ensimmäiseksi saada Settings - Perfom Self-test näyttämään vihreää.
Jakelukohtaisia ohjeita
ominaisuus / jakelu | Fedora | Gentoo | OpenSuse | RHEL | Ubuntu |
---|---|---|---|---|---|
Kyseinen jakeluversio | 14 | 5 | |||
Oletusrajapinta | pcsc | pcsc | |||
Korttituki asentuu oletuksena | kyllä | kyllä | |||
Korttituki käynnistyy oletuksena | kyllä | kyllä | |||
Firefox näkee pluginin automaattisesti | ei | ei | |||
ssh-agent käynnistyy oletuksena | kyllä | ei | kyllä | ||
PAM tukee älykorttia | kyllä | kyllä | |||
PAM työkalu tukee älykorttia | vähän | vähän | |||
Löytyykö CA-avaimet jakelusta | ei | ei |
Vertailussa tulisi käyttää viimeisintä vakaata jakeluversiota. Jos näin ei ole, taulukkoa tulee päivittää.
CentOS
Fedoran ohjeet pitäisi käydä sellaisenaan.
Fedora
- Lukijat: Omnikey-1021,-3021,-4321 toimii, Omnikey-4040 ei taida enää viimeisimmissä jakeluissa.
- Vaaditut paketit: opensc, pcsc-lite (tai openct).
- Initscriptit: openct ja pcscd oletuksena päällä asennuksen jälkeen.
- Sovelluspaketit: firefox, thunderbird, openssh-clients, qdigidoc, mozilla-esteid (digiallekirjoitus), kdepim (kleopatra), pam_pkcs11.
- CA-avaimien paketti: ca-certificates
- Pakettienhallintatyökalu: Yum ja PackageKit
- ssh-agent käynnistyy automaattisesti jos on asennettu.
- onepin-opensc-pkcs11.so plugin sijaitsee arkkitehtuurin mukaisessa hakemistossa joko:
/usr/lib/onepin-opensc-pkcs11.so
tai/usr/lib64/onepin-opensc-pkcs11.so
Gentoo
- ssh-agent: KDE-ympäristöllä pitää poistaa kommenteista agentin käynnistyskomennot tiedostossa /etc/kde/startup/agent-startup.sh
OpenSuse
- Pakettienhallintatyökalu: Zypper ja PackageKit
RHEL (Red Hat Enterprise Linux)
Fedoran ohjeet pitäisi käydä sellaisenaan.
Ubuntu
- Asenna paketit opensc, mozilla-opensc ja pcscd
- Pakettienhallintatyökalu: Apt, PackageKit
Katso myös
Aiheesta muualla
- http://fineid.fi - Suomalaisen henkilökortin kotisivu.
- http://www.vaestorekisterikeskus.fi/ - Väestörekisterikeskus
- http://fi.wikipedia.org/wiki/PKI - Julkisen avaimen infrastruktuuri Wikipediassa.
- http://opensc.org/ - OpenSC korttityökalujen kotisivu.
- http://opensc.org - FinnishEid - OpenSC projektin FINEID sivu.
- http://www.cryptsoft.com/pkcs11doc/v230/ - pkcs#11 standardi.
- openxades.org - digidoc-1.3 - DigiDoc määritys.
- http://code.google.com/p/esteid/- Viron henkilökortin ohjelmistokehitys.
- http://id.ee/ - Viron henkilökortin ohjesivusto (est, eng, rus).
- KDE bug 116201 - Keskustelua KDE:n pkcs#11 tuesta.
- irc://irc.freenode.net/opensc - OpenSC IRC kanava.
- irc://irc.freenode.net/fineid - #fineid IRC kanava.