LoginSignup
12
6

More than 3 years have passed since last update.

ICパスポートに格納されたデータを紹介してみる

Last updated at Posted at 2019-12-20

はじめに

唐突ですが、持ってますか? パスポート

外務省のパスポートのサンプル画像

外務省が公開している旅券統計を見る限り、だいたい4人に1人が有効なパスポートを保有しているのではないかと思います。
私は海外旅行以外の用途では業務周りでしか使っていませんが、身分証明書として使っている人もいるかもしれません。

そんなパスポートですが、その中にどんなデータが格納されているのか知っている人は、果たしてどれだけいるでしょうか?
パスポートの顔写真等が記載されたページを見ればある程度の予想はできると思いますが、仕様書まで読んだことがある人はほとんどいないのではないでしょうか。

と言うことで、この記事ではパスポートのICチップの中にはいったいどんなデータが格納されているのか、2019/12/20現在における仕様書の内容をベースにふわっと紹介します。

なお、ICチップを搭載していない古いパスポートに関しては、全く考慮していません。
また、パスポートから各種論理ファイルの内容を読み出すまでに関しても一切触れないので、あらかじめご了承ください。

(ちなみに上記の画像は外務省のページから拝借してきた画像を加工したものです。)

仕様書はどこにあるのか?

パスポートの標準仕様はICAO(国際民間航空機関)によって制定・公開されています。
そのため、仕様書は「machine readable travel documents icao」とでもググればすぐに見つかるかと思います。

2019/12/20現在、論理ファイルに関する仕様書としては「Part 10: Logical Data Structure (LDS) for Storage of Biometrics and Other Data in the Contactless Integrated Circuit (IC)」というPDFファイルが見つかります。この時点では、「Seventh Edition, 2015」となっていました。

ファイルの構成

パスポートには、以下のような構成の論理ファイルが入っています。
「:」以降にはファイルの内容を記載しています。

MF
└── eMRTD Application
    ├── EF.COM: Common Data
    ├── EF.SOD: Document Security Object
    ├── EF.DG1: Machine Readable Zone Information
    ├── EF.DG2: Encoded Identification Features — Face
    ├── EF.DG3: Additional Identification Feature — Finger(s)
    ├── EF.DG4: Additional Identification Feature — Iris(es)
    ├── EF.DG5: Displayed Portrait
    ├── EF.DG6: Reserved For Future Use
    ├── EF.DG7: Displayed Signature or Usual Mark
    ├── EF.DG8: Data Feature(s)
    ├── EF.DG9: Structure Feature(s)
    ├── EF.DG10: Substance Feature(s)
    ├── EF.DG11: Additional Personal Detail(s)
    ├── EF.DG12: Additional Document Detail(s)
    ├── EF.DG13: Optional Details(s)
    ├── EF.DG14: Security Options
    ├── EF.DG15: Active Authentication Public Key Info
    └── EF.DG16: Person(s) to Notify

Windowsのファイルシステムで例えると、MFは「ルートフォルダ」、eMRTD Applicationは「アプリケーションフォルダ」、EFは「ファイル」のようなものだと思ってください(Linux界隈の人は「フォルダ」を「ディレクトリ」に読み替えてください)。
そのため、上記のようにMFの下にeMRTD Applicationが、更にその下にEFがあるような構成を取ることができます。

仕様書を見れば他にも幾つかファイルが定義されていることわかると思いますが、本記事ではeMRTD Application以下のファイルのみ紹介することとします。
ちなみに、eMRTDは"Electronic Machine Readable Travel Document"の略です。
ICパスポート("Electronic Machine Readable Passport"または"eMRP")はeMRTDの一種という扱いになっているようです。

ファイルのデータ構造

EF.DG1やEF.DG2といった各ファイルの中には、タグフィールド(T)長さフィールド(L)値フィールド(V)の3つで構成されるTLVデータが格納されています。

TLVデータ
T L V

TLVデータは複数並べることや、

TLVデータ1 TLVデータ2 TLVデータ3 ・・・
T L V T L V T L V ・・・

あるTLVデータの値フィールドに更にTLVデータが入っているような構造を取ることも可能です。

T L V
TLVデータ1 TLVデータ2

タグフィールドって?

タグフィールドは、対応する値フィールドにどういったデータが格納されているのかを知るための1バイト以上の値です。要はラベルのようなものだと考えてください。

例えば、タグフィールドの値が"5F1F"であれば、対応する値フィールドにはMRZ Dataが格納されているとわかります。

タグフィールドと値フィールドの内容の対応関係に関しては、仕様書に記載されています。

長さフィールドとは?

長さフィールドは、後述の値フィールドの長さを示す1バイト以上の値です。
以下の2パターンが存在しています。

(A) 1バイト目のb8が0の場合

長さフィールドは、以下のようにb8(最上位ビット)が0で、続くb7~b1で0~127の整数を符号化(上位先順)する1バイトの形を取ります。
b7~b1で表現される値は、値フィールドの長さを示しています。

b8 b7~b1
0 値フィールドの長さ

このパターンの場合、読み込んだ1バイトの値を単純に10進数に変換した値が値フィールドの長さとなります。そのため、値フィールドの長さは0~127の値のいずれかとなります。

例えば、長さフィールドが16進数で"64"となる1バイトのとき、値フィールドの長さは100となります。

(B) 1バイト目のb8が1の場合

長さフィールドの1バイト目は、以下のようにb8(最上位ビット)が1で、続くb7~b1で0~127の整数を符号化(上位先順)する形を取ります。
b7~b1で表現される値は、続く何バイトで長さを表現するかを示しています。

b8 b7~b1
1 以降の何バイトで長さを表現するか

例えば1バイト目が"82"の場合、値フィールドの長さは以下のように2バイト目と3バイト目の計16ビットで表現される0("0000")~65535("FFFF")のいずれかの値となります。

第1バイト 第2バイト 第3バイト
"82" 16ビットで表現される値

具体例として長さフィールドが16進数で"822710"となる3バイトとしたとき、値フィールドの長さは2バイト目の値と3バイト目で表現される値を10進数に変換して10000となります。

値フィールドとは?

値フィールドは、名前の通り値が入ったフィールドです。
長さフィールドの値が"00"、すなわち値フィールドの長さが0の時、値フィールドは存在しません。

値フィールドに何のデータが格納されているかは、タグフィールドの値を見ればわかります。

値フィールドにTLVデータではなく符号化されたデータ(文字列や画像等)が格納されている場合、それがどのように符号化されているかは、値フィールドによって異なります。各値フィールドの符号化方式に関しては仕様書をご参照ください。

各ファイルの内容

各ファイルにどのような情報がどのように格納されているのか紹介します。
「Common Data」や「Machine Readable Zone Information」のようなファイルやデータの内容を示す単語は、仕様書そのままの表現としていますのでご理解ください。

分かりやすくするため、タグフィールドを、長さフィールドを赤色、値フィールドを緑色とした、16進数で表現することとします。

なお、以降で登場するTLVデータの具体例のうち、氏名や生年月日のように個人情報に関連するものは実際のデータを参考に作成した架空のデータとなっています。

キーワード

以降で登場するキーワード「REQUIRED(必須である)」および「OPTIONAL(任意である)」RFC 2119で定義されています。

「CONDITIONAL」の説明は「Part 1: Introduction」に以下のようにあります。

The usage of an item is dependent on the usage of other items. It is therefore further qualified under which conditions the item is REQUIRED or RECOMMENDED. This is an additional key word used in Doc 9303 (not part of RFC 2119).

Common Data

MF/eMRTD Application/EF.COMはREQUIREDなファイルです。
このファイルには、Common Dataが格納されています。

具体的には、LDS Version Number、Unicode Version Level、Tag listと言った、パスポートから他のデータを読み出す際に知っておくべき情報が格納されています。

実際にどう言った値が格納されているのか、以下の具体例を用いて紹介します。

60165F0104303130375F36063034303030305C0461756D6F

"60"は、値フィールドの中にCommon Dataの各値が格納されていることを示し、"16"は値フィールドの長さが22であることを示します。

値フィールドをさらにTLVデータとしてパースしてみると、以下で紹介する三つのデータが並んでいることがわかります。

LDS Version Number

5F010430313037

"5F01"LDS Version Numberであることを、"04"は値フィールドの長さが4であることを示しています。

仕様書によるとLDSは"Logical Data Structure"の略称とのことで、LDS Version Numberの値はどの時点の論理ファイルや論理ファイル内のデータ構造に対応したデータが、パスポートに格納されているのかを示しているようです。

値フィールドをUnicodeに基づいて変換していくと、以下のようになります。

"30" "31" "30" "37"
0 1 0 7

得られた「0107」はバージョン1.7のことを指しているようです。

Unicode Version Level

5F3606303430303030

"5F36"Unicode Version Levelであることを、"06"は値フィールドの長さが6であることを示しています。

Unicode Version Levelはパスポート内に格納された文字列が、Unicodeのどのバージョンに基づいて符号化されているのかを示しています。
値フィールドをUnicodeに基づいて変換していくと、以下のようになります。

"30" "34" "30" "30" "30" "30"
0 4 0 0 0 0

得られた「040000」はUnicode 4.0.0のことを指しているようです。

Tag List

5C0461756D6F

"5C"Tag Listであることを、"04"は値フィールドの長さが4であることを示しています。

Tag Listは仕様書に定義されたData Group 1~16のうち、どのデータがパスポート内に格納されているのかを示す値です。各Data Groupに対応する1バイトのタグ番号が並べられています。

"61756D6F"の場合、Data Group1("61")、Data Group2("75")、Data Group13("6D")、Data Group15("6F")がパスポートに格納されていることを示しています。

Data Groupとタグ番号の対応関係は以下の通りです。

Data Group タグ番号(16進数)
Data Group1 61
Data Group2 75
Data Group3 63
Data Group4 76
Data Group5 65
Data Group6 66
Data Group7 67
Data Group8 68
Data Group9 69
Data Group10 6A
Data Group11 6B
Data Group12 6C
Data Group13 6D
Data Group14 6E
Data Group15 6F
Data Group16 70

Document Security Object

MF/eMRTD Application/EF.SODREQUIREDなファイルです。
このファイルにはDocument Security Objectが格納されています。

具体的には、以下のような形で値フィールドに署名値や各Data Groupのデータのハッシュ値が格納されています。

77長さフィールド値フィールド

具体例に関しては割愛します。データ構造の詳細に関しては、仕様書をご参照ください。

Data Group 1

MF/eMRTD Application/EF.DG1はREQUIREDなファイルです。
このファイルには、Machine Readable Zone Informationが格納されています。

パスポートの顔写真等が印刷されているページの下の方には以下のような文字列が印刷されていて、この文字列が印刷されている領域をMRZ(Machine Readable Zone)と呼びます。

P<JPNTANAKA<<TAROU<<<<<<<<<<<<<<<<<<<<<<<<<<
TR12345672JPN0001018M2501017<<<<<<<<<<<<<<08

このファイルにはMRZに印刷されているものと同じ文字列がテキストデータとして格納されています(改行は含まれません)。

実際にどう言った値が格納されているのか、以下の具体例を用いて紹介します。

615B5F1F58503C4A504E54414E414B413C3C5441524F553C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C545231323334353637324A504E303030313031384D323530313031373C3C3C3C3C3C3C3C3C3C3C3C3C3C3038

"61"はMRZ Infomationの値が格納されていることを、"5B"は値フィールドの長さが91であることを示しています。

値フィールドをさらにTLVデータとしてパースしてみると、以下のようになっていることがわかります。

MRZ Data

5F1F58503C4A504E54414E414B413C3C5441524F553C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C545231323334353637324A504E303030313031384D323530313031373C3C3C3C3C3C3C3C3C3C3C3C3C3C3038

"5F1F"MRZ Dataが格納されていることを、"58"は値フィールドの長さが88であることを示しています。

値フィールドに格納されている値をUnicodeに基づいて変換していくと、上述の例と同じ以下のような文字列を得ることができます。見やすいように半分の44文字で改行しています。

P<JPNTANAKA<<TAROU<<<<<<<<<<<<<<<<<<<<<<<<<<
TR12345672JPN0001018M2501017<<<<<<<<<<<<<<08

見ただけでも何となく分かると思いますが、この文字列が何を意味するのか一応紹介します。
各情報は文字数が決まっているため、決まった文字数を順番に見ていけばどんな情報が文字列に含まれているのか簡単にわかります。

Document Code

P<JPNTANAKA<<TAROU<<<<<<<<<<<<<<<<<<<<<<<<<<

1~2文字目はドキュメントの種別を示しています。
「P<」の場合、そのドキュメントがパスポートであることを意味します。

Issuing State or Organization

P<JPNTANAKA<<TAROU<<<<<<<<<<<<<<<<<<<<<<<<<<

3~5文字目は発行国を示しています。
「JPN」の場合、パスポートが日本で発行されたものであることを意味します。

Name of Holder

P<JPNTANAKA<<TAROU<<<<<<<<<<<<<<<<<<<<<<<<<<

6~44文字目は氏名を示しています。
「TANAKA<<TAROU」はパスポート所有者の姓が「TANAKA」で、名が「TAROU」であることを意味します。
姓名の間の「<<」は姓と名の区切りであることを示しています。海外で発行されたパスポートでも、姓と名は同じ並びのようです。仕様書(Part 3)に記載された例では、ミドルネームは名の方に含まれていました。
末尾の「<<<<<<<<<<<<<<<<<<<<<<<<<<」は余白です。

Document Number

TR12345672JPN0001018M2501017<<<<<<<<<<<<<<08

45~53文字目はドキュメント番号を示しています。
Document Codeが「P<」でパスポートを示しているので、「TR1234567」はパスポート番号となります。

ちなみに、有効期限が10年のパスポートは先頭が「T」で始まり、5年のパスポートは「M」で始まるようです。

Check Digit — Document Number

TR12345672JPN0001018M2501017<<<<<<<<<<<<<<08

54文字目の「2」はcheck digitです。
check digitはOCRで文字列を読み取ったときに、文字認識に誤りがないかチェックするために用いる数値です。

Nationality

TR12345672JPN0001018M2501017<<<<<<<<<<<<<<08

55~57文字目は所有者の国籍を示しています。
「JPN」の場合、パスポート所有者の国籍が日本であることを意味します。

Date of Birth

TR12345672JPN0001018M2501017<<<<<<<<<<<<<<08

58~63文字目は所有者の生年月日を示しています。
「000101」の場合、パスポート所有者の生年月日がXX00年01月01日であることを意味します。
1900年生まれなのか、2000年生まれなのかは区別できません。

Check Digit — Date of Birth

TR12345672JPN0001018M2501017<<<<<<<<<<<<<<08

64文字目の「8」はcheck digitです。

Sex

TR12345672JPN0001018M2501017<<<<<<<<<<<<<<08

65文字目は所有者の性別を示しています。
「M」場合、パスポート所有者の性別が男性であることを意味します。
女性の場合は「F」になります。

Date of Expiry

TR12345672JPN0001018M2501017<<<<<<<<<<<<<<08

66~71文字目は有効期限を示しています。
「250101」の場合、パスポートの有効期限がXX25年01月01日であることを意味します。

Check Digit — Date of Expiry or Valid Until Date

TR12345672JPN0001018M2501017<<<<<<<<<<<<<<08

72文字目の「7」はcheck digitです。

Optional Data

TR12345672JPN0001018M2501017<<<<<<<<<<<<<<08

73~86文字目は発行国や発行組織ごとの任意のデータを示しています。
発行国・組織によってどんなデータが入っているかは変わりますが、日本発行のパスポートの場合は「<<<<<<<<<<<<<<」のように何も入っていないようです。

Check Digit

TR12345672JPN0001018M2501017<<<<<<<<<<<<<<08

87文字目の「0」はcheck digitです。

Composite Check Digit

TR12345672JPN0001018M2501017<<<<<<<<<<<<<<08

88文字目の「8」はcheck digitです。

Data Group 2

MF/eMRTD Application/EF.DG2はREQUIREDなファイルです。
このファイルには、Encoded Identification Features — Faceが格納されています。

具体的には以下のような形で顔写真に関するデータが格納されています。
手元のパスポートには、以下のようなデータが格納されていました。

758244257F618244200201017F60824418A10E81010282010087020101880200085F2E8244034641430030313000000044(以下略)

"75"は顔写真に関するデータが格納されていることを、"824425"は値フィールドの長さが17445であることを示しています。

値フィールドをさらにTLVデータとしてパースしてみると、以下のようなデータ構造になっていることがわかります。

  • 7F61824420
    • 020101
    • 7F60824418
      • A10E
        • 810102
        • 820100
        • 87020101
        • 88020008
      • 5F2E8244034641430030313000000044(以下略)

各TLVデータの詳細については割愛しますが、このパスポートでは"5F2E"に対応する値フィールドにJPEGデータが格納されていました。

Data Group 3

MF/eMRTD Application/EF.DG3はOPTIONALなファイルです。
このファイルには、Additional Identification Feature — Finger(s)が格納されています。

具体的には指紋が格納されているようです。
日本発行のパスポートの場合、このファイル自体が存在しないようです。

Data Group 4

MF/eMRTD Application/EF.DG4はOPTIONALなファイルです。
このファイルには、Additional Identification Feature — Iris(es)が格納されています。

具体的には虹彩の情報が格納されているようです。
日本発行のパスポートの場合、このファイル自体が存在しないようです。

Data Group 5

MF/eMRTD Application/EF.DG5はOPTIONALなファイルです。
このファイルには、Displayed Portraitが格納されています。

恐らくですが、Data Group 2に格納されているのとは異なる顔写真が格納されているようです。
日本発行のパスポートの場合、このファイル自体が存在しないようです。

Data Group 6

MF/eMRTD Application/EF.DG6はRFU(Reserved for Future Use)のファイルです。
現状、特に使われていないはずのファイルです。

Data Group 7

MF/eMRTD Application/EF.DG7はOPTIONALなファイルです。
このファイルには、Displayed Signature or Usual Markが格納されています。

恐らくですが、パスポートの顔写真等が印刷されているページにある署名(所持人自署の欄)の画像が格納されているようです。
日本発行のパスポートの場合、このファイル自体が存在しないようです。

Data Group 8

MF/eMRTD Application/EF.DG8はOPTIONALなファイルです。
このファイルには、Data Feature(s)が格納されています。

このData Groupはまだ定義されていませんが、定義されるまでの間は独自の用途で使っても良いとされているようです。
日本発行のパスポートの場合、このファイル自体が存在しないようです。

Data Group 9

MF/eMRTD Application/EF.DG9はOPTIONALなファイルです。
このファイルには、Structure Feature(s)が格納されています。

このData Groupはまだ定義されていませんが、定義されるまでの間は独自の用途で使っても良いとされているようです。
日本発行のパスポートの場合、このファイル自体が存在しないようです。

Data Group 10

MF/eMRTD Application/EF.DG10はOPTIONALなファイルです。
このファイルには、Substance Feature(s)が格納されています。

このData Groupはまだ定義されていませんが、定義されるまでの間は独自の用途で使っても良いとされているようです。
日本発行のパスポートの場合、このファイル自体が存在しないようです。

Data Group 11

MF/eMRTD Application/EF.DG11はOPTIONALなファイルです。
このファイルには、Additional Personal Detail(s)が格納されています。

具体的には個人番号、電話番号、職業等と言った所有者に関する追加の情報が格納されているようです。
日本発行のパスポートの場合、このファイル自体が存在しないようです。

Data Group 12

MF/eMRTD Application/EF.DG12はOPTIONALなファイルです。
このファイルには、Additional Document Detail(s)が格納されています。

具体的には発行機関や発行日と言ったドキュメントに関する追加の情報が格納されているようです。
日本発行のパスポートの場合、このファイル自体が存在しないようです。

Data Group 13

MF/eMRTD Application/EF.DG13はOPTIONALなファイルです。
このファイルには、Optional Details(s)が格納されています。

どういったデータが格納されているのかは仕様書には記載がありません。発行国や発行組織ごとに違うようです。日本発行のパスポートの場合、このファイルにはデータが格納されているようです。

TLVデータの形式は以下の通りです。

6D長さフィールド値フィールド

手元のパスポートからデータを取り出して、値フィールドをTLVの形式にパースしたところ、以下のように三つのTLVデータが並んでいました("5F72""5F73"の値フィールドの内容は"30"の羅列に変更しています)。

5A09545231323334353637
5F720A30303030303030303030
5F730C303030303030303030303030

"5A"の値フィールドには、パスポート番号に対応するUnicodeの文字コードが格納されているようです。
"5F72""5F73"の値フィールドもぱっと見た感じ、Unicodeの文字コードが並んでいるようでしたが、何のデータが格納されているのかまでは分かりませんでした。

Data Group 14

MF/eMRTD Application/EF.DG14はCONDITIONALなファイルです。
このファイルには、Security Optionsが格納されています。

データの詳細に関してはPart 11: Security Mechanisms for MRTDsをご参照ください。
日本発行のパスポートの場合、このファイル自体が存在しないようです。

Data Group 15

MF/eMRTD Application/EF.DG15はCONDITIONALなファイルです。
このファイルには、Active Authentication Public Key Infoが格納されています。

具体的には、以下のような形で値フィールドにActive Authenticationで用いる公開鍵が格納されています。

6F長さフィールド値フィールド

公開鍵のデータ構造は「Part 11: Security Mechanisms for MRTDs」に記載されています。

仕様書によると、RFC 5280で定義されたSubjectPublicKeyInfoのデータが、DERで符号化された形で格納されているようです。

Data Group 16

MF/eMRTD Application/EF.DG16はOPTIONALなファイルです。
このファイルには、Person(s) to Notifyが格納されています。

具体的には氏名、住所、電話番号と言った緊急通知情報が格納されているようです。
日本発行のパスポートの場合、このファイル自体が存在しないようです。

所感

特に触れていませんが、パスポートからデータを読み出すまでの過程もかなり面倒でした。

参考文献

https://www.icao.int/publications/Documents/9303_p1_cons_en.pdf
https://www.icao.int/publications/Documents/9303_p3_cons_en.pdf
https://www.icao.int/publications/Documents/9303_p4_cons_en.pdf
https://www.icao.int/publications/Documents/9303_p10_cons_en.pdf
https://www.icao.int/publications/Documents/9303_p11_cons_en.pdf
https://tools.ietf.org/html/rfc2119
https://tools.ietf.org/html/rfc5280
https://en.wikipedia.org/wiki/X.690
https://ja.wikipedia.org/wiki/Abstract_Syntax_Notation_One
https://ja.wikipedia.org/wiki/JPEG
https://ja.wikipedia.org/wiki/%E3%83%91%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88
https://ja.wikipedia.org/wiki/Unicode%E4%B8%80%E8%A6%A7_0000-0FFF
https://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E5%9B%BD%E6%97%85%E5%88%B8
http://luca.ntop.org/Teaching/Appunti/asn1.html
http://www5d.biglobe.ne.jp/~stssk/asn1/index.html
http://shaw.la.coocan.jp/security/asn1/ber.php
https://www.mofa.go.jp/mofaj/ca/pss/page3_002789.html

似たような記事

良ければこちらもどうぞ。

12
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
6