Prihlasovanie s pyskeid_serve.py už frčí aj na najnovších preukazoch (cez kontaktné rozhranie). Kvôli protokolu PACE na to potrebujem navyše knižnicu python-ecdsa.
Čítanie údajov z karty pomocou pyskeid_read_data.pynefunguje vôbec. Táto funkcia bola medzičasom vypnutá aj v “naozajstnom” eID klientovi, kompatibilita teda zostáva zachovaná. Malou útechou nech nám je možnosť prečítať MRZ a fotografiu z biometrického preukazu po zadaní CAN kódu.
Na podpisovanie sa pozriem čoskoro, ak sa ma teda niekto nepokúsi predbehnúť…
Nuž som napísal (experimentálny) OpenSC ovládač aj pre nové karty (IDEMIA Cosmo) vydávané od decembra 2022. Nahrádza PKCS #11 knižnicu obsiahnutú v balíku eID Klient, slúži teda najmä na podpisovanie.
Cez kontaktné rozhranie funguje
podpisovanie kľúčom, ku ktorému patrí kvalifikovaný certifikát
(Podpisový PIN)
podpisovanie kľúčom, ku ktorému patrí nekvalifikovaný (“zdokonalený”) certifikát
(BOK)
dešifrovanie kľúčom, ku ktorému patrí šifrovací certifikát
(BOK)
Zmenu PIN kódov som netestoval, na implementáciu odblokovania PUK kódom som ani nepomyslel. Sám mám staršiu verziu preukazu, takýto nový som v živote ani len v ruke nedržal, moje možnosti sú preto obmedzené.
Aby to fungovalo aj cez bezkontaktné rozhranie, treba zrejme len pridať PACE (a secure messaging) po vzore iných ovládačov (napr. toho pre nemecký nPA), ktoré už v OpenSC sú.
Tak hlasim sa pod inym menom, lebo slovensko digital po troch prispevkoch blokuje a ked ich clovek kontaktuje, tak neodpovedaju, takze:
Skusam svoju bielu karticku. Ide to rozhodne dalej, ako naposledy. Server sa startne. Pri pokuse o prihlasenie dostavam: Error code: 500 v prehliadaci. No este pred tym 501 na CL:
pyskeid_serve listening on port 15480
127.0.0.1 - - [17/Mar/2023 16:04:44] code 404, message Not Found
127.0.0.1 - - [17/Mar/2023 16:04:44] “GET /logo HTTP/1.1” 404 -
127.0.0.1 - - [17/Mar/2023 16:04:44] code 501, message Unsupported method (‘OPTIONS’)
127.0.0.1 - - [17/Mar/2023 16:04:44] “OPTIONS /logo HTTP/1.1” 501 -
Exception occurred during processing of request from (‘127.0.0.1’, 36758)
A cely traceback ktory konci v socketserver.py
Je problem podpora mojej karty, alebo je to niekde inde?
Vdaka za hint.
Toto je starsi log, ale ked som spravil dnes cerstvy git pull tak sa to sprava rovnako.
Tieto chyby sú nepodstatné, zobrazovali sa aj pri (úspešnom) prihlasovaní podporovanými preukazmi a aj pri práci s “naozajstným” klientom. Medzičasom bola web aplikácia na prihlasovanie zrejme zmenená tak, aby neexistujúce “logo” vôbec nepýtala.
V prehliadači by sa mal vďaka
self.send_error(500, explain=str(inst))
zobraziť aspoň nejaký text o výnimke. To mi pripomenulo, že tie moje vlasné sú zatiaľ stále prázdne.
# TODO: useful error messages
Ak si teda nevidel žiadny užitočný text, bude to zrejme UnsupportedCard. A to je zatiaľ vlastne feature. Akúkoľvek kartu, ktorú som ešte nevidel, odmietam(e).
Predpokladám, že biela kartička má CardOS 5.0, snáď sa veľmi nelíši od občianskych preukazov na rovnakej platforme. No ak by aj pasovalo ATR, nesadne URL. Na bielej by to mohlo byť http://www.minv.sk/cif/cif-sk-egk-v1.xml namiesto http://www.minv.sk/cif/cif-sk-eid-v1-qes-es-crypt-eac-v1.xml
(To sú len dohady, okolo takej karty som v živote nešiel.)
Možnože by stačilo ten reťazec nahradiť/pridať. Alebo narýchlo skúsiť niečo takéto:
Ak to nepomôže, typ karty som neuhádol. Aby sme ju mohli podporovať, treba sa pozrieť ako presne sa “skutočný” eID klient rozpráva s kartou a s autentifikačným systémom. To sa dá urobiť všelijako, najjednoduchšie však je prihlásiť sa s verziou 4.4 a pozrieť si logy.
V neskorších verziách eID klienta sa toho loguje menej, zrejme aby som sa pri tej analýze nezačal nudiť. S verziou 4.4 sa prihlasovať stále dá. Ponúknutú “povinnú” aktualizáciu možno preskočiť tak, že program spustíš s odpojeným internetom a o žiadnej novšej verzii sa nedozvie.
O.K. Funguje. Moja karta:
From card: [59, 223, 24, 0, 129, 49, 254, 88, 0, 49, 185, 100, 5, 14, 1, 0, 115, 180, 1, 211, 0, 0, 0, 34]
Co sice netusim co je ale dal som do kodu na tvrdo:
known_card_urls = (“http://www.minv.sk/cif/cif-sk-eid-v1-qes-es-crypt-eac-v1.xml”,
“http://www.minv.sk/cif/cif-sk-eid-v3.xml”,
“http://www.minv.sk/cif/cif-sk-eid-v4-cosmo.xml”,
“http://www.minv.sk/cif/cif-sk-egk-v1.xml”)
known_card_names = (“CardOS50”, “CardOS54”, “Cosmo92”,“CardOS50”)
attrs = self.connection.getATR()
print(‘From card:’, attrs)
atr_index = SkEidPySCardType.supported_type_atrs.index(attrs)
atr_index = 3
print(‘Atr_index new:’, atr_index)
self.version = self.known_card_names[atr_index]
cand_url = self.known_card_urls[atr_index]
A v duchu ‘it’s better to be lucky then smart’ to zafungovalo.
Oficial eid_klient je mi na nic, lebo pada na hubu, podpora mlci. 3.7 nepadal, ale ten uz zakazali. Z oficial klienta pred padom som dostal len:
INFO; Mon Apr 24 17:12:10 2023; CardAPI; Event: Card Inserted
INFO; Mon Apr 24 17:12:11 2023; CardAPI; Created CardService with profile: eCardAPI_IASProfileNotPresent
INFO; Mon Apr 24 17:12:11 2023; eID_Client; New card session for AA on reader: SCM Microsystems Inc. SCR 3310 [CCID Interface] 01 00
INFO; Mon Apr 24 17:12:11 2023; eID_Client; Running CardInsertedSequence on SCM Microsystems Inc. SCR 3310 [CCID Interface] 01 00
INFO; Mon Apr 24 17:12:11 2023; eID_Client; CardInspectionEvent: Certs-NotSupported on reader: SCM Microsystems Inc. SCR 3310 [CCID Interface] 01 00
INFO; Mon Apr 24 17:12:40 2023; eID_Client; Authentication is starting…
A potom seg fault.
Nejde mi len to, ze ked stranka vyziada na nvo autentifikaciu, napr pri preberani doruceniek, tak sa dlho nic nedeje, potom to vyhodi chybu: BrokenPipeError: [Errno 32] Broken pipe
a restartne sa. Zasa zadam BOK a slovensko.sk je uspokojene. Takze az na tu pol minutu, kym prebehne restart, mi to krasne funguje!
Vdaka!
Prispôsobil som aj svoju branch. Skús prosím, či to tak funguje. Pridávanie ďalších veľmi podobných preukazov (napr. tých pre cudzincov) by teraz malo byt jednoduchšie.
Doplnil som tam aj ATR najnovších preukazov cez bezkontaktné rozhranie, ale to na rozdiel od toho kontaktného asi ešte nefunguje. Kto má chuť, nech vyskúša.
Problémy by ešte mohlo spôsobovať to, že HTTPServer je single-threaded a (teda) blocking. Čo normálne nevadí, obsluhovať súčasne viacero klientov (i.e. prihlasujúcich sa prehliadačov) nedáva zmysel. Nedisciplinovaný HTTP klient nás ale môže zablokovať.
Nieze zakazu zverejnenie zdrojovych kodov, ale v poslednych verziach zakazali aj distrbiciu binarneho kodu. Je zakaz vytvarania odvodenych diel, distribucia a dokonca zvlast aj zverejnovanie na inom webe. Predtym som vytvaral balicek pre Fedoru, teraz to uz ale nemozem. Nielenze ministerstvo nevyda balicky pre rozne OS, ale dokonca takto licenciou zakazu, aby si to vytvoril niekto iny. No co uz mozeme cakat od nasho statu
Zdrojaky eID som daval v 2020 medzi “quick win” do MIRRI formulara (ref: Výzva ÚPVII: Zber quick winov ). Zatial teda nie su, a aj keby boli, z pohladu roku 2020 to “quick” nebude.
Kedze je dnes, sice nakratko, ale novy minister, nacim oprasit? MIRRI uz na repozitary zdroj. kodov slusne pracuje (vid napr. Opencode.gov.sk (metodický portál pre zverejňovanie zdrojových kódov ISVS) - #58 by liska ), tak aby tam aj boli zmysluplne zdrojaky. O.i. si od toho slubujem, ze ako danovy poplatnik teda nebudem financovat zbytocne implementacie obfuskovania zdrojakov ci zbytocne integrity check-y, alebo rozne cudne pravniciny v EULA. (Lebo tie veci musel aj niekto napisat, len teda pre mna ako opbcana je to zbytocny naklad.)