Введение#
ВбиблиотекеuFCoderреализованаподдержкачтениягруппданныхсметкиNFC,встроеннойвмашиночитаемыепроездныедокументы(MRTD),включаяэлектронныепаспорта,соответствующиеспецификациямИКАО。
Реализацияподдерживаетмеханизмбазовогоконтролядоступад(BAC)лядоступакчипуNFC。BACобеспечиваетаутентификациюибезопасныйкриптографическийканалсвязисметкойNFC,встроеннойвMRTD。BACоснованисключительнонасимметричнойкриптографиисиспользованиемалгоритм3 desиареализованвсоответствиисIcao 9303, с ст т 11.
ИКАОрасшифровываетсякакМеждународнаяорганизациягражданскойавиации(https://www.icao.int).СпецификацияИКАО9303стандартизируетMRTD,включаяэлектронныепаспорта。ВыможетенайтивсюсериюдокументовИКАО医生9303人https://www.icao.int/publications/pages/publication.aspx?docnum=9303веб——сайте。
Базовый конт т ол дост па MRTD поддерживается вбиблиотекеuFCoderверсии5.0.12.
,чДлятоготобысначалааутентифицироватьсявNFC——метк,евстроеннойвMRTD,выдолжныпередатьномердокумента,датурождениявладельцадокументаидатуистечениясрокадействиядокументадляфункционированияMRTD_MRZDataToMRZProtoKey(),чтобыполучить«проток——люч»,изкоторогобудутполученыдругиенеобходимыеключибезопасности。Вседанны,енеобходимыедляполучения«проток——люча»(номердокумента,датарождениявладельцадокументаидатаистечениясрокадействиядокумента),кодируютсявмашиночитаемойзоне(MRZ),поэтомубиблиотекаимеетфункциюMRTD_MRZSubjacentToMRZProtoKey(),которуюможновызватьвместоMRTD_MRZDataToMRZProtoKey()。Этафункцияпринимаетстрокуснулевымзавершением,содержащуюподложнуюстрокуMRZдокумента。НаскриншотенижепоказанпримерMRZспомеченнойподсоставнойстрокой,содержимоекоторойвыдолжныпередатьвкачествепараметрадляфункционированияMRTD_MRZSubjacentToMRZProtoKey()。
Функции библиотеки поддержки MRTD#
MRTD_MRZDataToMRZProtoKey#
Описаниефункции
ЧтобыполучитьMRZ原型键,необходимыйнапоследующихшагах,выможетевызватьэтуфункциюипередатьейстрокиснулевымокончанием,содержащиеномердокумента,датурождениявладельцадокументаидатуистечениясрокадействиядокумента。ПослеуспешноговыполненияфункцииMRZ原型关键будетхранитьсявmrz_proto_key 25 -байтовоммассиве。
Объявление ф - унк ии и (язык c)
UFR_STATUS MRTD_MRZDataToMRZProtoKey(const char *doc_number,
Const char *date_of_birth
Const char *date_of_expiry
[25] uint8_t mrz_proto_key);
Параметры
doc_number | Указательнастрокуснулевымокончанием,содержащуюровно9 -значныйномердокумента。 |
date_of_birth | Указательнастрокуснулевымокончанием,содержащуюровно6символов,представляющихдатурождениявформате“YYMMDD”。 |
date_of_expiry | Указательнастрокуснулевымокончанием,содержащуюровно6символов,представляющихдатуистечениясрокадействиявформате“YYMMDD”。 |
mrz_proto_key | ЭтотмассивбайтовбудетсодержатьвычисленныйпротоключMRZпослеуспешноговыполненияфункции。Передвызовомэтойфункцииэтомумассивудолжнобытьвыделенонемене25ебайт。 |
MRTD_MRZSubjacentToMRZProtoKey#
Описаниефункции
,чДлятоготобыполучитьMRZ原型键,необходимыйнапоследующихшагах,вслучаеформатаTD3 MRZ(всего88символов),выможетевызватьэтуфункциюипередатьейстрокуснулевымокончанием,содержащуюстрокуMRZ在底下的。ПримерформатаTD3 MRZ,напечатанногонадокументеeMRTD,выглядитследующимобразом:
<УТОЭРИКССОН< <АННА<МАРИЯ <<<<<<<<<<<<<<<<<<<
L898902C36UTO7408122F1204159ZE184226B < < < < < 10
Этафункциядолжнаполучитьуказательнастрокуснулевымзавершением,содержащуюподложнуюстрокуMRZ,ет。“L898902C36UTO7408122F1204159ZE184226B < < < < < 10”。
Объявление ф - унк ии и (язык c)
UFR_STATUS MRTD_MRZSubjacentToMRZProtoKey (const char *mrz, uint8_t mrz_proto_key[25]);
Параметры | |
МРЗ | Указательнастрокуснулевымзавершением,содержащуюданныеMRZ。СогласнодокументуИКАО医生9303 - 10,гдеонимееттриформатаданныхMRZ: TD1、TD2илиTD3。TD1содержитровно90символов,TD2содержитровно72символа,аTD3содержитровно88символов。 |
mrz_proto_key | ЭтотмассивбайтовбудетсодержатьвычисленныйпротоключMRZпослеуспешноговыполненияфункции。Этотмассивдолженвыделитьнемене25ебайтдовызоваэтойфункции。 |
MRTDAppSelectAndAuthenticateBac#
Описаниефункции
ИспользуйтеэтуфункциюдляаутентификациивNFC——меткеeMRTDспомощьюBAC。Этафункцияустанавливаетбезопасныйканалсвязи。Каналбезопасностиподдерживаетсяспомощьюпараметраsend_sequence_cnt.Сеансовыми кл о с ам м ка анала с л т тсksenc(дл ифро ани)ksmac(дл в и лени mac)。
Объявление ф - унк ии и (язык c)
UFR_STATUS MRTDAppSelectAndAuthenticateBac(const uint8_t mrz_proto_key[25], uint8_t ksenc[16],
uint8_tксмак[16],
uint64_t * send_sequence_cnt);
Параметры
mrz_proto_key | ПротоключMRZ,полученныйспомощьюпредварительноговызовафункцииMRTD_MRZDataToMRZProtoKey()илиMRTD_MRZSubjacentToMRZProtoKey () |
ksenc | Этотмассивдолжениметьвыделенноенемене16ебайтдовызоваэтойфункции。Этотмассивбудетсодержатьключшифрованиясеансапослеуспешноговыполненияфункции |
ксмак | Этотмассивдолженвыделитьнемене16ебайтдовызоваэтойфункции。ЭтотмассивбудетсодержатьсеансовыйключдлявычисленияMACпослеуспешноговыполненияфункции。 |
send_sequence_cnt | Послеуспешноговыполненияэтойфункцииуказательнаэто64 -битноезначениедолженсохранятьсяипересылатьсяприкаждомпоследующемвызовеMRTDFileReadBacToHeap()и/илидругихфункцийдлячтенияeMRTD |
MRTDFileReadBacToHeap#
Описаниефункции
Используйтеэтуфункциюдлячтенияфайловизnfc——меткиeMRTD。Вызватьэтуфункциюможнотолькопослеуспешногоустановленияканалабезопасностиранеевызываемым
ФункцияMRTDAppSelectAndAuthenticateBac()。Сеансовыеключиksencиksmac,атакжеsend_sequence_cntпараметровприобретаютсяранеевызываемыми
ФункцияMRTDAppSelectAndAuthenticateBac()。Послеуспешноговызоваэтойфункци*输出уиказываетнаданныефайла,считываемыеизфайлаeMRTD,заданногопараметромfile_index。,вБуферкоторомхранятсяданные,автоматическивыделяетсянакучупамятивовремявыполненияфункции。Максимальныйобъемвыделяемыхданныхможетсоставлять32КБ。Программистнесетответственностьзаочисткувыделенныхданных(ет。путемвызова免费(),стандартнойфункцииC)послеиспользования。
Объявление ф - унк ии и (язык c)
UFR_STATUS MRTDFileReadBacToHeap(uint8_t *file_index,
uint8_t * *выход,
uint32_t * output_length,
Const uint8_t ksenc[16],
Const uint8_t ksmac[16],
Параметры
file_index | ,уПараметрказывающийфайл,которыймыхотимпрочитатьизeMRTD。Этоуказательнамассивбайтов,содержащийровнодвабайта,обозначающихфайлeMRTD。Этидвабайтаявляютсяидентификациейфайлов(FID),иестьсписок支撑材: EF.COM = {0x01, 0x1E} |
|||||||
*выпуск | Послеуспешноговызоваэтойфункцииэтотуказательуказываетнаданныефайла,считываемыеизфайлаeMRTD,заданногопараметромfile_index。,вБуферкоторомхранятсяданные,автоматическивыделяетсявовремявыполненияфункции。Максимальныйобъемвыделяемыхданныхможетсоставлять32КБ。Программистнесетответственностьзаочисткувыделенныхданных(ет。путемвызова免费(),стандартнойфункцииC)послеиспользования。 | |||||||
output_length | Послеуспешноговызоваэтойфункцииэтотуказательуказываетнаразмерданныхфайла,считываемыхизфайлаeMRTD,заданногопараметромfile_index。 | |||||||
ksenc | Ключшифрованиясеанса,полученныйспомощьюпредварительноговызовафункцииMRTDAppSelectAndAuthenticateBac()。 | |||||||
ксмак | СеансовыйключдлявычисленияMAC -адресов,полученныхспомощьюпредварительноговызовафункцииMRTDAppSelectAndAuthenticateBac()。 | |||||||
send_sequence_cnt | Этотуказательдолженуказыватьна64 -битноезначение,инициализированноеранее успешныйвызовфункцииMRTDAppSelectAndAuthenticateBac()。Указательнаэто64 -битноезначениедолженсохранятьсяипересылатьсяприкаждомпоследующемвызовеэтойфункциии/илидругихфункций,используемыхдлячтенияeMRTD。 |
uint64_t * send_sequence_cnt);
Пример MRTD у лект о онно о о о о а#
Этот прим мер можно за а р ри ит т по о адресу:
//www.texashampton.com/code/nfc-rfid-reader-sdk/ufr-examples-ePassport_mrtd.git
иликлонироватьвесьпроекECLIPSE CDTстпомощью:
git clone - рек ку си и н н р //www.texashampton.com/code/nfc-rfid-reader-sdk/ufr-examples-ePassport_mrtd.git
Команды。
Есливыхотитетолькобыстрыйзапуск。скачайтепроектизапуститедвоичныйисполняемыйфайлизсоответствующейпапки:
- Для32 -разряднойверсиWindowsизапуститеwin32_releaserun_me.cmd
- 64年ДляразряднойверсиWindowsизапуститеwin64_releaserun_me.cmd
- для32 -разряднойверсиLinuxизапуститеlinux32_release / ePassport_mrtd
- 64年дляразряднойверсиLinuxиначнитеlinux64_release / ePassport_mrtd。
Примерпрограммногообеспечениятребует,чтобыустройствосчитывания这里былоподключеноинастроенокПК。Никакоедругоеприложениеилислужба,использующая这里读者,недолжнабытьзапущенанакомпьютере。Послеуспешногозапуска«ПримераMRTD ePassport»программноеобеспечениезапускаетосновноймногие,какпоказанониже。
”< >Теперьвыдолжнывыбратьодинизвариантов“M”или“P”,какуказановинструкцияхпоиспользованиюприложениянаэкране。
Есливывыбралиопцию«M»,вамбудетпредложеноввеститекст:
ВывыбраливведитеподложнуюстрокуMRZ,расположеннуюподP < XXXSURNAME < < FIRSTNAME <<<<<<<<<<<<<<<<<<<<<':
Введите вложенную строку у mrz。ПодвеснаястрокаMRZдолжнасостоятьиз44символов。
по т т тому у введит т вложенную ст то ку у。ПримерподчиненнойстрокиMRZможноувидетьнапервомизображении。
Впротивномслучае,есливывыбралиопцию“P”,вамбудетпредложентекст:
Вырешиливвестиномердокумента,датурожденияидатуистечениясрокадействияотдельно:
Введите ном мер док оме нта。Номер док кумента должен содержать 9 символов。
_________ ...
Введите дату рождения。Формат даты должен б б б б т т т yymmdd。
______ ...
Введите дату ис ст т ис ст с ст и и。Формат даты должен б б б б т т т yymmdd。
______ ...
по р оо му у о вв ит т а анн и е в соответствующем формат т。
,Послетогокаквыввелидействительныеданны,еприложениесообщитвамсообщение:
Прото-ключ MRZ спе ен но стано л лен。
——————————————————————-
Послеэтогосообщениявыможетепродолжитьоперациичтенияnfc——метки,встроеннойвePassport,ккоторойпринадлежатранеевведенныеданные。
Теперьвыможетепоместитьпаспортвполесчитывателя在这里。ПриуспешномустановлениисвязивыполучитеосновнуюинформациюоNFC——меткевполесчитывателя。Например:
——————————————————————-
Тип те т а: DL_GENERIC_ISO14443_4, sak = 0x??, uid[4] = ??:??:? ?
——————————————————————-
SAKиUIDвэтомпримеремаскируютсяимогутиметьлюбоепроизвольноезначение。ЭлектронныепаспортавсегдабудутраспознаватьсякакDL_GENERIC_ISO14443_4типтега。
Теперьвыможетевыбратьпараметрычтенияприложений:
'C '——этаопциясчитываетобщиеданные(EF.COMэлементарныйфайл)изePassport。Послеуспешногочтенияданныеанализируютсяиотображаютсявследующемформате:
спе е но п о о ита。Длина ф - а - ла ??Байт
Исходные данн н и и и и и
СинтаксическийанализEF.COMнеобработанныхданных:
Версия СПД 01.07
Версия unicode 04.00.00
Список существующих групп данн н:
Найдено:EF。ДГ1
Найдено:EF。ДГ2
Найдено:EF。ДГ3
Найдено:EF。ДГ14
——————————————————————-
Необработанныеданныевэтомпримеремаскируютсяимогутиметьлюбоепроизвольноезначение。Присутствовалтолькотегнеобработанныхданных,ионвсегдабудетодинаковым(0 x60)。Когдавычитаетесвойсобственныйдокумент,выполучаетеегофактическиенеобработанныеданныездесь。ПодробнееоверсииСПДиверсииUNICODEвыможетепрочитатьвдок кумент ИКАО 9303, с аст т 10.
Заверсиями摩门教的UNICODEиследуетсписокгруппданных,содержащийсявePassport。Обязательными вл тс тол ко dg1 и dg2。ВсеостальныегруппыданныхмогутприсутствоватьилиотсутствоватьвконкретномMRTD。
'年代——этотпараметрсчитываетобъектбезопасностидокумента(EF。所以基本文件)исохраняетеговдвоичныйфайл,путьиимякотороговыдолжныввестипризапросе。ОбъектбезопасностидокументасодержитцифровуюподписьвстандартномформатеPKCS # 7CMS.НаличиеEF。ТАК на MRTD вл ет об об зател н。
D
'1 '- - - - - - - - - - - - - - - - - - - -DG1,разберитеегоиотобразитенеобработанныеипроанализированныеданныевследующемформате:
ЭФ。спе о о о ита。Длина ф - а - ла ??Байт
Необработанныеданные:
61 хх хх хх
- xx xxXx Xx Xx
Простой синтакси и ески анализ ef。Необработанные данн н и и е dg1:
Код документа: P (passsport)
Государствоилиорганизация,выдавшиедокумент:? ?
Имя владел а: ФАМИЛИЯ first_name
Номер документа: ?????????
Национальность:? ?
Дата рождения (дд.ММ.гггг.): ????。????。
Секс:? ?
Датаистечениясрокадействия(дд。ММ。гггг .): ??.??.????.
Дополнительные данн
——————————————————————-
Необработанныеданныевэтомпримеремаскируютсяимогутиметьлюбоепроизвольноезначение。Присутствуеттолькотегнеобработанныхданных,ионвсегдабудетодинаковым(0 x61)。Когдавычитаетесвойсобственныйдокумент,выполучаетеегофактическиенеобработанныеданныездесь。
'2》- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -DG2исохранитееговдвоичномфайле,путьиимякотороговыдолжныввестипризапросе。ЭФ。DG2содержитизображениелицадержателядокументаиявляетсяобязательным。ЭФ。DG2рядомсизображениемлицатакжеможетсодержатьбиометрическиечертылица。Подробнее о ef。Содержание dg2 вы можете п о о итат т вдок кумент ИКАО 9303, с аст т 10.
'我- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ДГ2до。ВэтомслучаеизфайлаMRTDизвлекаетсятолькоизображениелицаисохраняетсявфайл,путьиимякотороговыввели。Форматизображенияопределяетсяавтоматически,ирасширениефайлаустанавливаетсявсоответствиисним。Существуетдвавозможныхформатафайловизображений,определенныхдляэтогоконтекста:JPEGилиJP2(етJPEG 2000)。
'D '——этаопциясчитываетлюбуюэлементарнуюгруппуданных(EF。DG)файлаизMRTDисохраняетеговдвоичныйфайл,путьиимякотороговыдолжныввестипризапросе。ПослевыбораэтогопараметравамбудетпредложеноввестиEF。ИндексDG。Индексможетнаходитьсявдиапазонеод1то16(например,1дляEF。ГД1 ГД1 14 дл ef。ГД14)。Элементарныйфайл,которыйвыхотитепрочитать,долженбытьуказанвспискEF.COMгеруппданных。
Чтениенекоторыхнеобязательныхэлементарныхфайлов,особенносодержащихбиометрическиеданны,етребуетспециальныхмеханизмовбезопасности,которыевыходятзарамкиданногодокумента。
Текущаяверсия”ePassport MRTD榜样”- 1.0изависитотбиблиотекиuFCoderверсии5.0.12ипрошивки这里версии5.0.22。