Online Store

FCoder biblioteka Machine Readable Travel Documents (MRTD) podrška

Uvođenje #

Podrška za čitanje grupa podataka sa NFC oznake ugrađene u mašinski čitljive putne dokumente (MRTD), uključujući ePassports koji su u skladu sa ICAO specifikacijama, implementirana je u biblioteci uFCoder.

Implementacija podržava Basic Access Control (BAC) mehanizam za pristup NFC čipovima. BAC omogućava autentifikaciju i siguran kriptografski kanal komunikacije sa NFC oznakom ugrađenom u MRTD. BAC se temelji isključivo na simetričnoj kriptografiji pomoću 3DES algoritma i implementiran je prema ICAO 9303, dio 11.

ICAO je skraćenica od International Civil Aviation Organization (https://www.icao.int). ICAO 9303 specifikacija standardizira MRTD-ove, uključujući ePassporte. Kompletnu ICAO Doc 9303 seriju možete pronaći na https://www.icao.int/publications/pages/publication.aspx?docnum=9303web lokaciji.

MRTD-ova osnovna kontrola pristupa podržana je u uFCoder biblioteci od verzije 5.0.12.

Da biste prvo autentifikovali NFC oznaku ugrađenu u MRTD, morate proslediti broj dokumenta, datum rođenja nosioca dokumenta i datum isteka dokumenta da biste funkcionisali MRTD_MRZDataToMRZProtoKey() kako biste dobili "proto ključ" iz kojeg će biti izvedeni drugi neophodni bezbednosni ključevi. Svi podaci potrebni za dobijanje "proto ključa" (broj dokumenta, datum rođenja nosioca dokumenta i datum isteka dokumenta) kodirani su u mašinski čitljivoj zoni (MRZ) tako da biblioteka ima funkciju MRTD_MRZSubjacentToMRZProtoKey() koja se može pozvati umesto MRTD_MRZDataToMRZProtoKey(). Ova funkcija prihvata null-terminirani niz koji sadrži subjacentni red dokumenta MRZ.Snimak ekrana ispod prikazuje primer MRZ sa označenim subjacentnim redom koji sadržaj morate da prođete kao parametar da biste funkcionisali MRTD_MRZSubjacentToMRZProtoKey().

epassport MRZ

MRTD funkcije biblioteke podrške #

MRTD_MRZDataToMRZProtoKey #

Opis funkcije

Da biste dobili MRZ Proto Key potreban u narednim koracima, možete pozvati ovu funkciju i proslijediti je null-terminated stringove koji sadrže broj dokumenta, datum rođenja vlasnika dokumenta i datum isteka dokumenta. Nakon uspješnog izvršavanja funkcije, MRZ Proto Key će biti 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,

uint8_t mrz_proto_key[25]);

Parametri

doc_number Pokazivač na null-terminirani niz koji sadrži tačno 9 znakova broj dokumenta.
date_of_birth Pokazivač na null-terminirani niz koji sadrži tačno 6 znakova koji predstavljaju datum rođenja u "YYMMDD" formatu.
date_of_expiry Pokazivač na null-terminirani niz koji sadrži tačno 6 znakova koji predstavljaju datum isteka u "YYMMDD" formatu.
mrz_proto_key Ovaj niz bajtova će sadržavati izračunati MRZ proto-ključ nakon uspješnog izvršavanja funkcije. Ovaj niz mora da je dodelio najmanje 25 bajtova pre pozivanja ove funkcije.

 

MRTD_MRZSubjacentToMRZProtoKey #

Opis funkcije

Da biste dobili MRZ Proto ključ potreban u narednim koracima, u slučaju TD3 MRZ formata (88 potpuno dugih znakova), ovu funkciju možete nazvati i proslijediti je null-terminirani niz koji sadrži MRZ subjacent red. Primjer TD3 MRZ formata ispisanog na eMRTD dokumentu izgleda ovako:

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

L898902C36UTO7408122F1204159ZE184226B<<<<<10

Ova funkcija treba primiti pokazivač na null-terminirani niz koji sadrži MRZ subjacent red tj. "L898902C36UTO7408122F1204159ZE184226B<<<<<10".

Deklaracija funkcije (C jezik)

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

Parametri  
mrz Pokazivač na null-terminirani 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 tačno 90 znakova, TD2 sadrži tačno 72 znaka, a TD3 tačno 88 znakova.
mrz_proto_key Ovaj niz bajtova će sadržavati izračunati MRZ proto-ključ nakon uspješnog izvršavanja funkcije. Ovaj niz mora da je dodelio najmanje 25 bajtova pre pozivanja ove funkcije.

MRTDAppSelectAndAuthenticateBac #

Opis funkcije

Koristite ovu funkciju za autentifikaciju na eMRTD NFC oznaku koristeći BAC. Ova funkcija uspostavlja siguran kanal za komunikaciju. Sigurnosni kanal se održava pomoću parametra send_sequence_cnt . Ključevi sesije kanala su ksenc (za enkripciju) 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);

Parametri

mrz_proto_key MRZ proto-ključ stečen prethodnim pozivom na MRTD_MRZDataToMRZProtoKey() ili MRTD_MRZSubjacentToMRZProtoKey() functio
ksenc Ovaj niz mora da je dodelio najmanje 16 bajtova pre pozivanja ove funkcije.Ovaj niz će sadržavati ključ šifriranja sesije nakon uspješnog izvršavanja funkcije
ksmac Ovaj niz mora da je dodelio najmanje 16 bajtova pre pozivanja ove funkcije.Ovaj niz će 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 sačuvati 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 iz eMRTD NFC oznake. Ovu funkciju možete pozvati tek nakon što uspješno uspostavite sigurnosni kanal od strane prethodno nazvanog

MRTDAppSelectAndAuthenticateBac() funkcija. Ključevi sesije ksenc i ksmac, kao i parametar send_sequence_cnt dobijaju prethodno navedeni

MRTDAppSelectAndAuthenticateBac() funkcija. Nakon uspješnog poziva na ovu funkciju, *izlaz ukazuje na podatke datoteke pročitane iz eMRTD datoteke navedene parametrom file_index. Bafer, u kojem se podaci čuvaju, automatski se dodjeljuje na gomili memorije tokom izvršavanja funkcije. Maksimalna količina dodijeljenih podataka može biti 32KB. Postoji odgovornost programera da očisti dodeljene podatke (tj. pozivom besplatno(), standardnom C funkcijom) nakon upotrebe.

Deklaracija funkcije (C jezik)

UFR_STATUS MRTDFileReadBacToHeap(const uint8_t *file_index,

uint8_t **output,

uint32_t *output_length,

const uint8_t ksenc[16],

const uint8_t ksmac[16],

Parametri

file_index

Parametar koji određuje datoteku koju želimo pročitati iz eMRTD-a. Ovo je pokazivač na niz bajtova koji sadrži tačno dva bajta koji označavaju eMRTD datoteku.Ova dva bajta su identifikacija datoteka (FID) i postoji lista 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}

*Izlazni Nakon uspješnog poziva na ovu funkciju, ovaj pokazivač ukazuje na podatke datoteke pročitane iz eMRTD datoteke navedene parametrom file_index. Bafer, u kojem se podaci čuvaju, automatski se dodjeljuje tokom izvršavanja funkcije. Maksimalna količina dodijeljenih podataka može biti 32KB. Postoji odgovornost programera da očisti dodeljene podatke (tj. pozivom besplatno(), standardnom C funkcijom) nakon upotrebe.
output_length Nakon uspješnog poziva na ovu funkciju, ovaj pokazivač ukazuje na veličinu podataka datoteke pročitanih iz eMRTD datoteke navedene parametrom file_index.
ksenc Ključ za šifriranje sesije stečen korištenjem prethodnog poziva na funkciju MRTDAppSelectAndAuthenticateBac().
ksmac Ključ sesije za izračunavanje MAC stečen korištenjem prethodnog poziva na funkciju MRTDAppSelectAndAuthenticateBac().
send_sequence_cnt Ovaj pokazivač treba da ukazuje na 64-bitnu vrednost inicijalizovanu od strane prethodnog
uspješan poziv na funkciju MRTDAppSelectAndAuthenticateBac(). Pokazivač na ovu 64-bitnu vrednost treba sačuvati i prosleđivati pri svakom sledećem pozivu na ovu funkciju i/ili druge funkcije koje se koriste za čitanje eMRTD-a.

uint64_t *send_sequence_cnt);

 

ePassport MRTD primjer #

Ovaj primer mozete skinuti sa:

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

ili klonirati cijeli Eclipse CDT projekt koristeći:

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

Komandu.

Ako želite samo brzo pokrenuti, preuzmite projekt i pokrenite binarno izvršavanje iz odgovarajuće fascikle:

  • Za 32-bitni Windows pokrenite win32_releaserun_me.cmd
  • Za 64-bitni Windows pokrenite win64_releaserun_me.cmd
  • 32-bitni Linux početak linux32_release/ePassport_mrtd
  • 64-bitni Linux start linux64_release/ePassport_mrtd.

Primer softvera zahteva da uFR čitač uređaj bude priključen i konfigurisan na PC. Nijedna druga aplikacija ili usluga koja koristi uFR čitač ne bi trebalo da se pokreće na računaru. Nakon uspješnog početka "ePassport MRTD Example," softver pokreće glavne mnoge kao što je prikazano u nastavku.

ePassport čitač MRTD NFC

<">Sada, trebalo bi da izaberete jednu od opcija 'M' ili 'P' kao što je navedeno u uputstvima za korišćenje aplikacije na ekranu.

Ako ste izabrali opciju "M," bićete upitani sa tekstom:

Odabrali ste da unesete subjacent MRZ red koji se nalazi pod 'P<XXX<<FIRSTNAME<<<<<<<<<<<<<<<<<<<<<':

Unesite subjacent MRZ red. Podzemni MRZ red mora imati 44 znaka.

Zato unesite subjacent MRZ red. Primjer subjacentnog MRZ reda može se vidjeti na prvoj slici.

U suprotnom, ako ste izabrali opciju "P" bićete upitani sa tekstom:

Odabrali ste da unesete broj dokumenta, datum rođenja i datum isteka odvojeno:

Unesite broj dokumenta. Broj dokumenta treba da bude dugačak 9 karaktera.

_________ …

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

______ …

Unesite datum isteka. Format datuma mora biti YYMMDD.

______ …

Unesite podatke u odgovarajućem formatu.

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

MRZ proto-ključ je uspješno postavljen.

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

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

Sada možete staviti pasoš u polje za čitanje uFR-a. Nakon uspešne komunikacije dobićete osnovne informacije o NFC tagu u polju čitalaca. Na primjer:

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

Tip 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 uvek biti prepoznat kao DL_GENERIC_ISO14443_4 tip oznake.

Sada možete odabrati opcije č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 formatu:

EF.COM je uspješno pročitana. Dužina datoteke ?? Bajta

Sirovi podaci: 60 xx xx xx xx xx xx xx xx xx xx

Brisanje EF.COM sirovih podataka:

LDS verzija je 01.07

UNICODE verzija je 04.00.00

Lista postojećih grupa podataka:

Pronađeno: EF. DG1

Pronađeno: EF. DG2

Pronađeno: EF. DG3

Pronađeno: EF. DG14

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

Sirovi podaci u ovom primjeru su maskirani i mogu imati bilo koju proizvoljnu vrijednost. Prisutna je samo oznaka sirovih podataka i uvijek će biti ista (0x60). Kada pročitate sopstveni dokument, ovde ćete dobiti njegove tačne podatke. Više o LDS verziji i UNICODE verziji možete pročitati u ICAO 9303, dio 10 dokumenta.

LDS i UNICODE verzije prate liste grupa podataka koje ePassport sadrži. Samo DG1 i DG2 su obavezni. Sve ostale grupe podataka mogu biti prisutne ili ne u određenom MRTD-u.

'S' – ova opcija čita sigurnosni objekt dokumenta (EF. SO elementarna datoteka) i čuva je u binarnoj datoteci koju putanju i ime morate unijeti kada to zatražite. Objekat bezbednosti dokumenta sadrži digitalni potpis u standardnom PKCS#7 CMSformatu. Prisustvo EF Na MRTD-u je obavezno.

D

'1' – ova opcija glasi EF. DG1, raščlanite ga i prikazuje sirove i raščlanjene podatke u sljedećem formatu:

EF. DG1 je uspješno pročitan. Dužina datoteke je ?? Bajta

Sirovi podaci:

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

  1. xx xx xx xx xx xx xx xx xx  

Simple Steps EF. DG1 sirovi podaci:

Kod dokumenta: P (ePassport)

Država ili organizacija: ???

Korisničko ime: FIRST_NAME

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

Nacionalnost: ???

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

Seks:????

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

Opcionalni podaci: ??????????????

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

Sirovi podaci u ovom primjeru su maskirani i mogu imati bilo koju proizvoljnu vrijednost. Prisutna je samo oznaka sirovih podataka i uvijek će biti ista (0x61). Kada pročitate sopstveni dokument, ovde ćete dobiti njegove tačne podatke.

'2' – ova opcija glasi EF. DG2 i sačuvajte ga u binarnu datoteku koju putanju i ime morate unijeti kada to zatražite. EF. DG2 sadrži sliku lica držača dokumenta i ona je obavezna. EF. DG2 pored slike lica može sadržavati i biometrijske crte lica. Mere om EF DG2 sadržaj koji možete pročitati u ICAO 9303, dio 10 dokumenta.

"I" – ova opcija glasi EF. DG2 to. U ovom slučaju, samo slika lica se izdvaja iz MRTD datoteke i čuva u datoteku koju putanju i ime ste unijeli. Format slike se automatski detektuje i ekstenzija datoteke je postavljena u skladu sa njim. Postoje dva moguća formata slikovnih datoteka definisana za ovaj kontekst: JPEG ili JP2 (tj.jpeg 2000).

'D' – ova opcija čita bilo koju elementarnu grupu podataka (EF). DG) datoteke iz MRTD-a i čuva je u binarnu datoteku koju putanju i ime morate unijeti kada to zatražite. Nakon što ova opcija bude izabrana, bićete upitani za EF. DG indeks. Indeks može biti od raspona 1 do 16 (npr. 1 za EF. DG1 i 14 za EF. DG14). Osnovna datoteka koju ste želeli da pročitate mora biti navedena na listi EF.COM grupa podataka.

Čitanje nekih opcionalnih 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 firmware verziji 5.0.22.