Online Store

uFCoder biblioteka Strojno čitljiva podrška za putne isprave (MRTD)

Uvod #

Podrška za čitanje grupa podataka iz NFC oznake ugrađene u strojno čitljive putne isprave (MRTD), uključujući ePassportove koji su u skladu sa specifikacijama ICAO-a, implementirana je u uFCoder biblioteku.

Implementacija podržava mehanizam osnovne kontrole pristupa (BAC) za pristup NFC čipovima. BAC omogućuje provjeru autentičnosti i siguran kriptografski komunikacijski kanal s NFC oznakom ugrađenom u MRTD. BAC se temelji isključivo na simetričnoj kriptografiji pomoću algoritma 3DES i implementira se prema ICAO 9303, dijelu 11.

ICAO je kratica za Međunarodnu organizaciju civilnog zrakoplovstva (https://www.icao.int). Specifikacija ICAO 9303 standardizira MRTD-ove, uključujući ePassports. Cijelu seriju ICAO Doc 9303 možete pronaći na https://www.icao.int/publications/pages/publication.aspx?docnum=9303web mjestu.

MrTD-ovi Osnovna kontrola pristupa podržana je u biblioteci uFCoder iz verzije 5.0.12.

Da biste prvo provjerili autentičnost NFC oznake ugrađene u MRTD, morate proslijediti broj dokumenta, datum rođenja vlasnika dokumenta i datum isteka dokumenta kako biste funkcionirali MRTD_MRZDataToMRZProtoKey() kako biste dobili "proto ključ" iz kojeg će biti izvedeni drugi potrebni sigurnosni ključevi. Svi podaci potrebni za dobivanje "proto ključa" (broj dokumenta, datum rođenja vlasnika dokumenta i datum isteka dokumenta) kodirani su u Strojno čitljivoj zoni (MRZ) tako da knjižnica ima MRTD_MRZSubjacentToMRZProtoKey() funkciju koja se može pozvati umjesto MRTD_MRZDataToMRZProtoKey(). Ova funkcija prihvaća niz raskinut s null koji sadrži podsljemenski redak MRZ dokumenta.Snimka zaslona u nastavku prikazuje primjer MRZ-a s označenim podjasničkim retkom koji sadržaj morate proslijediti kao parametar za funkcioniranje MRTD_MRZSubjacentToMRZProtoKey().

epassport MRZ

Funkcije biblioteke mrtd podrške #

MRTD_MRZDataToMRZProtoKey #

Opis funkcije

Da biste dobili MRZ Proto ključ potreban u sljedećim koracima, možete nazvati ovu funkciju i proslijediti joj null-prekinute nizove koji sadrže broj dokumenta, datum rođenja vlasnika dokumenta i datum isteka dokumenta. Nakon uspješnog izvršavanja funkcije, MRZ Proto Key bit će pohranjen u mrz_proto_key 25-bajtnom nizu.

Deklaracija funkcije (C jezik)

UFR_STATUS MRTD_MRZDataToMRZProtoKey(const char *doc_number,

const char *date_of_birth,

const char *date_of_expiry,

[25]uint8_t mrz_proto_key);

Parametara

doc_number Pokazivač na null-prekinut niz koji sadrži točno 9 znakova broja dokumenta.
date_of_birth Pokazivač na niz s nultim prekidom koji sadrži točno 6 znakova koji predstavljaju datum rođenja u obliku "YYMMDD".
date_of_expiry Pokazivač na null-prekinut niz koji sadrži točno 6 znakova koji predstavljaju datum isteka u obliku "YYMMDD".
mrz_proto_key Ovo polje bajtova sadržavat će izračunatu MRZ proto-tipku nakon uspješnog izvršavanja funkcije. Ovo polje mora imati dodijeljeno najmanje 25 bajtova prije pozivanja ove funkcije.

 

MRTD_MRZSubjacentToMRZProtoKey #

Opis funkcije

Da biste dobili MRZ Proto ključ potreban u sljedećim koracima, u slučaju TD3 MRZ formata (dugačak 88 potpuno znakova), možete nazvati ovu funkciju i proslijediti joj null-terminated niz koji sadrži MRZ podjasni red. Primjer TD3 MRZ formata ispisanog na eMRTD dokumentu izgleda ovako:

P<UTOERIKSSON<<ANNA<MARIA<<<<<<<<<<<<<<<<<<<

L898902C36UTO7408122F1204159ZE184226B<<<<<10

Ova funkcija trebala bi dobiti pokazivač na niz s ništetnim prekidom koji sadrži podjasni redak MRZ<<<<<- a tj.

Deklaracija funkcije (C jezik)

UFR_STATUS MRTD_MRZSubjacentToMRZProtoKey(const char *mrz, uint8_t mrz_proto_key[25]);

Parametara  
mrz Pokazivač na null-prekinut niz koji sadrži MRZ podatke. Prema ICAO Doc 9303-10, gdje ima tri MRZ formata podataka: TD1, TD2 ili TD3 formate. TD1 sadrži točno 90 znakova, TD2 sadrži točno 72 znaka, a TD3 točno 88 znakova.
mrz_proto_key Ovo polje bajtova sadržavat će izračunatu MRZ proto-tipku nakon uspješnog izvršavanja funkcije. Ovo polje mora imati najmanje 25 bajtova prije pozivanja ove funkcije.

MRTDAppSelectAndAuthenticateBac #

Opis funkcije

Koristite ovu funkciju za provjeru autentičnosti eMRTD NFC oznake pomoću BAC-a. Ova funkcija uspostavlja siguran kanal za komunikaciju. Sigurnosni kanal održava se pomoću parametra send_sequence_cnt . Ključevi sesije kanala su ksenc (za šifriranje) i ksmac (za izračunavanje MAC-a).

Deklaracija funkcije (C jezik)

UFR_STATUS MRTDAppSelectAndAuthenticateBac(const uint8_t mrz_proto_key[25], uint8_t ksenc[16],

uint8_t ksmac[16],

uint64_t *send_sequence_cnt);

Parametara

mrz_proto_key MRZ proto-ključ nabavljen prethodnim pozivom na MRTD_MRZDataToMRZProtoKey() ili MRTD_MRZSubjacentToMRZProtoKey() functio
ksenc Ovo polje mora imati najmanje 16 bajtova prije pozivanja ove funkcije.Ovo će polje sadržavati ključ za šifriranje sesije nakon uspješnog izvršavanja funkcije
ksmac Ovaj niz mora imati dodijeljeno najmanje 16 bajtova prije calli ove funkcije.Ovo će polje sadržavati ključ sesije za izračunavanje MAC-a nakon uspješnog izvršavanja funkcije.
send_sequence_cnt Nakon uspješnog izvršavanja ove funkcije, pokazivač na ovu 64-bitnu vrijednost treba spremiti i proslijediti pri svakom sljedećem pozivu na MRTDFileReadBacToHeap() i/ili druge funkcije za čitanje eMRTD-a

MRTDFileReadBacToHeap #

Opis funkcije

Koristite ovu funkciju za čitanje datoteka s eMRTD NFC oznake. Ovu funkciju možete nazvati tek nakon što prethodno pozvani uspješno uspostavi sigurnosni kanal

MRTDAppSelectAndAuthenticateBac() () (funkcija). Tipke sesije ksenc i ksmac, kao i parametarske send_sequence_cnt dobivaju prethodno nazvane

MRTDAppSelectAndAuthenticateBac() () (funkcija). Nakon uspješnog poziva na ovu funkciju, *izlaz ukazuje na podatke datoteke pročitane iz eMRTD datoteke navedene parametrom file_index. Međuspremnik, u kojem su podaci pohranjeni, automatski se dodjeljuje na hrpu memorije tijekom izvršavanja funkcije. Maksimalna količina dodijeljenih podataka može biti 32KB. Postoji odgovornost programera da očisti dodijeljene podatke (tj. pozivom slobodnom(), standardnom C funkcijom) nakon uporabe.

Deklaracija funkcije (C jezik)

UFR_STATUS MRTDFileReadBacToHeap(const uint8_t *file_index,

uint8_t **izlaz,

uint32_t *output_length,

const uint8_t ksenc[16],

const uint8_t ksmac[16],

Parametara

file_index

Parametar koji određuje datoteku koju želimo pročitati iz eMRTD-a. Ovo je pokazivač na polje bajtova sadrži točno dva bajta koja označavaju datoteku eMRTD.Ta dva bajta su identifikacija datoteka (FID) i postoji popis FID-ova:

EF.COM = {0x01, 0x1E}
EF. DG1 = {0x01, 0x01}
EF. DG2 = {0x01, 0x02}
EF. DG3 = {0x01, 0x03}
EF. DG4 = {0x01, 0x04}
EF. DG5 = {0x01, 0x05}
EF. DG6 = {0x01, 0x06}
EF. DG7 = {0x01, 0x07}
EF. DG8 = {0x01, 0x08}
EF. DG9 = {0x01, 0x09}
EF. DG10 = {0x01, 0x0A}
EF. DG11 = {0x01, 0x0B}
EF. DG12 = {0x01, 0x0C}
EF. DG13 = {0x01, 0x0D}
EF. DG14 = {0x01, 0x0E}
EF. DG15 = {0x01, 0x0F}
EF. DG16 = {0x01, 0x10}
EF. SOD = {0x01, 0x1D}

*izlaz Nakon uspješnog poziva na ovu funkciju, ovaj pokazivač pokazuje na podatke datoteke pročitane iz eMRTD datoteke navedene parametrom file_index. Međuspremnik, u kojem su podaci pohranjeni, automatski se dodjeljuje tijekom izvršavanja funkcije. Maksimalna količina dodijeljenih podataka može biti 32KB. Postoji odgovornost programera da očisti dodijeljene podatke (tj. pozivom slobodnom(), standardnom C funkcijom) nakon uporabe.
output_length Nakon uspješnog poziva na ovu funkciju, ovaj pokazivač pokazuje na veličinu podataka datoteke pročitanih iz eMRTD datoteke određene parametrom file_index.
ksenc Ključ za šifriranje sesije nabavljen je pomoću prethodnog poziva funkciji MRTDAppSelectAndAuthenticateBac().
ksmac Ključ sesije za izračunavanje MAC-a stečen je pomoću prethodnog poziva funkciji MRTDAppSelectAndAuthenticateBac().
send_sequence_cnt Ovaj bi pokazivač trebao upućivati na 64-bitnu vrijednost inicijaliziranu prethodnom
uspješan poziv na funkciju MRTDAppSelectAndAuthenticateBac(). Pokazivač na ovu 64-bitnu vrijednost treba spremiti i proslijediti pri svakom sljedećem pozivu ovoj funkciji i/ili drugim funkcijama koje se koriste za čitanje eMRTD-a.

uint64_t *send_sequence_cnt);

 

Primjer MRTD-a za ePassport #

Ovaj primjer možete preuzeti iz:

https://www.d-logic.com/code/nfc-rfid-reader-sdk/ufr-examples-ePassport_mrtd.git

ili klonirati cijeli eclipse CDT projekt pomoću:

git clone –rekurzivni https://www.d-logic.com/code/nfc-rfid-reader-sdk/ufr-examples-ePassport_mrtd.git

naredba.

Ako želite samo brzo pokretanje, preuzmite projekt i pokrenite binarnu izvršnu datoteku iz odgovarajuće mape:

  • za 32-bitni Windows pokrenite win32_releaserun_me.cmd
  • za 64-bitni Windows pokrenite win64_releaserun_me.cmd
  • za 32-bitni Linux start linux32_release/ePassport_mrtd
  • za 64-bitni Linux start linux64_release/ePassport_mrtd.

Primjer softvera zahtijeva pričvršćivanje i konfiguriranje uređaja za čitanje uFR-a na računalo. Nijedna druga aplikacija ili usluga koja koristi uFR čitač ne bi trebala biti pokrenuta na računalu. Nakon uspješnog početka "primjera ePassport MRTD-a", softver pokreće glavne mnoge kao što je prikazano u nastavku.

čitač ePassporta MRTD NFC

<">Now, trebali biste odabrati jednu od opcija 'M' ili 'P' kako je navedeno u uputama za korištenje aplikacije na zaslonu.

Ako odaberete opciju "M", od vas će se zatražiti tekst:

Odabrali ste unos podjasnog MRZ retka koji se nalazi pod 'P<XXXSURNAME<<FIRSTNAME<<<<<<<<<<<<<<<<<<<<<':

Unesite podjasni MRZ redak. Podjasni MRZ redak mora imati 44 znaka.

pa unesite podjasni MRZ redak. Primjer podjaznog MRZ retka može se vidjeti na prvoj slici.

U suprotnom, ako odaberete opciju "P", od vas će se zatražiti tekst:

Odlučili ste zasebno unijeti broj dokumenta, datum rođenja i datum isteka:

Unesite broj dokumenta. Broj dokumenta trebao bi imati 9 znakova.

_________ …

Unesite datum rođenja. Oblik datuma mora biti YYMMDD.

______ …

Unesite datum isteka. Oblik datuma mora biti YYMMDD.

______ …

stoga unesite podatke u odgovarajućem obliku.

Nakon što unesete valjane podatke, aplikacija će vas obavijestiti s porukom:

MRZ proto-key je uspješno postavljen.

——————————————————————-

Nakon ove poruke možete nastaviti s operacijama čitanja na NFC oznaci ugrađenoj u ePassport kojoj pripadaju podaci koje ste prethodno unijeli.

Sada možete staviti putovnicu u polje čitača uFR-a. Na uspješno uspostavljenoj komunikaciji dobit ćete osnovne informacije o NFC oznaci u polju čitatelja. Npr:

——————————————————————-

Vrsta oznake: DL_GENERIC_ISO14443_4, sak = 0x??, uid[4] = ??:??:??:??

——————————————————————-

SAK i UID u ovom primjeru su maskirani i mogu imati bilo koju proizvoljnu vrijednost. ePassports će uvijek biti prepoznat kao DL_GENERIC_ISO14443_4 vrsta oznake.

Sada možete odabrati mogućnosti čitanja aplikacija:

'C' – ova opcija čita uobičajene podatke (EF.COM elementarnu datoteku) iz ePassporta. Nakon uspješnog čitanja podaci se raščlanjuju i prikazuju u sljedećem obliku:

EF.COM je uspješno pročitan. Duljina datoteke je ?? Bajtova

Neobrađeni podaci: 60 xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx x

Raščlanjivanje EF.COM neobrađenih podataka:

LDS verzija je 01.07

UNICODE verzija je 04.00.00

Popis postojećih grupa podataka:

Pronađeno: EF. GU1

Pronađeno: EF. GU2

Pronađeno: EF. GU3

Pronađeno: EF. GU14

——————————————————————-

Sirovi podaci u ovom primjeru su maskirani i mogu imati bilo koju proizvoljnu vrijednost. Prisutna je samo sirova oznaka podataka i uvijek će biti ista (0x60). Kada pročitate vlastiti dokument, ovdje ćete dobiti njegove stvarne neobrađene podatke. Više o verziji LDS-a i UNICODE verziji možete pročitati u dokumentu ICAO 9303, 10. dio.

Nakon verzija LDS-a i UNICODE-a slijedi popis grupa podataka koji sadrži ePassport. Obvezni su samo GU1 i GU2. Sve ostale skupine podataka mogu biti prisutne ili ne u određenom MRTD-u.

'S' – ova opcija čita sigurnosni objekt dokumenta (EF. DAKLE elementarna datoteka) i sprema je u binarnu datoteku koji put i naziv morate unijeti kada to zatražite. Sigurnosni objekt dokumenta sadrži digitalni potpis u standardnom PKCS#7CMSformatu. Prisutnost EF-a. Dakle, na MRTD je obvezno.

D

"1"– ova opcija glasi u EF-u. GU1, raščlanite ga i prikažite neobrađene i raščlanjene podatke u sljedećem obliku:

EF. GU1 uspješno je pročitan. Duljina datoteke je ?? Bajtova

Neobrađeni podaci:

61 xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx

  1. xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx … 

Jednostavno raščlanjivanje EF-a. Neobrađeni podaci GU1:

Šifra dokumenta: P (ePassport)

Izdavanje države ili organizacije: ???

Ime nositelja: PREZIME FIRST_NAME

Broj dokumenta: ?????????

Nacionalnost:???

Datum rođenja (dd.MM.gggg.): ??.??.????.

Seks:????

Datum isteka (dd.MM.gggg.): ??.??.????.

Neobavezni podaci: ??????????????

——————————————————————-

Sirovi podaci u ovom primjeru su maskirani i mogu imati bilo koju proizvoljnu vrijednost. Prisutna je samo sirova oznaka podataka i uvijek će biti ista (0x61). Kada pročitate vlastiti dokument, ovdje ćete dobiti njegove stvarne neobrađene podatke.

"2" – ova opcija glasi u EF-u. DG2 i spremite ga u binarnu datoteku koji put i naziv morate unijeti kada to zatražite. EF. DG2 sadrži sliku lica držača dokumenta i ona je obvezna. EF. DG2 pored slike lica može sadržavati i biometrijske crte lica. Više o EF-u. DG2 sadržaj možete pročitati u dokumentu ICAO 9303, 10. dio.

"Ja" – ova opcija glasi EF. DG2 to. U tom se slučaju iz MRTD datoteke izdvaja samo slika lica i sprema u datoteku koji ste put i naziv unijeli. Format slike automatski se otkriva i datotečni nastavak se postavlja prema njemu. Za ovaj kontekst definirana su dva moguća oblika slikovne datoteke: JPEG ili JP2 (tj.jpeg 2000.).

"D" – ova opcija glasi bilo koju osnovnu skupinu podataka (EF. DG) datoteke iz MRTD-a i sprema ih u binarnu datoteku koji put i ime morate unijeti kada to zatražite. Nakon odabira ove opcije od vas će se zatražiti EF. GUP indeks. Indeks može biti od raspona od 1 do 16 (npr. 1 za EF. GU1 i 14 za EF. GU14). Elementarna datoteka koju ste željeli pročitati mora biti navedena na popisu EF.COM grupa podataka.

Čitanje nekih neobaveznih elementarnih datoteka, posebno onih koje sadrže biometrijske podatke, zahtijeva posebne sigurnosne mehanizme koji su izvan opsega ovog dokumenta.

Trenutna verzija "ePassport MRTD Example" je 1.0 i ovisi o verziji uFCoder biblioteke 5.0.12 i uFR firmver verziji 5.0.22.