Sissejuhatus ID-kaardi baastarkvara avatud lähtekoodiga arendusele
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
Draiverid
OpenSC PKCS11
- Lähtekood: https://github.com/OpenSC/OpenSC/wiki
- Dokumentatsioon: http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/pkcs11-base-v2.40.html
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)
- Lähtekood: https://github.com/open-eid/minidriver
- Dokumentatsioon: https://docs.microsoft.com/en-us/windows-hardware/drivers/smartcard/smart-card-minidrivers
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)
- Lähtekood: https://github.com/open-eid/esteid-ctk-tokend
- Dokumentatsioon: https://developer.apple.com/documentation/cryptotokenkit
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
- Lähtekood: https://github.com/open-eid/digidoc4j
- Dokumentatsioon: https://github.com/open-eid/digidoc4j/wiki
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
- Lähtekood: https://github.com/open-eid/cdoc4j
- Dokumentatsioon: https://github.com/open-eid/cdoc4j/wiki/Examples-of-how-to-use-it
Teek CDoc krüpto konteineri loomiseks, krüpteerimiseks ja dekrüpteerimiseks java keeles. Lisaks pakub komponent cdoc4j-tool käsurea tööriista.
Libdigidocpp
- Lähtekood: https://github.com/open-eid/libdigidocpp
- Dokumentatsioon: http://open-eid.github.io/libdigidocpp/manual.html
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
- Lähtekood: https://github.com/open-eid/digidoc4-client
- Dokumentatsioon: https://github.com/open-eid/DigiDoc4-Client/wiki/DeveloperTips
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
- Lähtekood: https://github.com/open-eid/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)
- Lähtekood: https://github.com/open-eid/MOPP-Android
- Dokumentatsioon: https://github.com/open-eid/MOPP-Android/wiki
- Lähtekood: https://github.com/open-eid/MOPP-iOS
- Dokumentatsioon: https://github.com/open-eid/MOPP-iOS/wiki
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
- Lähtekood: https://github.com/open-eid/chrome-token-signing
- Dokumentatsioon: https://github.com/open-eid/chrome-token-signing/wiki
- Dokumentatsioon: https://developer.chrome.com/extensions/nativeMessaging
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
- Lähtekood: https://github.com/open-eid/browser-token-signing
- Dokumentatsioon: https://github.com/open-eid/browser-token-signing/wiki
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
- Lähtekood: https://github.com/hwcrypto/hwcrypto.js
- Dokumentatsioon: https://github.com/hwcrypto/hwcrypto.js/wiki
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
- Lähtekood: https://github.com/open-eid/windows-installer
- Dokumentatsioon: https://wixtoolset.org/documentation/
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
- Lähtekood: https://github.com/open-eid/osx-installer
- Dokumentatsioon: https://developer.apple.com/library/mac/documentation/DeveloperTools/Reference/DistributionDefinitionRef/
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
- Lähtekood: https://github.com/open-eid/linux-installer
- Dokumentatsioon: https://wiki.debian.org/Packaging
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.