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

# はじめに

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

<div>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204326/e18cdbe6-7fe8-dc93-c308-63a0c99bd6f7.png" alt="外務省のパスポートのサンプル画像" width=60%/>
</div>

外務省が公開している[旅券統計](https://www.mofa.go.jp/mofaj/toko/tokei/passport/index.html)を見る限り、だいたい4人に1人が有効なパスポートを保有しているのではないかと思います。
私は海外旅行以外の用途では業務周りでしか使っていませんが、身分証明書として使っている人もいるかもしれません。

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

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

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

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


# 仕様書はどこにあるのか？

パスポートの標準仕様は[ICAO(国際民間航空機関)](https://ja.wikipedia.org/wiki/%E5%9B%BD%E9%9A%9B%E6%B0%91%E9%96%93%E8%88%AA%E7%A9%BA%E6%A9%9F%E9%96%A2)によって制定・公開されています。
そのため、仕様書は「[machine readable travel documents icao](https://www.google.co.jp/search?q=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)](https://www.icao.int/publications/Documents/9303_p10_cons_en.pdf)」というPDFファイルが見つかります。この時点では、「Seventh Edition, 2015」となっていました。


# ファイルの構成

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

MF
 └── eMRTD Application
 　　　 ├── EF.COM: [Common Data](#common-data)
 　　　 ├── EF.SO<SUB>D</SUB>: [Document Security Object] (#document-security-object)
 　　　 ├── EF.DG1: [Machine Readable Zone Information](#data-group-1)
 　　　 ├── EF.DG2: [Encoded Identification Features — Face](#data-group-2)
 　　　 ├── EF.DG3: [Additional Identification Feature — Finger(s)](#data-group-3)
 　　　 ├── EF.DG4: [Additional Identification Feature — Iris(es)](#data-group-4)
 　　　 ├── EF.DG5: [Displayed Portrait](#data-group-5)
 　　　 ├── EF.DG6: [Reserved For Future Use](#data-group-6)
 　　　 ├── EF.DG7: [Displayed Signature or Usual Mark](#data-group-7)
 　　　 ├── EF.DG8: [Data Feature(s)](#data-group-8)
 　　　 ├── EF.DG9: [Structure Feature(s)](#data-group-9)
 　　　 ├── EF.DG10: [Substance Feature(s)](#data-group-10)
 　　　 ├── EF.DG11: [Additional Personal Detail(s)](#data-group-11)
 　　　 ├── EF.DG12: [Additional Document Detail(s)](#data-group-12)
 　　　 ├── EF.DG13: [Optional Details(s)](#data-group-13)
 　　　 ├── EF.DG14: [Security Options](#data-group-14)
 　　　 ├── EF.DG15: [Active Authentication Public Key Info](#data-group-15)
 　　　 └── EF.DG16: [Person(s) to Notify](#data-group-16)

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データ**が格納されています。

<TABLE>
<TH COLSPAN=3>TLVデータ</TH>
<TR><TD>T</TD><TD>L</TD><TD>V</TD></TR>
</TABLE>

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

<TABLE>
<TH COLSPAN=3>TLVデータ1</TH><TH COLSPAN=3>TLVデータ2</TH><TH COLSPAN=3>TLVデータ3</TH><TH>・・・</TH>
<TR><TD>T</TD><TD>L</TD><TD>V</TD><TD>T</TD><TD>L</TD><TD>V</TD><TD>T</TD><TD>L</TD><TD>V</TD><TD>・・・</TD></TR>
</TABLE>


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

<TABLE>
<TH COLSPAN=1>T</TH><TH>L</TH><TH COLSPAN=2>V</TH>
<TR><TD COLSPAN=2></TD><TD>TLVデータ1</TD><TD>TLVデータ2</TD></TR>
</TABLE>

## タグフィールドって？

タグフィールドは、対応する値フィールドにどういったデータが格納されているのかを知るための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")のいずれかの値となります。

<TABLE>
<TH>第1バイト</TH><TH>第2バイト</TH><TH>第3バイト</TH>
<TR><TD>"82"</TD><TD COLSPAN=2>16ビットで表現される値</TD></TR>
</TABLE>

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


## 値フィールドとは？

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

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

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


# 各ファイルの内容

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

分かりやすくするため、タグフィールドを<font color="Blue">青</font>、長さフィールドを<font color="Red">赤色</font>、値フィールドを<font color="Green">緑色</font>とした、16進数で表現することとします。

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


## キーワード

以降で登場するキーワード**「REQUIRED(必須である)」**および**「OPTIONAL(任意である)」**は[**RFC 2119**](https://tools.ietf.org/html/rfc2119)で定義されています。



**「CONDITIONAL」**の説明は「[Part 1: Introduction](https://www.icao.int/publications/Documents/9303_p1_cons_en.pdf)」に以下のようにあります。

>  *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と言った、パスポートから他のデータを読み出す際に知っておくべき情報が格納されています。

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

<font color="Blue">60</font><font color="Red">16</font><font color="Green">5F0104303130375F36063034303030305C0461756D6F</font>

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


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


### LDS Version Number

<font color="Blue">5F01</font><font color="Red">04</font><font color="Green">30313037</font>

<font color="Blue">"5F01"</font>は**LDS Version Number**であることを、<font color="Red">"04"</font>は値フィールドの長さが4であることを示しています。

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

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

|"30"|"31"|"30"|"37"|
|:--:|:--:|:--:|:--:|
| 0  | 1  | 0  | 7  |

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


### Unicode Version Level

<font color="Blue">5F36</font><font color="Red">06</font><font color="Green">303430303030</font>

<font color="Blue">"5F36"</font>は**Unicode Version Level**であることを、<font color="Red">"06"</font>は値フィールドの長さが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

<font color="Blue">5C</font><font color="Red">04</font><font color="Green">61756D6F</font>

<font color="Blue">"5C"</font>は**Tag List**であることを、<font color="Red">"04"</font>は値フィールドの長さが4であることを示しています。

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

<font color="Green">"61756D6F"</font>の場合、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.SO<SUB>D</SUB>は**REQUIRED**なファイルです。
このファイルには**Document Security Object**が格納されています。

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

<font color="Blue">77</font><font color="Red">長さフィールド</font><font color="Green">値フィールド</font>

具体例に関しては割愛します。データ構造の詳細に関しては、[仕様書](#仕様書はどこにあるの)をご参照ください。

## Data Group 1

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

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

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

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

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

<font color="Blue">61</font><font color="Red">5B</font><font color="Green">5F1F58503C4A504E54414E414B413C3C5441524F553C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C545231323334353637324A504E303030313031384D323530313031373C3C3C3C3C3C3C3C3C3C3C3C3C3C3038</font>


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

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


### MRZ Data

<font color="Blue">5F1F</font><font color="Red">58</font><font color="Green">503C4A504E54414E414B413C3C5441524F553C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C545231323334353637324A504E303030313031384D323530313031373C3C3C3C3C3C3C3C3C3C3C3C3C3C3038</font>

<font color="Blue">"5F1F"</font>は**MRZ Data**が格納されていることを、<font color="Red">"58"</font>は値フィールドの長さが88であることを示しています。

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

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

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


#### Document Code

<b>P&lt;</b><font color="silver">JPNTANAKA&lt;&lt;TAROU&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;</font>

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


#### Issuing State or Organization

<font color="silver">P&lt;</font><b>JPN</b><font color="silver">TANAKA&lt;&lt;TAROU&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;</font>

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


#### Name of Holder

<font color="silver">P&lt;JPN</font><b>TANAKA&lt;&lt;TAROU&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;</b>

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


#### Document Number

<b>TR1234567</b><font color="silver">2JPN0001018M2501017&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;08</font>

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

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


#### Check Digit — Document Number

<font color="silver">TR1234567</font><b>2</b><font color="silver">JPN0001018M2501017&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;08</font>

54文字目の「2」はcheck digitです。
check digitは[**OCR**](https://ja.wikipedia.org/wiki/%E5%85%89%E5%AD%A6%E6%96%87%E5%AD%97%E8%AA%8D%E8%AD%98)で文字列を読み取ったときに、文字認識に誤りがないかチェックするために用いる数値です。


#### Nationality

<font color="silver">TR12345672</font><b>JPN</b><font color="silver">0001018M2501017&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;08</font>

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


#### Date of Birth

<font color="silver">TR12345672JPN</font><b>000101</b><font color="silver">8M2501017&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;08</font>

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


#### Check Digit — Date of Birth

<font color="silver">TR12345672JPN000101</font><b>8</b><font color="silver">M2501017&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;08</font>

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


#### Sex

<font color="silver">TR12345672JPN0001018</font><b>M</b><font color="silver">2501017&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;08</font>

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


#### Date of Expiry

<font color="silver">TR12345672JPN0001018M</font><b>250101</b><font color="silver">7&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;08</font>

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


#### Check Digit — Date of Expiry or Valid Until Date

<font color="silver">TR12345672JPN0001018M250101</font><b>7</b><font color="silver">&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;08</font>

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


#### Optional Data

<font color="silver">TR12345672JPN0001018M2501017</font><b>&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;</b><font color="silver">08</font>

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


#### Check Digit

<font color="silver">TR12345672JPN0001018M2501017&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;</font><b>0</b><font color="silver">8</font>

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


#### Composite Check Digit

<font color="silver">TR12345672JPN0001018M2501017&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;0</font><b>8</b>

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


## Data Group 2

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

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

<font color="Blue">75</font><font color="Red">824425</font><font color="Green">7F618244200201017F60824418A10E81010282010087020101880200085F2E8244034641430030313000000044(以下略)</font>


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

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

- <font color="Blue">7F61</font><font color="Red">824420</font>
    - <font color="Blue">02</font><font color="Red">01</font><font color="Green">01</font>
    - <font color="Blue">7F60</font><font color="Red">824418</font>
        - <font color="Blue">A1</font><font color="Red">0E</font>
            - <font color="Blue">81</font><font color="Red">01</font><font color="Green">02</font>
            - <font color="Blue">82</font><font color="Red">01</font><font color="Green">00</font>
            - <font color="Blue">87</font><font color="Red">02</font><font color="Green">0101</font>
            - <font color="Blue">88</font><font color="Red">02</font><font color="Green">0008</font>
        - <font color="Blue">5F2E</font><font color="Red">824403</font><font color="Green">4641430030313000000044(以下略)</font>

各TLVデータの詳細については割愛しますが、このパスポートでは<font color="Blue">"5F2E"</font>に対応する値フィールドに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データの形式は以下の通りです。

<font color="Blue">6D</font><font color="Red">長さフィールド</font><font color="Green">値フィールド</font>

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

<font color="Blue">5A</font><font color="Red">09</font><font color="Green">545231323334353637</font>
<font color="Blue">5F72</font><font color="Red">0A</font><font color="Green">30303030303030303030</font>
<font color="Blue">5F73</font><font color="Red">0C</font><font color="Green">303030303030303030303030</font>

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


## Data Group 14

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

データの詳細に関しては[Part 11: Security Mechanisms for MRTDs](https://www.icao.int/publications/Documents/9303_p11_cons_en.pdf)をご参照ください。
日本発行のパスポートの場合、このファイル自体が存在しないようです。


## Data Group 15

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

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

<font color="Blue">6F</font><font color="Red">長さフィールド</font><font color="Green">値フィールド</font>

公開鍵のデータ構造は「[Part 11: Security Mechanisms for MRTDs](https://www.icao.int/publications/Documents/9303_p11_cons_en.pdf)」に記載されています。

仕様書によると、[**RFC 5280**](https://tools.ietf.org/html/rfc5280)で定義された**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


# 似たような記事

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

- [IC運転免許証に格納されたデータを紹介してみる](https://qiita.com/ikazayim/items/2e9b8bdca96db6bf34cb)
- [在留カード等に格納されたデータを紹介してみる](https://qiita.com/ikazayim/items/0afe13e618f91fe1d4db)