TORIPIYO DIARY

recent events, IoT, programming, security topics

マイナンバーカードの証明書とは

今年は初めてオンラインで確定申告を申請しました(還付申請なら1月1日から申請できます)。カードリーダーにマイナンバーをかざして、確定申告申請のサイトにログインして、オンライン上での記載が終わったら、最後にマイナンバーカードをリーダーにかざして、パスワードを入力してデータを送信することで提出となります。マイナンバーには内部に電子証明書が含まれています。

マイナンバーに含まれる証明書には2種類あります。

これらの証明書は、どちらも地方公共団体情報システム機構(J-LIS)という機関が認証局として発行しているようです。証明書の有効期間はマイナンバーカードが発行されてから5回目の誕生日までとなっています。マイナンバーにはこれら2種類の証明書の公開鍵に対応する、秘密鍵も格納されており、秘密鍵を無理矢理読み取ろうとすると、耐タンパー性により自動的に内容は消去されます。秘密鍵と公開鍵は各地方公共団体で発行されているそうです。

ちなみに、マイナンバーカードの公開鍵を利用してSSHしている強者がいました。

www.osstech.co.jp

利用者証明用電子証明書

利用者証明用電子証明書は、マイナポータルのサイトにログインする際に、カードを所有する利用者本人であることを証明するために利用します。現状だと、ユーザ名とパスワードを入力して本人かどうか判断するサイトが大半ですが、マイナンバーカードを利用した認証方式ではカードを所有していることと、簡単なパスワードの確認で本人かどうかの確認を行っています。

利用者証明用電子証明書に含まれる情報は以下です。氏名・生年月日・性別・住所の情報は含まれません。

  • 発行番号
  • 発行年月日
  • 有効期間
  • 発行者

利用者証明用電子証明書を利用した本人確認の流れは以下の通りです。

  1. マイナポータルなどのサイトで乱数を生成する
  2. 乱数を通信相手のマイナンバーカード所有者に送信する
  3. 乱数を受け取った所有者はマイナンバーカードに格納している秘密鍵でサイトから送られてきた乱数を暗号化する
  4. 乱数本体 + 暗号化された乱数 + 公開鍵情報を含む利用者証明用電子証明書、を所有者からサイトに送信する
  5. サイト側では電子証明書にある公開鍵を利用して暗号化された乱数を復元する
  6. 乱数本体と複合化された乱数を比較して値が一致していることを確認
  7. 認証局地方公共団体情報システム機構(J-LIS))に電子証明書の有効性を照会する
  8. 電子証明書の有効性を確認できたら認証完了

f:id:ha107chan:20210217224336p:plain
利用者証明用電子証明書フロー

本当は、7, 8で認証局には問い合わせないで、認証局によって署名されているかを手元にある認証局の証明書で送られてきたユーザの証明書を検証して終わるのではないかと思うのですが、資料には上記のフローが記載されていました。

なぜ、サイト側で乱数を生成するのかというと、通信相手がマイナンバーカードを所有しているかどうか確認するためです。他人の電子証明書で別人になりすまそうとする人がいても、秘密鍵を利用できるマイナンバーカードが手元にないので、乱数を暗号化することができず、復号化したときに乱数本体の値と一致するような暗号化された乱数を生成できないので乱数の突合でエラーとなります。もし、乱数を生成せずに、純粋にマイナンバーの利用者証明用電子証明書のみで本人確認を行っていたらなりすましは簡単に発生するでしょう。

署名用電子証明書

署名用電子証明書は、文書データが改竄されておらず、マイナンバーの所有者本人によって作成されたことを証明したいときに利用します。例えば、住宅ローン契約の書類を物理的に作成するときは、契約書類には契約者本人の名前を署名すると思います。必要な場合は住所や生年月日も書類に記載します。これと同じことを、署名用電子証明書を使って物理的な紙ではなくて電子データに対して行います。

署名用電子証明書で署名された電子データには、署名者の氏名・生年月日・性別・住所の情報が含まれるようになります。これは、署名者が誰であるか確認できるようにするためです。署名されたデータをむやみにインターネットなどに公開すると個人情報の流出に繋がるので気をつけましょう。

署名用電子証明書には以下のデータが含まれます。

  • 氏名
  • 生年月日
  • 性別
  • 住所
  • 発行番号
  • 発行年月日
  • 有効期間
  • 発行者

名証電子証明書を利用した電子データへの署名の流れは以下の通りです。

  1. マイナンバーカードに格納されている秘密鍵で送信する文書データを暗号化
  2. 文書データ本体と暗号化された文書データ本体と公開鍵のある署名用電子証明書を送信
  3. 送信された公開鍵を利用して暗号化された文書を復号化
  4. 文書データ本体と復号化した文書データを比較して一致することを確認
  5. 送信された電子証明書は有効なものかどうか認証局地方公共団体情報システム機構(J-LIS))に電子証明書の有効性を照会
  6. 有効であれば送信されてきた文書データの有効性の確認完了

f:id:ha107chan:20210217224416p:plain
署名用電子証明書フロー

文書データをマイナンバーカードに格納されている秘密鍵で暗号化することで、送信されてきた文書データがマイナンバーカードを持つ本人によって送信されたものかどうかを確認しています。マイナンバーを持たなければ、秘密鍵を利用できないので証明書の公開鍵によって、復号できるような暗号化された文書データを作成できません。


まとめ

マイナンバーカードには、署名用電子証明書と利用者証明用電子証明書、それら証明書の公開鍵に対応する秘密鍵が格納されています。格納されている秘密鍵を利用しないと、認証や文書データの送信はできないのでマイナンバーカードをしっかりと本人が保管できていれば安全と言えます。しかし逆に言うと、マイナンバーカードと署名用電子証明書・利用者証明用電子証明書の暗証番号が記載された紙を一緒に持ち歩いていて、まとめて盗まれてしまうとシステム上はそのマイナンバーカードを紛失した本人に完全に成り代わって証券口座の開設や不動産取引を行うことが出来るわけです。(不動産取引だと、流石に契約前に実際に会って本人確認をとるのではないかと思いますが。)

もし、マイナンバーカードを登録した暗証番号と一緒に持ち歩いている人がいたら、盗難などされると大変危険なので暗証番号の紙と一緒に持ち歩くことはしないようにしましょう。

参考

マイナンバーと公的個人認証制度の概要について