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.
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} |
|||||||
*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://code.d-logic.com/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://code.d-logic.com/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.
<">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
- 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.