紹介#
ICAO仕様に準拠したeパスポートを含む,機械可読渡航文書(MRTD)に埋め込まれたNFCタグからのデータグループの読み取りのサポートがuFCoderライブラリに実装されました。
この実装では,NFCチップアクセスの基本アクセス制御(BAC)メカニズムがサポートされています。BACは,MRTDに埋め込まれたNFCタグを使用して,認証とセキュリティで保護された暗号化通信チャネルを有効にします。【中文译文】,3des, icao 9303, 11> > > > > > >
国际民航组织https://www.icao.int)。9303年ICAO仕様はeパスポートを含むMRTDを標準化しています。ICAO Doc 9303, https://www.icao.int/publications/pages/publication.aspx?docnum=9303Web,。
【翻译】バージョン5.0.12好吧!uFCoderラ@ @ブラリ。
最初にMRTDに埋め込まれたNFCタグを認証するには,ドキュメント番号,ドキュメントホルダーの生年月日,およびドキュメントの有効期限を関数MRTD_MRZDataToMRZProtoKey()に渡して,他の必要なセキュリティキーの派生元となる”プロトタイプキー”を取得する必要があります。“プロトキー”(文書番号,文書所有者の生年月日,文書の有効期限)を取得するために必要なすべてのデータは,機械可読ゾーン(MRZ)でエンコードされているため,ライブラリにはMRTD_MRZDataToMRZProtoKey()の代わりに呼び出すことができるMRTD_MRZSubjacentToMRZProtoKey()関数があります。この関数は,ドキュメントMRZのサブジャセント行を含む零で終わる文字列を受け入れます。以下のスクリーンショットは,関数MRTD_MRZSubjacentToMRZProtoKey()にパラメーターとして渡す必要があるコンテンツがマークされたサブジャセント行を持つMRZの例を示しています。
【中文翻译#
MRTD_MRZDataToMRZProtoKey#
英文释义
以降の手順で必要なMRZ原型关键を取得するには,この関数を呼び出して,ドキュメント番号,ドキュメント所有者の生年月日,ドキュメントの有効期限を含む零で終わる文字列を渡します。関数が正常に実行されると,MRZ原型关键は25バイト配列mrz_proto_keyに格納されます。
【中文翻译】
UFR_STATUS MRTD_MRZDataToMRZProtoKey
*出生日期;
*date_of_expiry;
输入/输入:
パラメーター
doc_number | 。 |
date_of_birth | “YYMMDD”形式の生年月日を表す正確に6文字を含む零で終わる文字列へのポインター。 |
date_of_expiry | “YYMMDD”形式の有効期限を表す正確に6文字を含む零で終わる文字列へのポインター。 |
mrz_proto_key | 。25。 |
MRTD_MRZSubjacentToMRZProtoKey#
英文释义
後続の手順で必要なMRZ原型キーを取得するには,TD3 MRZ形式(合88計文字長)の場合,この関数を呼び出して,MRZサブジャセント行を含む零で終わる文字列を渡します。3 . MRZ,。
P < UTOERIKSSON < < <安娜玛丽亚 <<<<<<<<<<<<<<<<<<<
L898902C36UTO7408122F1204159ZE184226B < < < < < 10
この関数は,MRZサブジャセント行を含む零で終わる文字列,つまり”L898902C36UTO7408122F1204159ZE184226B < < < < < 10 "へのポインターを受け取る必要があります。
【中文翻译】
UFR_STATUS MRTD_MRZSubjacentToMRZProtoKey(const char *mrz, uint8_t mrz_proto_key[25]);
パラメーター | |
ティッカー | 。ICAO医生9303 - 10によると,TD1、TD2,またはTD3形式の3つのMRZデータ形式があります。TD1には正確に90文字,TD2には正確に72文字,TD3には正確に88文字が含まれます。 |
mrz_proto_key | 。25。 |
MRTDAppSelectAndAuthenticateBac#
英文释义
北卡罗来纳北卡罗来纳,北卡罗来纳,北卡罗来纳,北卡罗来纳。。,send_sequence_cnt。,ksenc(中文:ksmac(mac)。
【中文翻译】
UFR_STATUS MRTDAppSelectAndAuthenticateBac(const uint8_t mrz_proto_key[25], uint8_t ksenc[16])
[qh]
uint64_t * send_sequence_cnt);
パラメーター
mrz_proto_key | MRTD_MRZDataToMRZProtoKey()またはMRTD_MRZSubjacentToMRZProtoKey()関数の以前の呼び出しを使用して取得されたMRZプロトキー |
クセンク | 16。この配列には,関数が正常に実行された後のセッション暗号化キーが含まれます |
刷刷刷刷 | 16。。 |
send_sequence_cnt | この関数が正常に実行されたら,この64ビット値へのポインターを保存し,MRTDFileReadBacToHeap()やeMRTDを読み取るための他の関数を呼び出すたびに転送する必要があります。 |
MRTDファイル読み取りバックトヒープ#
英文释义
imrtd NFC。この関数は,以前に呼び出されたセキュリティチャネルが正常に確立された後にのみ呼び出すことができます。
MRTDAppSelectAndAuthenticateBac()セッションキーksencとksmac,およびパラメータsend_sequence_cntは,以前に呼び出された
MRTDAppSelectAndAuthenticateBac()この関数が正常に呼び出されると,*输出はfile_indexパラメーターで指定されたeMRTDファイルから読み取られたファイルデータを指します。。32 KB。使用後に割り当てられたデータをクリーンアップする(つまり,標準のC関数である免费()を呼び出すことによって)プログラマーの責任があります。
【中文翻译】
ReadBacToHeap(const uint8_t *file_index)
** **;
Uint32_t *输出长度;
Const uint8_t = 0;
Const uint8_t ksmac[16];
パラメーター
file_index | 。これは,eMRTDファイルを指定する正確に2バイトを含むバイト配列へのポインターです。2。 EF.COM = {0x01, 0x1E} |
|||||||
* | この関数が正常に呼び出されると,このポインターは,file_indexパラメーターで指定されたeMRTDファイルから読み取られたファイルデータを指します。データが格納されるバッファは,関数の実行中に自動的に割り当てられます。32 KB。使用後に割り当てられたデータをクリーンアップする(つまり,標準のC関数である免费()を呼び出すことによって)プログラマーの責任があります。 | |||||||
output_length | この関数が正常に呼び出された後,このポインターは,file_indexパラメーターで指定されたeMRTDファイルから読み取られたファイルデータのサイズを指します。 | |||||||
クセンク | MRTDAppSelectAndAuthenticateBac()関数の以前の呼び出しを使用して取得されたセッション暗号化キー。 | |||||||
刷刷刷刷 | MRTDAppSelectAndAuthenticateBac()関数の以前の呼び出しを使用して取得したMACを計算するためのセッションキー。 | |||||||
send_sequence_cnt | ★★★★★★★★★★ 。 MRTDAppSelectAndAuthenticateBac()関数の呼び出しに成功しました。64年このビット値へのポインターは,この関数やeMRTDの読み取りに使用される他の関数への後続の呼び出しごとに保存および転送する必要があります。 |
uint64_t * send_sequence_cnt);
【翻译#
★★★★★★★★★★★★★★★★★
//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、win32_releaserun_me. Windows。CMD(命令行
- Windows, win64_releaserun_me。CMD(命令行
- 32ビットLinuxの場合はlinux32_release / ePassport_mrtdを起動します
- 64年ビットLinuxの場合は,linux64_release / ePassport_mrtdを起動します。
。在这里リーダーを使用する他のアプリケーションまたはサービスをコンピューターで実行しないでください。“eパスポートMRTDの例“が正常に開始されると,ソフトウェアは以下に示すようにメインの多くを起動します。
”< >ここで,画面上のアプリケーションの使用方法に記載されている“M”または“P”オプションのいずれかを選択する必要があります。
“M”オプションを選択した場合は,テキストが表示されます。
“P < XXX姓< <名 <<<<<<<<<<<<<<<<<<<<<' の下にあるサブジャセントMRZ行を入力することを選択しました。
。中文:44中文:中文:1 .中文:1 .中文:1 .中文:1 .中文:
。。
それ以外の場合,“P”オプションを選択すると,テキストが表示されます。
。
这就是我的意思。。
_________ ...
这是一个很好的例子。。
______ ...
这是一个很好的例子。。
______ ...
。
。
。
——————————————————————-
このメッセージの後,以前に入力したデータが属するePassportに埋め込まれたNFCタグの読み取り操作を続行できます。
。。★★★★★★★★★★★★
——————————————————————-
【翻译】:DL_GENERIC_ISO14443_4, sak = 0x??, uid[4] = ??:??:????
——————————————————————-
この例のSAKとUIDはマスクされており,任意の値を持つことができます。(1) iso14443_4。
。
'C '——このオプションは,eパスポートから共通データ(EF.COM基本ファイル)を読み込みます。。
中文:。??バイト
中文:60 xx xx xx
【翻译】
lds
ユニコードのバージョンは04.00.00です
:
3 . i > > >DG1
3 . i > > >DG2
3 . i > > >DG3
3 . i > > >DG14
——————————————————————-
。(0x60)。。lds, icao 9303,。
摩门教およびUNICODEのバージョンの後には,eパスポートに含まれるデータグループリストが続きます。DG1とDG2のみが必須です。他のすべてのデータグループは,特定のMRTDに存在することも,存在しないこともできます。
'年代——このオプションは,ドキュメントセキュリティオブジェクト(EF.SOエレメンタリーファイル)をクリックし,プロンプトが表示されたときに入力する必要のあるパスと名前をバイナリファイルに保存します。文書セキュリティー・オブジェクトには,標準PKCS # 7CMS。[中文]:★★★★★★★
D
'1 '-。DG1を解析し、生データと解析済みデータを次の形式で表示します。
好吧。DG1が正常に読み取られました。 ファイルの長さは??バイト
;
61 xx xx xx xx
- xxxx xxxx
中文:中文:Dg1
中文:p ()
???
第一名
書類番号: ?????????
国籍:。。。
生年月日: ??.??.????.
性:。。。。
(dd.MM.yyyy.): ???? ?? ????。
: ??????????????
——————————————————————-
。(0x61)。。
'2》-。DG2を選択し、プロンプトが表示されたときに入力する必要があるパスと名前をバイナリファイルに保存します。 エフ。DG2にはドキュメントホルダーの顔画像が含まれており、必須です。 エフ。顔画像の横にあるDG2には、生体認証の顔の特徴も含まれている可能性があります。 EF についての詳細。DG2コンテンツは, icao 9303,> > > > > > > >
'我-。Dg2。この場合,顔画像のみがMRTDファイルから抽出され,入力したパスと名前がファイルに保存されます。。このコンテキストでは,JPEGまたはJP2(つまりJPEG 2000)の2つの画像ファイル形式が定義されています。
'D '——このオプションは,基本データグループ(EF.DG)ファイルをMRTDから取得し,プロンプトが表示されたときに入力する必要があるパスと名前をバイナリファイルに保存します。。dg。{}} {}} {}} {}}}14 . .DG14)。。
一部のオプションの基本ファイル,特に生体認証データを含むファイルの読み取りには,このドキュメントの範囲外の特別なセキュリティメカニズムが必要です。
“eパスポートMRTDの例“の現在のバージョンは1.0でuFCoderライブラリバージョン5.0.12および这里ファームウェアバージョン5.0.22に依存します。