EID toorik

Allikas: eid.eesti.ee
Redaktsioon seisuga 31. mai 2012, kell 10:40 kasutajalt Tiitpikma (arutelu | kaastöö) (→‎Keeled: PHP)
Jump to navigation Jump to search

Elektroonilise identiteedi (e-ID) rakendusjuhend tarkvaraarendajatele [TOORIK]

Sissejuhatus

Projekti eesmärk

See rakendusjuhend annab ettevõtete IT-arhitektidele ja tarkvaraarendajatele vajalikud tehnilised alusteadmised e-ID kasutuskeskkondade loomiseks. e-ID all mõistetakse Eesti ID-kaarti, digitaalset isikutunnistust (digi-ID-d), elektroonilist elamisloakaarti, digitaalset templit ja mobiil-ID-d ning eraldi väljatoodud juhtudel ka teiste riikide elektroonilisi identiteete.

Sihtgrupp, eeldused

Töö sihtrühmaks ei ole lõppkasutajad.

Mis on mis

Digitaalne isikutunnistus ehk Digi-ID on riiklik digitaalne dokument, millega saab elektroonilises keskkonnas oma isikut tuvastada ja anda digitaalallkirja. Erinevalt ID-kaardist ei kanta Digi-ID-kaardile isiku nime, fotot ega muud vajalikku, et teda saaks kasutada visuaalse isikut tõendava dokumendina. Krüptograafia seisukohast on tegu samasuguse kiipkaardiga nagu ID-kaart ning Digi-ID sertifikaatide väljastamisel kasutab Sertifitseerimiskeskus samu ülpõhimõtteid, ESTEID-kaardi sertifitseerimispoliitikat ning ESTEID sertifikaatide profiili. Seetõttu käsitleb juhend Digi-ID-d ja ID-kaarti samaväärsena.

Digitaalne tempel on AS-i Sertifitseerimiskeskus (SK) firmapärane teenus, mille abil saavad ettevõtted anda digiallkirju dokumentidele, millega lisatakse dokumendile kinnitus, et dokument pärineb allkirjastanud asutusest ning et dokumenti ei ole vahepeal muudetud. Tüüpiliselt kasutatakse seda mass-produtseeritud dokumentide tarbeks, näiteks arved, maksekorraldused, kinnitused, tunnistused jne. Teenuse tellimisel väljastab SK ettevõttele kas kiipkaardil või USB-krüptopulgal X.509-sertifikaadi. Digitaalse templi kasutamisel luuakse andmete allkirjastamisel DigiDOC-vormingus konteiner täpselt samamoodi nagu ID-kaardi või Digi-ID kasutamisel andmete allkirjastamiseks.

Asutuse digitaalne kinnitus (ehk "digitempel") on tehniliselt analoogiline digitaalallkirjaga. Kui digitaalallkirja annab kindel isik ühesuguste põhimõtete kohaselt, siis asutuse väljastatud digitaalne kinnitus võib olla tekitatud väga erinevate põhimõtete kohaselt. Seetõttu lisanduvad digitaalseks kinnitamiseks väljastatud sertifikaadi semantikasse nn. "kinnituspõhimõtted" (signing policy), mis kirjeldavad digitaalse kinnituse otstarvet, tekitamise viisi jms. spetsiifikat. Asutuse digitaalse kinnituse andmist võib käsitleda kui elektroonilist vastet "templile" või "blanketile". Asutuse digitaalne kinnitusel on kaks põhilist kasutusjuhtu.

1. Kinnituse lisamine digitaalselt allkirjastatud dokumendile – sellisel juhul tekib dokumendile asutuse mõõde ning allkirjastanud isikule allkirjastamise kontekst.

2. Automaatselt genereeritud digitaalsed kinnitused (ilma digitaalallkirjata) – selline tehnika annab võimaluse moodustada iseseisvalt käsitletav fail mingi infosüsteemi poolt genereeritud andmetest. Nii on võimalik veebiteenustes genereerida mitmesuguseid tõendeid ja väljavõtteid, mida kasutaja saab salvestada ning hiljem on salvestatu puhul võimalik tõendada info terviklust, päritolu ja moodustamise konteksti. Asutuse digitaalne kinnitus vastab failivormingult digitaalallkirja omale (*.ddoc) ning kõik DigiDoc- rakendused suudavad neid käsitleda. Sertifikaate asutuse digitaalseks kinnituseks väljastab SK.


Elektrooniline elamisloakaart väljastatakse ID-kaardi asemel Eestis elavatele välismaalastele, kes ei ole Euroopa Liidu kodanikud, ning sinna kantakse elamisloa andmed. ID-kaardi ja elamisloakaardi funktsionaalsus elektrooniliste teenuste kasutamiseks on sama. Ka elamisloakaardiga saab digitaalselt isikut tuvastada ning allkirja anda. Peamine erinevus seisneb selles, et Eesti ja Euroopa Liidu kodanikele välja antava ID-kaardiga saab Euroopa Liidu piires reisida, elamisloakaardiga väljaspool Eestit reisida ei saa. Teise erinevusena sisaldab elamisloakaart kontaktivaba kiipi, kuhu on salvestatud kasutaja sõrmejäljekujutised ja näokujutis. ID-kaardil kontaktivaba kiip puudub. Elamisloakaart kehtib kuni 5 aastat, kuid mitte kauem kui kehtib isikule välja antud elamisluba või elamisõigus.

Mobiil-ID on protokoll kliendi autentimiseks. Selles protokollis püütakse klienti autentida sellega, et serveri genereeritud väljakutse (challenge) signeeritakse kliendi sertifikaadis olevale avalikule võtmele vastava salajase võtmega, mis asub aga kasutajale kuuluva mobiiltelefoni SIM-kaardil.

Üldteavet arendajatele

Teave, mida saab ära kasutada nii olemasolevate kui ka uute rakenduste arendamisel.

Isikuandmete faili kasutamine

Infoturbe koosvõime raamistik (www.riso.ee/et/files/InfoturbeRaamistik.odt) 2007:

ID-kaardi isikuandmete fail sisaldab sama informatsiooni, mis on kaardile kantud visuaalselt. See sisaldab kaardiomaniku nime, kaardi kehtivuse aega ja muud sarnast. Oluline on, et see sisaldab ka kaardiomaniku isikukoodi. Kui omanik sisestab kaardi kiipkaardilugejasse, on süsteemil võimalik sealt kiirelt välja lugeda isikukood ja kasutada seda oma edasistes toimingutes.

  • ID-kaardi isikuandmete faili kasutamise näideteks on:
  • ID-kaart kui Tallinna ja Tartu transpordikaart;
  • ID-kaart kui raamatukogukaart;
  • ID-kaart kui kliendikaart (lojaalsuskaart);
  • ID-kaart kui uksekaart e. pääsukaart.

Isiku tuvastamist ID-kaardi isikuandmete faili abil on mõistlik kasutada kohtades, kus on võimalik kontrollida kaardiomaniku isikusamasust füüsilisel moel (näiteks piiri ületamine).

ID-kaardi @eesti.ee meiliaadressi kasutamine

ID-kaardi autentimissertifikaadis sisaldub ka riigi poolt kaardiomanikule omistatav eluaegne meiliaadress kujul Eesnimi.Perenimi_XXXX@eesti.ee, kus XXXX on juhuslikult genereeritud neljakohaline arv. Alates 2005. aastast väljastatakse sertifikaatide uuendamisel ja uute ID-kaartide väljastamisel e-posti aadress kujul Eesnimi.Perenimi@eesti.ee; juhul, kui sama ees- ja perenimega isikuid on mitmeid, saavad järgnevad isikuid aadressi kujul Eesnimi.Perenimi.N@eesti.ee, kus N on järjenumber. Eelmised aadresskujud jäävad samuti kehtima.

eID kasutamine olemasolevate rakendustega

todo

Töölaua rakendused

Enne kirjutamist tuleb teha konkreetselt piiritletud valik (nt Outlook ja seal krüpteerimine, signeerimine)

ID-kaardiga sisselogimine Windowsisse

Selleks on vahend IDLogin (http://www.id.ee/28898), aga tehniliselt on see piiratud võimalustega:

  • ID-kaardiga Windowsisse sisse logimine ei tööta uuemate ID-kaardi draiveritega kui versioon 1.3.118 (mis pärineb oletatavasti aastast 2007)
  • IDLogini kasutamisel Windows XP-s ei tööta Remote Desktop Connection.
  • IDLogin ei tööta uue ID-kaardi baastarkara versioonidega.


Tundub, et vastav teadmus kolis http://www.jaja.ee/tooted.php juurde, kes müüb edasiarendatud toodet litsentsitasuga alates 1000€. Funktsionaalsus (pärit JaJa lehelt):

  • identifitseerib Windowsi (Active Directory või SAMBA) kasutaja ID-kaardi abil
  • saab kasutada paroolipõhiseid ja teiste kiipkaartide lahendusi samaaegselt
  • kiipkaardipõhine turvalisus – transaktsioonid toimivad krüptograafiliste meetoditega, ainult paroolide teadmisest ei piisa, kaarti on ikkagi vaja ehk teisisõnu on tegemist kahetasandilise turvalisusega
  • tööjaamade kasutus on turvalisem
  • tööjaamade kasutus on efektiivsemalt monitooritav (kasutaja log-in ja log-out on võimalik process logidest nt tööajaarvestussüsteemi eksportida)
  • võimaldab tekitada paindliku ja lihtsalt hallatava guest-juurdepääsu arvutivõrgule
  • tsentraalselt hallatavad turvaelemendid - sertifikaatide kehtivusajad, protsessid juhuks, kui kaart eemaldatakse lugejast
  • töötab W2K ja WinXP-ga


ID-kaardiga sisselogimine Linuxisse

todo


ID-kaart kliendikaardina

http://www.id.ee/public/cyberaruanne_20070322030353.pdf (1998) visioneerib:

Näitab, et kaardi valdajal on kas teenuse või soodustuse saamise õigus. Lihtsal
elektroonilisel kliendikaardil ilmselt mõtete ei ole, sest võltsimise risk on
suhteliselt väike. Keerulisem kliendikaart sisaldab aga juba käitumise ajalugu,
kliendi boonuspunkte ja on seetõttu juba kvantitatiivne volitustõend.


ID-kaart läbipääsusüsteemides

http://www.id.ee/public/cyberaruanne_20070322030353.pdf (1998) visioneerib:

Pääsu reguleerimine on tüüpiline ID kaardi rakendus, kus kaardi omanikule
antakse pääs mingite ressursside juurde. Lihtsamal juhul on see pääs kaitstud
territooriumile. Arvutisüsteemi pääsu reguleerimisel on mõistlik kaardile salvestada 
veel ka isiku profiil infosüsteemis, andmete konfidentsiaalsust tagavad salajased 
võtmed ja isiku digitaalallkiri.

2012 seisuga: Ektaco ARGOS-seeria läbipääsusüsteemides (nt Argos 3010) on võimalik võtmena kasutada ka Eesti ID-kaarti.

Uute eID rakenduste loomine

Uute rakenduste loomise osas vajavad käsitlemist: digiallkirjastamine, krüpteerimine (piirame end CDOC-iga), isikutuvastamine veebis (siia alla ka OCSP, CRL, LDAP), isikuandmete faili kasutamine, DigidocService kasutamine.

Draiverid jms

(See osa tuleb ilmselt kuhugi mujale liigutada.)

Kirjutamise hetkel on eToken-krüptopulk SK poolt toetatud ainult Windows-keskkonnas. Linux jt platvormid on SK poolt testimata ja toetamata, kuid vastavaid eTokeni draivereid on nad nõus teadlikule kasutajale jagama. Konteiner, mis sisaldab kõike vajalikku Linuxile koos dokumentatsiooniga on allalaetav aadressilt: https://installer.id.ee/media/SafeNetAuthenticationClient_Linux_8.1.zip

Toetatud tarkvara:

  • Red Hat Enterprise 5.4 (32-bit and 64-bit) on 2.6 kernel
  • CentOS 5.4 (32-bit and 64-bit) on 2.6 kernel
  • SUSE Linux Enterprise 11 (32-bit and 64-bit) on 2.6 kernel
  • Fedora 11 (32-bit)
  • Fedora 12 (32-bit)
  • Ubuntu 9.10 (32-bit)
  • Ubuntu 10.04 (32-bit and 64-bit) on 2.6 kernel


Huvitavad viited

"Uue ID-kaardi baastarkvara loomise käigus tehtud allkirjastamisplugina info ning JavaScripti teegi info ning lihtne näidisrakendus, kuidas teeki kasutada, on alla laetav siit (viimane versioon 0.11, uuendatud 11.11.2011)."

"Uuenenud on veebis allkirjastamise PHP näidisrakendus, mis kasutab JavaScripti teeki (idcard.js) allkirjastamisplugina valimiseks. Rakendust saab töötamas näha aadressil https://www.openxades.org/ddservice/, sealt samast on alla laetav ka lähtekood."

"Mobiil-IDga allkirjastamiseks on loodud näidisrakendus PHP-s. Näidisrakenduse koos lähtekoodiga leiad: http://demo.digidoc.ee/sign_sample/"

Sertifikaadi kehtivuse kontroll OCSP-ga (erinevalt seal väidetust toetab mod_ssl OCSP'd ilusti)

Apache'i ja IISi konfigureerimine ID-kaardi toetamiseks

libdigidoc ja jdigidoc dokumentatsioon.

Info DigiDocService testkeskkonna kohta: http://www.id.ee/?id=28727

IAIK PKCS#11 teegi, mida JDigiDoc kasutab, dokumentatsioon.

eToken tarkvara Linuxile - sealt võtta "eToken Linux SDK and Middleware" (vajab 32-bitist libpcsclite'i, samuti võib olla vajalik muuta .deb paki control faili).

"Kuidas töötab ID kaart ja kuidas turvatakse temaga Internetis tehtavaid operatsioone."

Huvitavad rakendused

Käsurea rakendus eidenv kuvab kaardil olevad isikuandmed. Kasutades -x võtit käivitab argumendiks antud programmi keskonnas, kuhu on lisatud ESTEID_* muutujad samade andmetega.

cdigidoc omab ka CGI režiimi, milles ta tagastab lihtsasti (näiteks PHP's) parsitavat teksti. (NB! cdigidoc on hetkel vigane - loe alt poolt)

Kahtlased kohad

03.05.2012 seisuga on cdigidoc rakendus vigane. Mingi hetk lisati võtmed -encrypt-sk ja -decrypt-sk, mis teevad SK spetsiifilist krüpteerimist (kõigepealt loovad DDOC konteineri, mis pannakse CDOC sisse), ent selle käigus lõhuti ära -encrypt ja -decrypt funktsionaalsus, millega sai teha n-ö tavalist (de)krüpteerimist.

Kuna http://id.ee/?id=28735 ja Ubuntu repodest saadaval C-teegil on mõned päris suured muudatused sees, siis küsimus millist versiooni me libdigidoc'ist (ja teistest teekidest) kasutame?

Koos eToken vahevaraga suudab PC/SC üles leida digitemplil olevad andmed. OpenSC seda aga (esialgsel testimisel) ei suuda.

Kui paigaldada eToken vahevara Linuxile, siis sellega on kaasas ka paar QT teegi moodulit, mille installer paneb /usr/lib/eToken kausta ning ütleb ld.so.conf'ile, et nüüd terve süsteem neid kasutaks. Minu (Tiidu) keskkonnas tekitas see hulga jama (näiteks Skype lõpetas töötamise), kuna kaasas olid QT versiooni 4.2.3 moodulid, ent ülejäänud süsteem kasutas 4.7.4.

Kui kasutada eTokenit VirtualBoxis jooksva Windowsiga (ka teiste OS'ide korral?), siis on vaja paigaldada VirtualBox Extension Pack - vastasel juhul kuvatakse küll krüptopulga kaardilugeja, ent arvatakse, et see on tühi.

Java üritab kaardilugejatega töötamiseks kasutada /usr/lib/libpcsclite.so, mis Debiani/Ubuntu peal pole selles kohas. Asja töötamiseks tuleb luua sümlink:

sudo ln -s /lib/libpcsclite.so.1 /usr/lib/libpcsclite.so      # Ubuntu
sudo ln -s /usr/lib/libpcsclite.so.1 /usr/lib/libpcsclite.so  # Debian

Huvitavad meetodid

JDigiDoc

JDigiDoc meetodid suvalise baidijada allkirjastamiseks PIN1'ga (näiteks autentimise jaoks) - NB! ei kontrolli serdi kehtivust:

PKCS11SignatureFactory.openSession(false, slot, pin);
PKCS11SignatureFactory.getAuthCertificate(0, null);
PKCS11SignatureFactory.sign(data, 0, null, null);
DigiDocVerifyFactory.verify(data, signature, cert, false, null);


JDigiDoc meetodid sertifikaadi kehtivuse kontrolliks:

X509Certificate.checkValidity();
DigiDocVerifyFactory.verifyCertificate(X509Certificate cert, X509Certificate caCert);
NotaryFactory.checkCertificateOcspOrCrl(X509Certificate cert, boolean bUseOcsp); // hetkel katkine, kasutada järgmist meetodit
NotaryFactory.checkCertificate(X509Certificate cert); // kas kasutatakse OCSP või CRL määratakse konfifailis

(checkCertificateOcspOrCrl otsib sertifikaadi väljaandjat konfifailist vanade võtmete järgi, mis tõttu see uute konfifailidega ei õnnestu ning Bouncy Castle viskab meile NullPointerExceptioni)

libdigidocpp

libdigidocpp korral tuleb isiku tuvastamiseks luua oma alamklass PKCS11Signer'ist. Õige sertifikaadi valimise näide on EstEIDSigner'is (non-repudiation(1) lipu asemel kontrollime digital-signature lippu(0)) ning PIN lugemise näide on EstEIDConsolePinSigner'is.

OCSP kinnituse pärimiseks on OCSP::checkCert(X509* cert, X509* issuer, const std::vector<unsigned char>& nonce).

Näiterakendused

TODO: Siia mingi jutt selle kohta, mis on eeldused keskkonnale. Sh mis keskkonnas ja konfiga on testrakendused loodud.

Keeled

C++

Vaikimisi kasutatakse rakendustes PIN küsimiseks enda loodud lahendust, mis sõltub unistd.h'st (mida Windowsil pole). libdigidocpp teegi SVN repositooriumis on EstEIDConsolePinSigner klass, mis töötab ka Windowsi all, ent 02.05.2012 seisuga ei ole RIA Ubuntu repodes olevas teegis. Kui see aga on olemas, siis võib kompileerides lisada võtme -DHAVE_ESTEID_CONSOLE_PIN_SIGNER selle kasutamiseks.

Kompileerimisel on vajalik linkida libdigidocpp teek. Testimisel ilmnes ka, et kui kasutada libcrypto 0.9.8 (millest libdigidocpp sõltub) asemel mõnda uuemat, siis tekkis probleeme, täpsemalt segmentation fault'id: seega, kui süsteemi on paigaldatud uuem, võib olla vaja linkida see versioon käsitsi.

Näiteks:

gcc main.cpp /lib/libcrypto.so.0.9.8 -ldigidocpp

Java

Kasutab JDigiDoc teeki.

Java konfiguratsiooni fail

JDigiDoc teek kasutab Properties faili konfiguratsiooni haldamiseks.

Märkimisväärsed read selles failis:

  • DIGIDOC_DEFAULT_PROFILE - (hetkel) allkirjastamise rakendus ignoreerib seda ning kasutab alati TM ehk kehtivuskinnituse ning ajamärkidega profiili,
  • DIGIDOC_SIGN_PKCS11_DRIVER - kaardi PKCS11 API ohjur,
  • DIGIDOC_LOG4J_CONFIG - logimise konfiguratsiooni fail,
  • SIGN_OCSP_REQUESTS - kas allkirjastada OCSP päringud,
    • DIGIDOC_PKCS12_CONTAINER - allkirjastamiseks kasutatava sertifikaadi asukoht, PKCS12 formaadis,
    • DIGIDOC_PKCS12_PASSWD - parool allkirjastamiseks kasutatava sertifikaadi PKCS12 faili avamiseks,
    • DIGIDOC_OCSP_SIGN_CERT_SERIAL - allkirjastamiseks kasutatava sertifikaadi seerianumber,
  • DIGIDOC_CA_1_CERT#, DIGIDOC_CA_1_OCSP#_CERT, DIGIDOC_CA_1_OCSP#_CA_CERT - sertifikaatide asukohad; kasutada eesliidet jar://, et anda asukoht classpathist.

PHP

PHP's allkirjastamiseks ning allkirjade kontrollimiseks kasutatakse DigiDocService teenust. Tegu on SOAP-põhise tasulise veebiteenusega. Testimiseks ja arendamiseks on olemas ka tasuta testkeskkond.

Krüpteerimise jaoks seda teenust kasutada ei saa, mistõttu on vaja mähist libdigidoc/libdigidocpp teegi ümber. (Mähist on võimalik kasutada ka allkirjastamiseks ning allkirjade kontrolliks, seega vabanedes nõudest kasutada DigiDocService't. Seda näitekoodis demonstreeritud ei ole, ent see käib analoogselt krüpteerimisega.)

DigiDocService teenuse liides on defineeritud WSDL'is, mille põhjal genereeritakse PHP klass teenuse kasutamiseks. Kuigi PHP 5 tuleb juba sisse-ehitatud SOAP kliendi ning WSDL põhjal klassi genereerimise võimaustega, kasutab näitekood kaasas olevat PEAR'ist pärit SOAP moodulit, tänu mille töötab kood ka vanemate versioonidega.

XML-failide ning DigiDoc konteinerite parsimiseks ja töötlemiseks kasutatakse kärbitud ning veidi muudetud varianti näitekoodist saadaval aadressil https://www.openxades.org/ddservice/. Kui kärbitud variandist puudub soovitud funktsionaalsus, siis on võimalik, et see on olemas täisversioonis.

Allkirjastamise rakendus

Käsurea utiliit, millele antakse ette nimekiri failidest ning tulemuseks on BDOC konteiner allkirjastatud failidega ja OCSP kehtivuskinnitusega.

C++

Kasutus:

./sign infile:mimetype... outfile
  • infile - failid, mida allkirjastada
  • mimetype - allkirjastatava faili MIME tüüp, nt text/plain
  • outfile - loodava BDOC konteineri nimi, soovitatav laiendus .bdoc

Java

Kasutus:

java JavaSign [-cfg config] infile... outfile
  • config - kasutatav konfiguratsioonifail, vaikimisi otsitakse praegusest kaustast jdigidoc.cfg
  • infile - failid, mida allkirjastada
  • outfile - loodava BDOC konteineri nimi, soovitatav laiendus .bdoc

Vajab Java versioon 1.7 või uuemat, kuna allkirjastatava faili MIME tüübi tuvastamiseks kasutatakse Files klassi.

Isikutuvastuse rakendus

Käsurea utiliit, mis teeb kindlaks, kas kasutajal on ligipääs sertifikaadile vastavatele privaatvõtmele ehk kas ta teab ID-kaardi PIN1'e.

C++ puhul käivitatakse rakendus ilma argumentideta, Java puhul on võimalik anda valikuline argument -cfg config, mis töötab nii nagu allkirjastamise rakenduse puhul. Kasutaja sisestab lugejas oleva kaardi PIN1 ning kuvatakse vastus, kas isiku tuvastamine õnnestus või mitte. Kui peaks tekkima mingeid muid tõrkeid (nt. on ID-kaardil olev sertifikaat kehtetu), siis kuvatakse vastav veateade.

(NB! C++ rakendus hetkel OCSP kontrolle läbi ei vii, kuna libdigidocpp ei võimalda seda. Lähiajal lisan funktsionaalsuse kasutades libdigidoci)

Piiriülene eID

RISO veebist (http://www.riso.ee/wiki/EID2011-12-09):

Baastarkvara probleem on Linuxite tugi, kus tarkvara on ajaliselt maas Linuxite reliisidest, näiteks Ubuntu puhul ühe põlvkonna võrra. Ettepanek on toetada üksnes Ubuntu distributsiooni kui enimlevinut ja ülejäänute Linuxite jaoks valmistada lähtekoodi pakid koos kompileerimisjuhendiga. Senine arendushange on keskendunud peamiselt lõppkasutaja toele. Lisaks sellele vajab lahendamist korporatiivlahenduste tugi, tugi serverlahendustele ja .net platvormi tugi. Koostamisel on statistika, et saada paremat ülevaadet platvormidest. Kaardistatakse Windows serverite ja .net platvormil baseeruvate lahenduste vajadus. Serverikeskkonna tellimisel ja platvormi valiku peab teadma, millisele on võimalik ID-kaardi tugi ehitada.