葛飾北斎「冨嶽三十六景」デザインの新型パスポートに切り替えたら、ICチップの真正性検証が通らなくなった話

## はじめに

2020年2月4日以降のパスポート申請から、新型のパスポートが交付されるようになりました。葛飾北斎の「冨嶽三十六景」が査証欄に描かれたデザインがカッコいいですね！
![000432972.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87092/1b103077-4a30-2df4-343b-6dd7869e4859.jpeg)
上記画像は[2020年旅券](https://www.mofa.go.jp/mofaj/ca/pss/page23_002803.html)より引用。

タイミング良くパスポートの期限が迫っていたため申請し、新型パスポートの交付を受けました。早速、パスポートのICチップの内容を確認してみようと思ったところ、以前のパスポートとは仕様が異なっていることが分かりました。

## パスポートのICチップとは

まず、パスポートにICチップが搭載されていることを知らない方もいると思いますので、簡単に説明します。ICチップには顔写真や氏名などが記録されており、例えば顔写真だけを偽造してもICチップに記録された顔写真情報と比較し、偽造を見抜くことができます。
>Q　ICチップには何が記録されるのですか。指紋も記録されますか。
>A　日本が導入したIC旅券に記録される生体情報は、ICAO（国際民間航空機関）が策定したIC旅券の国際標準において必須と規定されている顔画像・国籍・氏名・生年月日・旅券番号など旅券面の記載事項が記録されます。しかし、指紋は記録されません。なお、いくつかの国では、指紋を記録しており、また、虹彩情報を記録するための研究が進められています。
[IC旅券FAQ（よくある質問）](https://www.mofa.go.jp/mofaj/toko/passport/ic_faq.html#01)より引用。

このICチップに記録された情報は専用のパスポートリーダーの他に、NFC搭載のスマートフォンで読み取ることが可能で、これらのアプリがあります。

* [(iOS向け) ReadID NFC](https://apps.apple.com/jp/app/readid-nfc/id1463949991)
* [(Android向け) IDリーダー(マイナンバーカード、運転免許証、パスポート、在留カード)](https://play.google.com/store/apps/details?id=jp.co.osstech.jeidreader)
* [(Android向け) Regula Document Reader](https://play.google.com/store/apps/details?id=com.regula.documentreader)

以前のパスポートでは問題なく動作していたこれらのアプリで、新型パスポートのICチップ情報を読み取りを行ったところ異なる挙動を示しました。

### ReadID NFC

<img width="414" alt="readid.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87092/dbb5ad79-f485-eb5a-bbcf-c9cf8346f902.png">
顔写真や氏名等の記載事項は正しく読み取られていますが、真正性の検証に失敗しています。

### IDリーダー(マイナンバーカード、運転免許証、パスポート、在留カード)

<img width="414" alt="idreader.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87092/6e694420-fdd0-b30d-61fb-2658b2a7ddc5.png">

こちらも顔写真や氏名等の記載事項は正しく読み取られていますが、真正性の検証に失敗しています。

### Regula Document Reader

<img width="414" alt="Regula.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87092/48ec89ad-aa07-b89a-7097-5f1fb67d93b2.png">
<img width="414" alt="cert.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87092/f81818e7-58f1-c045-5b40-3e6ea32cb169.png">

こちらでは顔写真や氏名等の記載事項は正しく読み取られ、かつ真正性の検証も成功しています。署名アルゴリズムの欄を見ると、ECDSA with SHA-384を利用していることが分かります。

## パスポートのセキュリティ機構

パスポートのセキュリティ機構については、IDリーダーの開発者のブログである[AAA Blog](https://www.osstech.co.jp/~hamano/)で詳しく解説されています。
>2019年現在、日本で発行されているパスポートには3つセキュリティ機構が組み込まれています。
>各セキュリティ機構はそれぞれ以下のような脅威に対応する対策となります。
>Basic Access Controll - スキミング・盗聴対策
>Passive Authentication - データの改ざん対策
>Active Authentication - ICチップの複製対策
[パスポートのセキュリティ](https://www.osstech.co.jp/~hamano/posts/epassport-security/)より引用

詳しくは上記の記事を読んでいただきたいのですが、セキュリティ機構の中でPassive AuthenticationとActive Authenticationはデジタル署名を用いていることが分かります。以前のパスポートのデジタル署名アルゴリズムは

>次期IC旅券は、能動認証で使用する署名アルゴリズムとして、欧州の大手IC旅券及び端末
メーカが使用しているRSA暗号（鍵長1024bit）とSHA-1を採用する。デジタル署名の手順
の概略は以下のとおりである。
[IC 旅券用プロテクションプロファイル解説書](https://www.ipa.go.jp/files/000013976.pdf)より引用

とRSAとSHA-1のデジタル署名が使われているとされています。
一方Regula Document Readerの結果を見るとECDSAとSHA-384のデジタル署名が使われていると表示されています。
外務省のリリースをしっかり読みますと
>2020年旅券はIC内の個人情報の不正読取り等を防ぐ機能を強化しているほか，偽造防止能力を高めるため，葛飾北斎の「冨嶽三十六景」をデザインに取り入れています。
[2020年旅券の申請受付開始について](https://www.mofa.go.jp/mofaj/ca/pss/page22_003416.html)より引用

と、新型パスポートはデザインだけでなく、ICチップ部分にも変更が加えられていることが明示されていました。

## 新型パスポートのICチップの変更点

上記の外務省のリリースを読み具体的な変更点を確認するため、外務省旅券課に電話し質問させていただきました。職員の方によると、ICチップの変更点は

* 新しいアクセスコントロール機構(PACE[^1])を追加した
* 署名アルゴリズムを変更したこと

[^1]: Password Authenticated Connection Establishmentの略。詳しくは国際民間航空機関(ICAO)が公開している[Doc 9303 Machine Readable Travel Documents](https://www.icao.int/publications/pages/publication.aspx?docnum=9303), [Part 11: Security Mechanisms for MRTDs](https://www.icao.int/publications/Documents/9303_p11_cons_en.pdf) Section 4.4を参照してください。
の上記2点であるとお答えいただきました。

今回のアプリによって真正性の検証が正しく行えない事象は、デジタル署名アルゴリズムが変更され、アプリによって対応状況が異なることが原因でした。この記事を書くにあたり、参考にさせていただいた[パスポートのセキュリティ](https://www.osstech.co.jp/~hamano/posts/epassport-security/)の著者、そして対応していただいた外務省旅券課の職員の方に感謝します。