はじめに
2024年8月20日にデジタル庁からリリースされたマイナンバーカード対面確認アプリについて言及します。
マイナンバーカード対面確認アプリとは
デジタル庁が提供する「マイナンバーカード対面確認アプリ」は、マイナンバーカードのICチップを読み取り、格納された氏名などの本人情報を確認するためのアプリです。事業者や自治体のスタッフが、顧客や住民の本人確認などを行う際に利用できます。
利用シーン
金融機関での取引のための本人確認時
携帯電話の契約のための本人確認時
中古品の買取のための本人確認時
自治体窓口での本人確認時
その他、マイナンバーカードの対面での本人確認が必要なとき
主な機能
マイナンバーカードに格納された情報の読み取り・表示機能
履歴機能
確認できる情報
マイナンバーカードに格納された、以下の情報と読み取り日時がアプリ画面に表示されます。
顔写真(白黒)
氏名
住所
生年月日
性別
有効期限
セキュリティコード
アプリの要点
対面時にICチップを使ってアプリを読み取り本人確認をするためのサービスです。
OCR機能でマイナンバーカードを読み取るがその後ICチップを読み取るためICチップは必須項目となっていました。OCRは必須ではなく、ICチップ読み込みは必須となっています。通常ICチップでデータを読み取るときは暗証番号を必要とするがこのアプリに関してはその手間がなく取得できるようになっている。
現行の対面時の本人確認として例えばお酒購入や居酒屋での未成年でない確認などは顔写真付きの証明書(免許証、パスポート、マイナンバーカード)の提示が一般出来だが、偽造されてる場合に判別がつかないため、偽造などしてる場合は公文書偽造罪となるが、一般スタッフが数秒の確認でそれを偽物とは疑わないため、簡単にスルーできると考えられるのでその問題がこのアプリを使うことで改善される。ICチップ読み込みは簡単には偽造できないため。
マイナンバーカード対面確認アプリのフロー
マイナンバーカードの写真読み込み画面(OCR) | マイナンバーカードのチップ読み込み画面 | 読み込みデータ表示画面(顔写真情報、4情報) | 履歴画面(ここでは取得した顔写真情報、4情報は残っていない) |
OCRは必須でなく、OCRを利用しない場合または読み込めない場合は、生年月日を手動入力するとスキップできる仕様になっている。
個人的にマイナンバーカード対面確認アプリで改善して欲しい箇所
読み込みデータ表示画面(顔写真情報、4情報) が画面に表示されていることがセキュリティリスクがあります。
履歴には過去の顔写真情報や4情報は確認できないが、対面時にアプリでお客さんがいなくなった後、またはお客さんが見てない間に画面キャプチャができる状態にあることが致命的と感じています。
- アプリでキャプチャができない設定にする機能をつけるべき
- フローとしてお客さんが対面で見てる相田に画面を閉じるところまでをお客さんに確認させるフローにするべき(例えば、確認後10秒で画面を強制的に閉じるなど)
マイナンバーカード対面確認アプリの疑問点・言及ポイント
アプリでICチップを読み取るときに券面事項暗証番号を必要とせず、暗証番号なしで、登録されている顔画像と4情報を取得できるのは公式APIでは実現できないため、なぜできるのか疑問に思ったので言及していきます。
顔写真情報と4情報が暗証番号なしに取得できることを言及する
公式APIでできないことがデジタル庁のアプリでできているのは何故か疑問に感じています。セキュリティ的な観点で見ても不安材料ではないかなと思ってます。
それはクローズドなAPIが用意されていて、且つそもそもマイナンバーカードのICチップ自体が暗証番号なしで取得できる仕組みになっているということです。
デジタル庁が公式に出しているアプリのためそれは問題ないと思いますが、それを他のアプリで利用された場合にセキュリティリスクになると考えます。
法的問題とストアのガイドライン問題
他のアプリでこのクローズドのAPIを使うことができた場合、どのような問題になるのかを言及すると、おそらくAppleやAndroidの利用規約違反で審査落ちします。そもそも個人や企業でこのアプリを使う場合、違法となる気がしてます。(何の法律に引っ掛かるのかはちょっとわかりかねます)
一応chatgptに聞いてみました(あってるかどうかは不明)
他のアプリがこのクローズドのAPIをハックして呼ぶ方法はあるのかどうか
公式で公開されていないため、どのような仕組みで実現しているのかは不明ですが、ハックする方法としては、Androidの場合は難読化されている場合もある程度リバースエンジニアリングでコードがわかる場合があります。また通信状況もパケットキャプチャなどで暗号化されてるにせよある程度把握できます。この辺りは検証していないためわかりませんが、その辺りもしっかりしているのか気になるところでした。ここに脆弱性があると暗証番号なしで情報取得できることになるため問題な気がしてます。
もし一般アプリで暗証番号なしで取得できた場合に何が問題なのか
思いつくところで言うと、オリジナルのマイナンバーカード対面確認アプリを作成することが考えられます。
それを使うことで、履歴に全ての取得情報を残すなど自由自在にできることになります。
2024/8/30にコメントをいただき訂正
下記サイトに記載されている通り、「照合番号B(14桁:生年月日6桁+有効 期限 西暦部分4桁+セキュリティコード4桁)」で実装可能な様子。
ただ公式のAPIとしては公式されていないため、JLISとNDAか契約を結ばないとクローズドなAPIドキュメントはもらえなそうです。
iTrustなどのサードバーティ製のライブラリを利用するとJLISと契約済みで同様の処理を埋め込められそうです。
誤ったことを言及してたことを謝罪します。申し訳ありません。
さいごに
もし間違ってる情報や、追記でわかることがあれば連絡もらえたら助かります。