はじめに
マイナンバーカード、みなさんもう作りましたか?
あのカード、実はCPUやROMやRAMが搭載されている小さいパソコンなんです。NFC Type-B対応のカードリーダを使って指示を出すと、カードに実装されたアプリケーションを実行することができます。
NFC Type-Bは近年のスマホであればAndroid/iOS問わずほぼ対応しており、AndroidだとFeliCa(Suica等)非対応の端末も多いですが、Type-Bはだいたい対応しています。
つまり、みなさんのお手元のスマホをマイナンバーカードにかざすと、マイナンバーカードの中のアプリを使えるというわけです。これが結構色々なことができて面白いので、どんなことができるのか簡単に紹介したいと思います。色々なビジネスに応用できる可能性を秘めてるので、気になった方は積極的にマイナンバーカードの採用を検討してみてください。日本政府も喜びます。
アプリケーションの種類
マイナンバーカードの中には、以下の4つのアプリが入っています。
- 公的個人認証アプリケーション(JPKI-AP)
- 券面事項確認アプリケーション(券面AP)
- 券面事項入力補助アプリケーション(券面入力補助AP)
- 住基アプリケーション(住基AP)
それぞれどのようなアプリケーションか、順番に説明します。
JPKI-AP
まず、JPKI-APの説明をする前に公的個人認証サービスの説明をする必要があります。
公的個人認証サービス
Wikipediaには下記のように書かれています。
公的個人認証サービス(こうてきこじんにんしょうサービス、英語: JPKI, Japanese Public Key Infrastructure)とは、インターネット上での本人確認に必要な電子証明書を住民基本台帳に記載されている希望者(日本国内に住民票のある日本国民および在留カード所持住民)に対して、無料で提供するためのサービスである。
公的個人認証サービス - Wikipedia
インターネット上で本人確認する手段に使える電子証明書を提供してくれるサービス、とのこと。
インターネット上での本人確認はeKYCと呼ばれていて、方法もいくつかあります。方法によってセキュリティの高さも異なります。クレジットカードを発行する際なんかに免許証の写真を要求されたりしたことはありませんか?あれもeKYCの一種です。
ちなみにマイナンバーカードを用いたeKYCは、eKYCの中でも最強のセキュリティを誇るらしいです。かっこいいですね。
興味がある方は「eKYC 種類」あたりで調べてみてください。
JPKI-APの使い方
先述の通り、公的個人認証サービスは電子証明書を発行しています。
証明書にはニ種類あり、
- 利用者証明用電子証明書
- 署名用電子証明書
があります。
マイナンバーカード内にはこれら2つの電子証明書と、それぞれ対応する秘密鍵が格納されているのですが、JPKI-APを使うことでこれらにアクセスすることができます。
2つの証明書の違いですが、主に用途が違います。
利用者証明用電子証明書
「利用者本人であること」の確認に使用します。
例:マイナポータルへのログイン、コンビニの住民票発行サービス利用時の認証 等
マイナンバーカード発行時に設定した4桁のパスワードを使うことで利用できるようになります。
まだ試せていませんが、民間利用の場合は自分で作ったサービスのログインに使用できるのはもちろんのこと、SSH接続なんかにも使えそうですよね。
署名用電子証明書
署名用電子証明書は「作成・送信した電子文書(ファイル)が、間違いなく利用者が作成・送信したこと」の確認に使用します。e-Taxの際の本人確認等で使用します。先述したeKYCで使用するのはこちらの証明書です。
この証明書を用いて本人確認を実現するiOSアプリを開発することになったことがマイナンバーカードに触れるきっかけでした。
どちらの証明書も、対応する秘密鍵はマイナンバーカードから取り出すことができないので、電子署名はJPKI-AP上でしか行えません。また、電子署名を行えるのはカード発行時に設定したパスワードを知っている人のみです。
マイナンバーカードが手元にある(所持情報)+パスワードを知っている(知識情報)で認証3要素のうち2つを満たしているため、本人確認に使える。というロジックです。
券面AP
カードの画像データを保持するカードAPで、基本4情報、顔写真、マイナンバーの画像を格納していて、券面が偽造されていないか確認することができます。正直、民間のアプリでの活用方法が思いつきません。
ファイル形式がJPEG2000という聞いたこともない形式で格納されており、非常に扱い辛いです。ただ、iOSのUIImageViewは標準で対応しているため、特に何もしないでもData型に格納してぶち込んであげればiPhone上で表示できます。なお、Androidでは外部ライブラリを用いないと扱えないようです。
券面APへのアクセスコントロールは他のAPと少し異なり、12桁の個人番号か、生年月日(6桁)+マイナンバーカードの有効期限(4桁)+表面に書かれているセキュリティコード(4桁)でアクセスできます。要は手元にカードがあればパスワードを用いずに利用できるわけです。
券面入力補助AP
個人番号や基本4情報をテキストデータとして保持しており、APへアクセスすることで取得することができるカードAPです。これらの情報をユーザーに入力させる手間を省くために使用する、と理解しています。
カード発行時に設定した4桁のパスワードを入力させてカードをかざしてもらうだけで、基本4情報が入力できるのでユーザビリティの向上に繋がりますよね。
ただし、個人番号は法令で認められる場合のみ利用できるようです。
住基AP
住民票コードを保持するカードAPです。自治体のみが利用できるようなので、私は試せていないです。アクセスコントロールとして、カード発行時に設定した4桁のパスワードが必要です。
最後に
以上、JPKI APの説明を中心にマイナンバーカードAPの概要を紹介させていただきました。
iPhoneからの実行のみではありますが住基AP以外は一通り試せているので、具体的なマイナンバーカードへのアクセス方法やAPDUコマンドによる通信方法を別途記事にしたいなと思っています。