Slobodný softvér k (starému) elektronickému OP

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.py nefunguje 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úť…

2 Likes
===================================================
eID klient, verzia 4.6 Windows
===================================================

- pridaná tmavá téma (dark theme) 
- prechod na komerčnú Qt Licenciu
- opravy zistených chýb 
- zlepšenie stability         

Dátum sprístupnenia verzie: 17.03.2023

https://eidas.minv.sk/downloadservice/eidklient/windows/eID_klient_release_notes.txt

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ú.

Prosím testujte, komentujte, plátajte.

1 Like

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:

#if resp[-len(cand_url):] != list(cand_url.encode()):
#    raise UnsupportedCard

self.type_url = "http://www.minv.sk/cif/cif-sk-egk-v1.xml"

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.

Do ~/.eID_klient/config.json pridaj toto:

    "log": {
    "logToFile": true,
    "logFromLevel": "LogLevel_Debug",
    "plainApduToFile": true,
    "verboseFile": true,
    "secApduToFile": true}

a pozri si logy v adresári ~/.eID_klient/

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!

1 Like

To je ATR_CARDOS50 v desiatkovej sústave.

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.

S jednym crashom po ceste ale inac to preslo :slight_smile:
** python3 pyskeid_serve.py **
pyskeid_serve listening on port 15480
127.0.0.1 - - [12/May/2023 17:04:59] “GET /icon HTTP/1.1” 200 -
127.0.0.1 - - [12/May/2023 17:04:59] code 501, message Unsupported method (‘OPTIONS’)
127.0.0.1 - - [12/May/2023 17:04:59] “OPTIONS /icon HTTP/1.1” 501 -
----------------------------------------
Exception occurred during processing of request from (‘127.0.0.1’, 46164)
Traceback (most recent call last):
** File “/usr/lib/python3.11/socketserver.py”, line 317, in _handle_request_noblock**
** self.process_request(request, client_address)**
** File “/usr/lib/python3.11/socketserver.py”, line 348, in process_request**
** self.finish_request(request, client_address)**
** File “/usr/lib/python3.11/socketserver.py”, line 361, in finish_request**
** self.RequestHandlerClass(request, client_address, self)**
** File “/usr/lib/python3.11/socketserver.py”, line 755, in init**
** self.handle()**
** File “/usr/lib/python3.11/http/server.py”, line 432, in handle**
** self.handle_one_request()**
** File “/usr/lib/python3.11/http/server.py”, line 415, in handle_one_request**
** self.send_error(**
** File “/usr/lib/python3.11/http/server.py”, line 487, in send_error**
** self.wfile.write(body)**
** File “/usr/lib/python3.11/socketserver.py”, line 834, in write**
** self._sock.sendall(b)**
BrokenPipeError: [Errno 32] Broken pipe
----------------------------------------
Connected to SK eID (CardOS50; http://www.minv.sk/cif/cif-sk-egk-v1.xml)
BOK:

1 Like

To predsa nie je crash. Mne sa to podarilo zreprodukovať s

echo "OPTIONS /icon HTTP/1.1" | nc 127.0.0.1 15480 

a server veselo beží ďalej. A tak je to správne, takáto výnimka v kontexte HTTP nemá prečo server “zhodiť”.

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ť.

Nie som v Pythone doma a ked mam v C-cku exception, tak to je zle :wink: Takze ignore :wink: Vdaka!

1 Like

Nefunguje, skusal som. BOK zadany, spojenie na kartu uspesne, ale potom:

Traceback (most recent call last):
File "pyskeid/pyskeid_read_data.py", line 54, in <module>
if msg["result"]["code"] == "OK":
KeyError: 'result'

ked pozriem print(msg):

{'timestamp': '2023-06-17T13:27:18.354+00:00', 'status': 500, 'error': 'Internal Server Error', 'message': ''}

Hm, aj napriek git pull?

Ďakujem, po aktualizácii funguje.

@sarinay sa sam nepochvali, tak ho musim ja.

https://www.sarinay.com/sk/blog/mala-sestra-vs-nevyznamna-vlada/

:clap:

8 Likes

https://www.abclinuxu.cz/zpravicky/blizsi-pohled-na-slovenskou-eid-platformu

Dávam do pozornosti aj komentár

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

2 Likes

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. :slight_smile: :frowning:

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.)

2 Likes

Na toto som sa mimochodom 8. marca 2023 pýtal ministerstva vnútra e-mailom takto:

Nuž a 14. marca 2023 som sa dočkal takejto užitočnej odpovede:

Nič iné mi neostávalo, len sa na chvíľu vcítiť do roly byrokrata a vyjadrenie sekretariátu vziať na vedomie.

Tá otázka bola vlastne tak trochu zbytočná. Veď keď sa ministerstva opýtate, či rešpektuje zákon, musí z definície odpovedať kladne.

1 Like

Ktosi sa okrem programovania potrebuje doučiť aj základy autorského práva. Pokračovať budeme po krátkej prestávke.

Uznesenie_16Co-57-2023.pdf (102.7 KB)

Minule som bol amatérsky programátor, tentokrát (bývalý) bezdomovec.

5 Likes

A co na to eff.org? :slight_smile: ale chápem ze pre nich sme na periférii záujmu…