Sissejuhatus ID-kaardi baastarkvara avatud lähtekoodiga arendusele

From ICO wiki

Autor: Raul Metsma

Sissejuhatus

Eesti ID-kaardi baastarkvara on üks enim kasutatud ja suurema kasutusega tarkvara Eestis. Sellest lähtuvalt on väga oluline tarkvara läbipaistvus ja koodi avalik kättesaadavus. Baastarkvara haldab Riigi Infosüsteemi Amet ning arendatakse erinevate partnerite poolt.

Käesoleva kirjatöö eesmärk on anda ülevaade ja orientatsioon noorele arendajale Eesti ID-kaardi baastarkvara komponentidest, nende funktsioonidest, omavahelistest seostest ja sõltuvustest. Kirjatöös on viited komponentide lähtekoodi hoidlatele ning seonduvale dokumentatsioonile.

Pidevalt muutuvast keskkonnast (seadusandlus, operatsioonisüsteemid, veebibrauserid, jne.) tingitult on võimatu teha staatilist dokumenti. Alljärgnev kirjeldab 2020 aasta maikuu reliisi baastarkvara komponentide seisu. Siiski annab käesolev kirjatükk piisavalt asjakohase ülevaate ja lähiajal pole ette näha olulisi muudatusi komponentide valikus. Värskeima informatsiooni saab eraldi iga komponendi hoidla juhendist.

Baastarkvara komponendid jagunevad viieks grupiks: draiverid, teegid, rakendused, brauserite laiendused ja paigalduspakid. https://github.com/open-eid/org/wiki

Sissejuhatus ID-kaardi baastarkvara avatud lähtekoodiga arendusele 20200917.png

Draiverid

OpenSC PKCS11

OpenSC on arendatud vabatahtlike poolt. Projekti skoop on pakkuda mitmete EID kaartide tuge. RIA on sinna lisanud Eesti ID-kaartide toe. OpenSC PKCS11 draiverit kasutatakse Linuxis kõikide autentimise ja signeerimise toimingute tegemiseks nii töölaua rakendustega kui ka brauseritega. macOS operatsioonisüsteemis kasutavad OpenSC PKCS11 töölaua rakendused ja brauserid signeerimiseks ning Firefox autentimiseks. PKCS11 kujutab endast dünaamiliselt laetavat lisa.

EstEID minidriver (Windows)

EstEID minidriverit kasutatakse Windowsi operatsioonisüsteemil kõikide signeerimise, dekrüpteerimise ja autentimise operatsioonideks. Ainsaks erandiks on autentimine Firefox brauseris, mis kasutab OpenSC PKCS11 draiverit. Minidriver kujutab endast lisa,mis paigaldatakse Windowsi ja lubab suhelda erinevate ID-kaartidega. Kui ID-kaart lisatakse lugejasse siis Windows tuvastab kaardi, laeb vastava lisa ning teeb selle kättesaadavaks üle krüpto liidese. Antud draiverit kasutatakse ainult Gemalto kaartidega mida anti välja kuni 2018 aasta detsembrini.

EstEID-CTK-Tokend (macOS)

EstEID-CTK-Tokend kasutatakse macOS operatsioonisüsteemil ja brauseritega Safari ning Chrome autentimise operatsioonideks. Tokend draiver on oma olemuselt sarnane Windowsi minidriveri tehnoloogiaga.

Teegid

Teegid on mõeldud integraatoritele lihtsustamaks juurutada digitaalallkirja andmist ja valideerimist kolmandates rakendustes ja keskkondades. Kuna allkirja ümbriku koostamine ja valideerimine hõlmab endas hulgi erinevaid standardeid näiteks, ASiC-E http://www.etsi.org/deliver/etsi_en/319100_319199/31916201/01.01.01_60/en_31916201v010101p.pdf, XAdES http://www.etsi.org/deliver/etsi_ts/101900_101999/101903/01.04.02_60/ts_101903v010402p.pdf jne ning erinevaid valideerimise reegleid https://www.etsi.org/deliver/etsi_ts/102800_102899/102853/01.01.02_60/ts_102853v010102p.pdf on integraatoril lihtsam kasutada valmis lahendusi. Lisaks on ka teegid libdigidoc ja jdigidoc, mida kasutati DDoc ümbrike loomiseks, ning NDigidoc, CDoc krüpto dokumentide loomiseks, mida ei soovitata enam kasutada https://www.id.ee/artikkel/digidoc-konteineri-formaatide-elutsukkel/. Teegid kasutavad lisaks draivereid ID-kaardi operatsioonideks.

DigiDoc4j

Eestis enim kasutatav java keele teek allkirja ümbrikute loomiseks ja valideerimiseks. Teek kasutab Euroopa liidu poolt arendatavat DSS teeki https://github.com/esig/dss ning lisab Eesti jaoks vajalikud kitsendused, nö baas profiili. Lisaks pakub komponent digidoc4j-tool käsurea tööriista.

CDoc4j

Teek CDoc krüpto konteineri loomiseks, krüpteerimiseks ja dekrüpteerimiseks java keeles. Lisaks pakub komponent cdoc4j-tool käsurea tööriista.

Libdigidocpp

Peamine C++ keeles kirjutatud teek mida kasutatakse tööjaama rakenduses. Kuna C++ on efektiivsema mälukasutusega saab seda kasutada ka mobiilsetel platvormidel. libigidocpp kasutab mitmeid kolmandaid teeke Xerces-C, Xalan-C, Xml-security-C, OpenSSL ning Codesynthesis XSD tööriista. Lisaks saab Swig tööriistaga genereerida C# ja Java liidesed. Komplektis on kaasas digidoc-tool käsurea tööriist.

Rakendused

Töölaua rakendused lihtsustavad kasutajal allkirjastada faile oma arvutis. See annab ka võimaluse allkirjastada konfidentsiaalseid faile ilma neid mõnele kolmanda osapoole teenusele saatmata. Varem olid ka DigiDoc3 Klient ja EstEIDUtil tarkvara iseseisvad rakendused mis asendati nüüd ühise rakendusega DigiDoc4 Klient. Rakendused kasutavad lisaks draivereid ID-kaardi operatsioonideks, erandina mobiilsed platvormid, kus kasutatakse ID-kaardiga suhtlemiseks platvormist tulenevate iseärasuste pärast madalama kihi PCSC/APDU liidest.

DigiDoc4 Klient

DigiDoc4 Client rakendus on mõeldud dokumentide allkirjastamiseks ja krüpteerimiseks. Allkirjastada saab nii ID-kaardiga kui ka Mobiil-ID ja Smart-ID-ga. Lisaks pakub ta võimalust teha toiminguid Eesti ID-kaardiga, näiteks vahetada PIN koode. Kuna rakendust peab saama kasutada erinevatel operatsioonisüsteemidel siis on kasutatud Qt raamistikku. Allkirjastamiseks kasutab ta taustal libdigidocpp teeki.

TeRA

TeRA rakendus on mõeldud vanemate dokumentide tembeldamiseks üle tugevama krüptograafiaga. Näiteks vanas ümbriku formaadis DDoc oli kasutusel SHA-1 räsi algoritm mida peetakse tänapäeval nõrgaks.

RIA DigiDoc (Mobiil)

RIA DigiDoc mobiilirakendus on sarnaselt DigiDoc4 Client-iga mõeldud kasutamiseks iOS ja Android mobiilidel. Rakendusega saab teha sarnaseid toiminguid kui töölaua rakendusega. Graafiline liides on kirjutatud mõlemal operatsioonisüsteemil platvormil pakutavate vahenditega. Allkirjastamiseks kasutavad mõlemad libdigidocpp teeki. DigiDoc4j kasutab palju mälumahtu ja ei ole mõeldav kasutamiseks Android telefonis.

Brauserite laiendused

Brauserite laiendused kujutavad endast laiendusi, mis võimaldavad ligipääsu kiipkaardile ja teha sellega signeerimise toiminguid. Integraatorid saavad hõlpsalt ehitada uusi teenuseid ja saavad mugavalt integreerida kasutaja autentimise ning allkirjastamise oma infosüsteemide protsessidesse. Brauserite laiendused kasutavad lisaks draivereid ID-kaardi operatsioonideks.

Firefox-pkcs11-loader

Firefox-pkcs11-loader komponent kujutab endast seadistamise laiendust. Tema ainuke eesmärk on kirjutada kasutaja profiili registrisse OpenSC PKCS11 draiveri asukoht, et kasutaja saaks ID-kaardiga autentida.

Chrome-token-signing

Chrome-token-signing sai algselt arendatud Chromele kui viimane eemaldas brauserist NPAPI plugina toe. Hiljem võttis ka Firefox kasutusele sama tehnoloogia. Kuna Microsoft võttis uue Edge brauseri põhjaks Chromium mootori saab viimane ka kasutada selle laiendust. Komponent sisaldab javascript lisa ,mis lisatakse brauserisse ja suhtleb “native” rakendusega, et saada ligipääsu ID-kaardi riistvarale.

Browser-token-signing

Browser-token-signing sisaldab vanu brauserite pistikprogramme NPAPI, IE BHO ja ka uut Safari App Extension laiendust. NPAPI oli kasutusel varem Firefoxis, Chromes ja Safaris. IE BHO on veel kasutusel Internet Explorer brauseris. Firefox ja Chrome kasutavad nüüd chrome-token-signing komponenti. Kuna palju koodi sai taaskasutada sai uus Safari laiendus tehtud ka selles projektis.

Edge-token-signing

Eelmine Edge brauser kasutab sarnast tehnoloogiat kui chrome-token-signing. Kuna keskkond nõuab .NET tehnoloogiat ei saa taaskasutada chrome-token-signing lisa. Keskkonna eripärade pärast kasutada .NET tehnoloogiat ei saa taaskasutada chrome-token-signing lisa.

HWCrypto.js

HWCrypto.js kujutab ennast lisa web rakenduste integraatoritele kes soovivad juurutada allkirjastamist browseris. Komponent peidab erinevate laienduste juurutamise keerukuse ja pakub integraatorile ühese ja lihtsa liidese.

Paigalduspakid

Paigalduspakkide eesmärk on koondada kõikide komponentide artefaktid ja pakkuda lõppkasutajatele mugav tarkvara paigaldamise kogemus. Lõpptarbijale on saadaval valmis binaarid https://installer.id.ee. Eraldiseisvad komponendid omavad omi versioniseerimise põhimõtteid aga paigalduspakkide versioonid on kujul “aasta.kuu” (nt. 20.05).

Windows-installer

Windowsi installer paigaldab kasutaja arvutisse EstEID minidriveri, IDEMIA minidriver, DigiDoc4 Client koos libdigidocpp teegiga, TeRa tarkvara ning brauseri komponendid chrome-token-signing, IE-token-signing. Edge-token-signing tuleb paigaldada eraldi Windows Storest. Pakid luuakse WIX Toolset vahenditega

Osx-installer

macOS installer paigaldab kasutaja arvutisse OpenSC PKCS11 draiveri, EstEID-CTK-tokend ja brauseri komponendid chrome-token-signing, safari-token-signing ning firefox-pkcs11-loader. DigiDoc4 Klient ja TeRa rakendusi levitatakse macOS operatsioonisüsteemis Apple Store'st.

Linux-installer

Ubuntu pakk,mis sisaldab sõltuvusi DigiDoc4 Client, TeRa ja brauserite komponentidele chrome-token-signing, firefox-pkcs11-loader. Lisaks ta sisaldab Chromium autentimise draiveri seadistamise scripti, mis käivitatakse kasutaja sisselogimisel.

Kokkuvõte

Baastarkvara arhitektuuri dokument koos detailsete jooniste ja komponentide kirjeldusega on saadaval inglisekeelsena https://open-eid.github.io.

Igal huvilisel on võimalik panustada tarkvara arendusse ja teha projektile vea raporteid või Pull Request. Juhised ja tavad on kirjeldatud eraldi dokumendis https://github.com/open-eid/org/blob/master/CONTRIBUTING.md.

Tarkvara kasutamise käigus tekkivad küsimused ja probleemid tuleb siiski raporteerida https://www.id.ee esimese astme kasutajatoele.

Iga uue baastarkvara versiooniga on püütud kõrvaldada teadaolevad puudused ning täiendada funktsionaalsust. Koos muutuva keskkonnaga täienevad ka tehnilised võimalused, mis lubavad uut lähenemist varem tekkinud kitsaskohtadele. Iga versiooni kohta on eraldi välja toodud nimekiri muudatustest võrreldes eelmise versiooniga. Neid saab lugeda siit: https://www.id.ee/artikkel/id-tarkvara-versioonide-info-release-notes/.

Iga komponendi enda muudatuste loetelu leiab GitHubis RELEASE-NOTES.md failist ning detailsemalt ka GIT ajaloost.