Online Store

uFCoder könyvtár géppel olvasható úti dokumentumok (MRTD) támogatása

Bevezetés #

A géppel olvasható úti okmányokba (MRTD-k) ágyazott NFC-címkéből származó adatcsoportok olvasásának támogatása, beleértve az ICAO előírásainak megfelelő e-útleveleket is, az uFCoder könyvtárban került bevezetésre.

Az implementáció támogatja az NFC chip hozzáférés alapszintű hozzáférés-vezérlési (BAC) mechanizmusát. A BAC lehetővé teszi a hitelesítést és egy biztonságos kriptográfiai kommunikációs csatornát az MRTD-be ágyazott NFC-címkével. A BAC tisztán a 3DES algoritmust használó szimmetrikus kriptográfián alapul, és az ICAO 9303 11. részének megfelelően valósul meg.

Az ICAO a Nemzetközi Polgári Repülési Szervezet (https://www.icao.int) rövidítése. Az ICAO 9303 specifikáció szabványosítja az MRTD-ket, beleértve az ePassportokat is. A teljes ICAO Doc 9303 sorozat megtalálható https://www.icao.int/publications/pages/publication.aspx?docnum=9303weboldalon.

Az MRTD-k alapszintű hozzáférés-vezérlését az uFCoder kódtár támogatja az 5.0.12-es verziótól.

Annak érdekében, hogy először az MRTD-be ágyazott NFC-címkével hitelesítse magát, át kell adnia a dokumentum számát, a dokumentum tulajdonosának születési dátumát és a dokumentum lejárati dátumát a MRTD_MRZDataToMRZProtoKey() funkcióhoz, hogy megkapja a "proto kulcsot", amelyből más szükséges biztonsági kulcsok származnak. A "proto kulcs" megszerzéséhez szükséges összes adat (dokumentumszám, a dokumentum tulajdonosának születési dátuma és a dokumentum lejárati dátuma) Machine Readable Zone (MRZ) kódolású, így a könyvtár rendelkezik MRTD_MRZSubjacentToMRZProtoKey() függvénnyel, amely MRTD_MRZDataToMRZProtoKey() helyett hívható meg. Ez a függvény null végződésű karakterláncot fogad el, amely az MRZ dokumentum szubjacent sorát tartalmazza.Az alábbi képernyőképen egy példa látható az MRZ-re egy megjelölt szubjacent sorral, amelynek tartalmát paraméterként kell átadnia a MRTD_MRZSubjacentToMRZProtoKey() függvényhez.

epassport MRZ

MRTD támogatás könyvtárfunkciók #

MRTD_MRZDataToMRZProtoKey #

Funkció leírása

Annak érdekében, hogy a következő lépésekben szükséges MRZ Proto kulcsot kapja, meghívhatja ezt a függvényt, és null végződésű karakterláncokat adhat át neki, amelyek tartalmazzák a dokumentum számát, a dokumentum tulajdonosának születési dátumát és a dokumentum lejárati dátumát. A funkció sikeres végrehajtása után az MRZ Proto Key egy mrz_proto_key 25 bájtos tömbben tárolódik.

Funkciódeklaráció (C nyelv)

UFR_STATUS MRTD_MRZDataToMRZProtoKey(const char *doc_number,

const char *date_of_birth,

const char *date_of_expiry,

uint8_t mrz_proto_key[25]);

Paraméterek

doc_number Mutasson egy null végződésű karakterláncra, amely pontosan 9 karakterből álló dokumentumszámot tartalmaz.
date_of_birth Mutasson egy null végződésű karakterláncra, amely pontosan 6 karakterből áll, és a születési dátumot jelöli "ÉÉHHNN" formátumban.
date_of_expiry Mutasson egy null végződésű karakterláncra, amely pontosan 6 karakterből áll, és amely "ÉÉHHNN" formátumban jelöli a lejárati dátumot.
mrz_proto_key Ez a bájttömb tartalmazza a számított MRZ proto-kulcsot a függvény sikeres végrehajtása után. Ennek a tömbnek legalább 25 bájtot kell lefoglalnia a függvény hívása előtt.

 

MRTD_MRZSubjacentToMRZProtoKey #

Funkció leírása

A következő lépésekben szükséges MRZ Proto Key megszerzéséhez TD3 MRZ formátum esetén (88 teljesen karakter hosszú) meghívhatja ezt a függvényt, és átadhat neki egy null végződésű karakterláncot, amely MRZ szubjacent sort tartalmaz. Az eMRTD dokumentumra nyomtatott TD3 MRZ formátum példája így néz ki:

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

L898902C36UTO7408122F1204159ZE184226B<<<<<10

Ennek a függvénynek egy MRZ szubjacent sort tartalmazó, null végződésű karakterláncra mutató mutatót kell kapnia, pl. "L898902C36UTO7408122F1204159ZE184226B<<<<<10".

Funkciódeklaráció (C nyelv)

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

Paraméterek  
MRZ MRZ-adatokat tartalmazó, null végződésű karakterláncra mutató mutató. Az ICAO Doc 9303-10 szerint, ahol három MRZ adatformátummal rendelkezik: TD1, TD2 vagy TD3 formátum. A TD1 pontosan 90 karaktert tartalmaz, a TD2 pontosan 72 karaktert és a TD3 pontosan 88 karaktert tartalmaz.
mrz_proto_key Ez a bájttömb tartalmazza a számított MRZ proto-kulcsot a függvény sikeres végrehajtása után. Ennek a tömbnek legalább 25 bájtot kell lefoglalnia a függvény meghívása előtt.

MRTDAppSelectAndAuthenticateBac #

Funkció leírása

Ezzel a funkcióval hitelesítheti magát az eMRTD NFC-címkén a BAC használatával. Ez a funkció biztonságos kommunikációs csatornát hoz létre. A biztonsági csatorna karbantartása a send_sequence_cnt paraméterrel történik. A csatorna munkamenetkulcsai a ksenc (titkosításhoz) és a ksmac (a MAC kiszámításához).

Funkciódeklaráció (C nyelv)

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

uint8_t ksmac[16],

uint64_t *send_sequence_cnt);

Paraméterek

mrz_proto_key MRZ proto-key a MRTD_MRZDataToMRZProtoKey() vagy MRTD_MRZSubjacentToMRZProtoKey() functio előzetes hívásával szerezhető be
KSENC Ennek a tömbnek legalább 16 bájtot kell lefoglalnia a függvény meghívása előtt.Ez a tömb munkamenet-titkosítási kulcsot fog tartalmazni a függvény sikeres végrehajtása után
KSMAC Ennek a tömbnek legalább 16 bájtot kell lefoglalnia a calli függvény előtt.Ez a tömb tartalmaz egy munkamenetkulcsot a MAC kiszámításához a funkció sikeres végrehajtása után.
send_sequence_cnt A függvény sikeres végrehajtása után a 64 bites értékre mutató mutatót el kell menteni és továbbítani kell az MRTDFileReadBacToHeap() és/vagy az eMRTD olvasására szolgáló egyéb függvények minden további hívásakor

MRTDFileReadBacToHeap #

Funkció leírása

Ezzel a funkcióval fájlokat olvashat az eMRTD NFC címkéről. Ezt a függvényt csak akkor hívhatja meg, ha a korábban meghívott

MRTDAppSelectAndAuthenticateBac() függvény. A ksenc és ksmac munkamenetkulcsokat, valamint a send_sequence_cnt paramétert a korábban meghívott

MRTDAppSelectAndAuthenticateBac() függvény. A függvény sikeres hívása után a *kimenet a paraméter által megadott eMRTD-fájlból beolvasott fájladatokra file_index mutat. A puffer, amelyben az adatok tárolódnak, automatikusan lefoglalja a memóriahalomra a függvény végrehajtása során. A kiosztott adatok maximális mennyisége 32 KB lehet. A programozó felelőssége, hogy használat után megtisztítsa a lefoglalt adatokat (azaz a free(), a szabványos C függvény meghívásával).

Funkciódeklaráció (C nyelv)

UFR_STATUS MRTDFileReadBacToHeap(const uint8_t *file_index,

uint8_t **kimenet,

uint32_t *output_length,

const uint8_t ksenc[16],

const uint8_t ksmac[16],

Paraméterek

file_index

Az eMRTD-ből beolvasni kívánt fájlt meghatározó paraméter. Ez egy bájttömbre mutató mutató, amely pontosan két bájtot tartalmaz az eMRTD fájl jelölésére.Ez a két bájt fájlazonosító (FID), és létezik a FID-ek listája:

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}

*hozam A függvény sikeres hívása után ez a mutató a file_index paraméter által megadott eMRTD-fájlból beolvasott fájladatokra mutat. A puffer, amelyben az adatok tárolódnak, automatikusan kiosztásra kerül a függvény végrehajtása során. A kiosztott adatok maximális mennyisége 32 KB lehet. A programozó felelőssége, hogy használat után megtisztítsa a lefoglalt adatokat (azaz a free(), a szabványos C függvény meghívásával).
output_length A függvény sikeres hívása után ez a mutató a paraméter által megadott eMRTD-fájlból beolvasott fájladatok méretére file_index mutat.
KSENC Az MRTDAppSelectAndAuthenticateBac() függvény korábbi hívásával beszerzett munkamenet-titkosítási kulcs.
KSMAC Az MRTDAppSelectAndAuthenticateBac() függvény korábbi hívásával beszerzett MAC kiszámításához használt munkamenetkulcs.
send_sequence_cnt Ennek a mutatónak egy 64 bites értékre kell mutatnia, amelyet a korábban
inicializált
az MRTDAppSelectAndAuthenticateBac() függvény sikeres hívása. Erre a 64 bites értékre mutató mutatót el kell menteni és továbbítani kell minden további híváskor ehhez a függvényhez és/vagy az eMRTD olvasásához használt egyéb függvényekhez.

uint64_t *send_sequence_cnt);

 

ePassport MRTD példa #

Ez a példa a következő helyről tölthető le:

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

vagy klónozza a teljes eclipse CDT projektet a következővel:

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

parancs.

Ha csak gyors futtatást szeretne, töltse le a projektet, és indítsa el a bináris végrehajtható fájlt a megfelelő mappából:

  • 32 bites Windows esetén indítsa el a win32_releaserun_me.cmd fájlt
  • 64 bites Windows esetén indítsa el a win64_releaserun_me.cmd fájlt
  • 32 bites Linux esetén indítsa el a linux32_release/ePassport_mrtd
  • 64 bites Linux esetén indítsa el a linux64_release/ePassport_mrtd.

A szoftveres példa használatához uFR-olvasóeszközt kell csatlakoztatni és konfigurálni a számítógéphez. Az uFR-olvasót használó más alkalmazás vagy szolgáltatás nem futhat a számítógépen. Az "ePassport MRTD példa" sikeres elindítása után a szoftver elindítja a fő sokat az alábbiak szerint.

ePassport olvasó MRTD NFC

<">Most válassza ki az "M" vagy "P" opciók egyikét a képernyőn megjelenő alkalmazáshasználati utasításokban leírtak szerint.

Ha az "M" opciót választotta, a rendszer a következő szöveget kéri:

Úgy döntött, hogy a "P<XXXVEZETÉKNÉV<<KERESZTNÉV<<<<<<<<<<<<<<<<<<<<<" alatt található subjacent MRZ sort adja meg:

Adja meg az aljacent MRZ sort. A szubjacent MRZ sornak 44 karakter hosszúnak kell lennie.

tehát írja be a szubjacent MRZ sort. Az első képen látható egy példa a szubjacent MRZ sorra.

Ellenkező esetben, ha a "P" opciót választotta, a rendszer a következő szöveget kéri:

Úgy döntött, hogy külön adja meg a dokumentum számát, születési dátumát és lejárati dátumát:

Adja meg a dokumentum számát. A dokumentum számának 9 karakter hosszúnak kell lennie.

_________ …

Adja meg a születési dátumot. A dátumformátumnak ÉÉHHNN-nek kell lennie.

______ …

Adja meg a lejárat dátumát. A dátumformátumnak ÉÉHHNN-nek kell lennie.

______ …

Tehát adja meg az adatokat a megfelelő formátumban.

Az érvényes adatok megadása után az alkalmazás egy üzenettel tájékoztatja Önt:

Az MRZ proto-kulcs beállítása sikeresen megtörtént.

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

Az üzenet megjelenése után folytathatja az olvasási műveleteket az ePassportba ágyazott NFC-címkén, amelyhez a korábban megadott adatok tartoznak.

Most elhelyezheti az útlevelet az uFR olvasó mezőjében. A sikeres kommunikáció létrejötte után alapvető információkat kap az NFC címkéről az olvasó mezőben. például:

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

Címke típusa: DL_GENERIC_ISO14443_4, sak = 0x??, uid[4] = ??:??:??:??

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

Ebben a példában a SAK és az UID maszkolva van, és tetszőleges értékkel rendelkezhetnek. Az e-útleveleket mindig úgy ismeri fel a rendszer, mint DL_GENERIC_ISO14443_4 címketípust.

Most kiválaszthatja az alkalmazás olvasási beállításait:

"C" – ez az opció általános adatokat (EF.COM elemi fájlt) olvas be az ePassportból. A sikeres olvasás után a rendszer elemzi és megjeleníti az adatokat a következő formátumban:

EF.COM sikeresen elolvasták. A fájl hossza ?? Bájt

Nyers adatok: 60 xx xx xx xx …

A nyers adatok EF.COM elemzése:

Az LDS verziója: 01.07

Az UNICODE verziója 04.00.00

Meglévő adatcsoportok listája:

Találat: EF. DG1

Találat: EF. DG2

Találat: EF. DG3

Találat: EF. DG14

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

Ebben a példában a nyers adatok maszkolva vannak, és tetszőleges értékkel rendelkezhetnek. Csak a nyers adatcímke volt jelen, és mindig ugyanaz lesz (0x60). Amikor elolvassa a saját dokumentumát, itt kapja meg a tényleges nyers adatokat. Az LDS és UNICODE verzióról bővebben az ICAO 9303 10. részében olvashatsz.

Az LDS és UNICODE verziókat az ePassport által tartalmazott adatcsoportlista követi. Csak a DG1 és DG2 kötelező. Az összes többi adatcsoport jelen lehet vagy sem az adott MRTD-ben.

'S' – ez az opció beolvassa a dokumentum biztonsági objektumát (EF. SO elementary file), és elmenti a bináris fájlba, amely elérési utat és nevet meg kell adnia, amikor kéri. A dokumentumbiztonsági objektum szabványos PKCS#7CMSformátumú digitális aláírást tartalmaz. Az EF jelenléte. Tehát az MRTD kötelező.

D

'1'– ez az opció az EF-et olvassa. DG1, elemezze, és a nyers és elemzett adatokat a következő formátumban jeleníti meg:

EF. A DG1 beolvasása sikeresen megtörtént. A fájl hossza ?? Bájt

Nyers adatok:

61 xx xx

  1. xx xx xx xx  

Az EF egyszerű elemzése. DG1 nyers adatok:

Dokumentum kódja: P (ePassport)

Kibocsátó állam vagy szervezet: ???

A jogosult neve: CSALÁDI NÉV FIRST_NAME

Dokumentum száma: ?????????

Állampolgárság:???

Születési idő (éééé.hh.nn): ??.??.????.

Szex:????

Lejárati idő (nn.MM.éééé.): ??.??.????.

Nem kötelező adatok: ??????????????

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

Ebben a példában a nyers adatok maszkolva vannak, és tetszőleges értékkel rendelkezhetnek. Csak a nyers adatcímke volt jelen, és mindig ugyanaz lesz (0x61). Amikor elolvassa a saját dokumentumát, itt kapja meg a tényleges nyers adatokat.

'2' – ez az opció az EF-et olvassa. DG2 és mentse el a bináris fájlba, amelynek elérési útját és nevét meg kell adnia, amikor kéri. EF. A DG2 tartalmaz egy okmánytulajdonos arcképmását, és kötelező. EF. A DG2 az arckép mellett biometrikus arcvonásokat is tartalmazhat. További információ az EF-ről. DG2-tartalom az ICAO 9303 10. részében olvasható.

"I" – ez az opció az EF-et olvassa. DG2-től -ig. Ebben az esetben csak az arckép kerül kibontásra az MRTD-fájlból, és mentésre kerül a fájlba, amely elérési utat és nevet adta meg. A rendszer automatikusan felismeri a képformátumot, és ennek megfelelően állítja be a fájlkiterjesztést. Ehhez a kontextushoz két lehetséges képfájlformátum van definiálva: JPEG vagy JP2 (azaz .jpeg 2000).

'D' – ez az opció az elemi adatcsoportok bármelyikét beolvassa (EF. DG) fájlokat az MRTD-ből, és elmenti a bináris fájlba, amely elérési utat és nevet meg kell adnia, amikor kéri. Miután kiválasztotta ezt az opciót, a rendszer kérni fogja az EF megadását. DG index. Az index 1 és 16 között lehet (pl. 1 az EF esetében). DG1 és 14 az EF esetében. DG14). Az olvasni kívánt elemi fájlnak szerepelnie kell a EF.COM adatcsoportok listájában.

Egyes opcionális elemi fájlok, különösen a biometrikus adatokat tartalmazó fájlok olvasása olyan különleges biztonsági mechanizmusokat igényel, amelyek kívül esnek e dokumentum hatályán.

Az "ePassport MRTD példa" jelenlegi verziója 1.0, és az uFCoder könyvtár 5.0.12-es verziójától és az uFR firmware 5.0.22-es verziójától függ.