前提情報・背景・注意事項
- 自分の頭の整理のためにマイナンバーカードの中身を調べたメモです
- これを参考にして試してみる場合にはうっかり自分の個人情報を公開しないようにご注意ください。
- 国から認可された団体以外、他人の公的個人認証の証明書を収集・記録することは制限されています
- 電子署名と暗号化の仕組みはここでは書きません。
- 私はMacBook pro masOS BigSur(バージョン11.3)、チップApple M1で試しています
- PCにICカードリーダーを接続し、マイナンバーカードが読み取り可能な状態となっている必要があります
マイナンバーカード
公的個人認証とは
公的個人認証サービスとは、行政や民間のオンライン申請や届出、ログイン認証の際に、他人による「なりすまし」やデータの改ざんを防ぐために用いられる本人確認の手段です。 マイナンバーカードなどの中のICチップの中に電子証明書が記録されています。
公的個人認証サービス(JPKI)総合ポータルサイト
マイナンバーカードのICチップ
PCでマイナンバーカードのICチップ内のデータを読み込むときにはカードリーダーを使います。
読み込む際にはカードの向きにご注意を...ICチップがどこにあって、それを読み取る場所がどこなのかを確認してください。販売してるサイトでよく向きがおかしいサイトをよく見かけます笑
ICチップには接触型・非接触型の2種類のインターフェースがあり、接触型ならISO/IEC7816対応のカードリーダー、非接触型ならSO/IEC14443(NFC TypeB)に対応したカードリーダーでアクセスが可能です。
マイナンバーカードICチップ内のAP構造
マイナンバーカードのICチップには「AP(アプリケーションプログラムの略)」と呼ばれるカード内で駆動するプロセッサーが実行するプログラムがいくつか存在します。AP同士は独立した存在で干渉し合うことはありません。
- 公的個人認証AP(別名:JPKI-AP)
- 署名用電子証明書
- 利用者証明書電子証明書
- 券面事項確認AP
- 券面事項入力補助AP
- 住基AP
それぞれのAP内のデータにアクセスする際にはマイナンバーカード発行時に本人が設定した暗証番号が必要となります。
OpenSC
OpenSCとは
OpenSCは、スマートカードを扱うためのライブラリとユーティリティやライブラリのセットです。主に暗号操作をサポートするカードに焦点を当て、認証、メール暗号化、デジタル署名などのセキュリティアプリケーションを容易に利用できます。
PKCSとは
こちらのQiita記事がわかりやすいです。
OpenSCインストール
OpenSCのgithubWikiページからダウンロードしてインストールします。
正常にインストールできたことをバージョン確認コマンドで確認します。
takeda@takedaMacBook ~ % opensc-tool --version
OpenSC-0.22.0-rc1-74-gc902e199, rev: c902e199, commit-time: 2021-08-10 11:09:03 +0200
pkcs15-toolでマイナンバーカードの中身を覗く
pkcs15-toolは証明書や公開鍵などICカード内のデータにアクセスするためのツールのようです。このツールを使って色々中身を覗いてみます。
オブジェクトのリスト確認
$ % pkcs15-tool --dump
Using reader with a card: Alcor Micro AU9560
PKCS#15 Card [JPKI]:
Version : 0
Serial number : 00000000
Manufacturer ID: JPKI
Flags :
PIN [User Authentication PIN]
Object Flags : [0x12], modifiable
ID : 01
Flags : [0x12], local, initialized
Length : min_len:4, max_len:4, stored_len:0
Pad char : 0x00
Reference : 1 (0x01)
Type : ascii-numeric
Tries left : 3
PIN [Digital Signature PIN]
Object Flags : [0x12], modifiable
ID : 02
Flags : [0x12], local, initialized
Length : min_len:6, max_len:16, stored_len:0
Pad char : 0x00
Reference : 2 (0x02)
Type : ascii-numeric
Tries left : 5
Private RSA Key [User Authentication Key]
Object Flags : [0x01], private
Usage : [0x04], sign
Access Flags : [0x1D], sensitive, alwaysSensitive, neverExtract, local
Algo_refs : 0
ModLength : 2048
Key ref : 1 (0x01)
Native : yes
Auth ID : 01
ID : 01
MD:guid : c5a0a252-9d2d-eb60-fec0-41b4fbd722a2
Private RSA Key [Digital Signature Key]
Object Flags : [0x01], private
Usage : [0x204], sign, nonRepudiation
Access Flags : [0x1D], sensitive, alwaysSensitive, neverExtract, local
Algo_refs : 0
ModLength : 2048
Key ref : 2 (0x02)
Native : yes
Auth ID : 02
ID : 02
MD:guid : e1bc1dae-59f1-16ab-b43f-9dafbb2acc9b
Public RSA Key [User Authentication Public Key]
Object Flags : [0x00]
Usage : [0x00]
Access Flags : [0x02], extract
Key ref : 1 (0x01)
Native : yes
Path : 000a
ID : 01
Public RSA Key [Digital Signature Public Key]
Object Flags : [0x00]
Usage : [0x00]
Access Flags : [0x02], extract
Key ref : 2 (0x02)
Native : yes
Path : 0001
ID : 02
X.509 Certificate [User Authentication Certificate]
Object Flags : [0x00]
Authority : no
Path : 000a
ID : 01
Encoded serial : 02 04 039A1FBB
X.509 Certificate [Digital Signature Certificate]
Object Flags : [0x01], private
Authority : no
Path : 0001
ID : 02
X.509 Certificate [User Authentication Certificate CA]
Object Flags : [0x00]
Authority : yes
Path : 000b
ID : 03
Encoded serial : 02 04 0133C349
X.509 Certificate [Digital Signature Certificate CA]
Object Flags : [0x00]
Authority : yes
Path : 0002
ID : 04
Encoded serial : 02 04 0132C4AB
takeda@takedaMacBook ~ %
マイナンバーカードには以下のオブジェクトが格納されていることがわかります。
- PKCS#15 Card [JPKI]:JPKIのカードオブジェクト
- PIN [User Authentication PIN]:認証用のPIN
- PIN [Digital Signature PIN]:署名用のPIN
- Private RSA Key [User Authentication Key]:認証用のRSA秘密鍵
- Private RSA Key [Digital Signature Key]:署名用のRSA秘密鍵
- Public RSA Key [User Authentication Public Key]:認証用のRSA公開鍵
- Public RSA Key [Digital Signature Public Key]:署名用のRSA公開鍵
- X.509 Certificate [User Authentication Certificate]:認証用のX.509証明書
- X.509 Certificate [Digital Signature Certificate]:署名用のX.509証明書
- X.509 Certificate [User Authentication Certificate CA]:認証用の認証局のX.509証明書
- X.509 Certificate [Digital Signature Certificate CA]:署名用の認証局のX.509証明書
暗証番号がブロックされるまでの残り回数確認
マイナンバーカードは証明書利用のための暗証番号の入力を誤った場合にはロックされてしまう仕組みになっています。ロックされると役所に行かないと再設定できないものまであり、検証する際にドキドキしながら入力することになります。
残りあと何回間違えても大丈夫なのか知りたいときにはこのコマンドで確認することができます。
takeda@takedaMacBook ~ % pkcs15-tool --list-pins
Using reader with a card: Alcor Micro AU9560
PIN [User Authentication PIN]
Object Flags : [0x12], modifiable
ID : 01
Flags : [0x12], local, initialized
Length : min_len:4, max_len:4, stored_len:0
Pad char : 0x00
Reference : 1 (0x01)
Type : ascii-numeric
Tries left : 3
PIN [Digital Signature PIN]
Object Flags : [0x12], modifiable
ID : 02
Flags : [0x12], local, initialized
Length : min_len:6, max_len:16, stored_len:0
Pad char : 0x00
Reference : 2 (0x02)
Type : ascii-numeric
Tries left : 5
takeda@takedaMacBook ~ %
数字4桁の利用者用電子証明書のPINは3回まで、英数字6〜16桁の署名用電子証明書のPINは5回までになってることがわかります。
利用者用電子証明書の表示
オブジェクト確認コマンドの結果のうち、利用者用電子証明書の中身を確認するコマンドです。オブジェクト確認コマンドの結果から、利用者用電子証明書の証明書IDは01で登録されています。
X.509 Certificate [User Authentication Certificate]
Object Flags : [0x00]
Authority : no
Path : 000a
ID : 01
Encoded serial : 02 04 039A1FBB
takeda@takedaMacBook ~ % pkcs15-tool --read-certificate 1 > user-auth.pem
Using reader with a card: Alcor Micro AU9560
takeda@takedaMacBook ~ % openssl x509 -text -noout -in user-auth.pem
Certificate:
Data:
Version: 3 (0x2)
Serial Number: XXXXXX (XXXXXXX)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = JP, O = JPKI, OU = JPKI for user authentication, OU = Japan Agency for Local Authority Information Systems
Validity
Not Before: Jan 17 06:48:37 2022 GMT
Not After : Jan 1 14:59:59 2027 GMT
Subject: C = JP, CN = XXXXXXXXXXXX
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
XX:XX:XX:XX:〜
Exponent: XXXXX (XXXXXXX)
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature
X509v3 Extended Key Usage:
TLS Web Client Authentication
X509v3 Certificate Policies: critical
Policy: 1.2.392.200149.8.5.1.0.30
CPS: http://www.jpki.go.jp/cps.html
X509v3 Issuer Alternative Name:
DirName:/C=JP/O=\xE5\x85\xAC\xE7\x9A\x84\xE5\x80\x8B\xE4\xBA\xBA\xE8\xAA\x8D\xE8\xA8\xBC\xE3\x82\xB5\xE3\x83\xBC\xE3\x83\x93\xE3\x82\xB9
X509v3 CRL Distribution Points:
Full Name:
DirName:C = JP, O = JPKI, OU = JPKI for user authentication, OU = CRL Distribution Points, OU = Tokyo-to, CN = Chiyoda-ku CRLDP
Authority Information Access:
OCSP - URI:http://ocspauthnorm.jpki.go.jp
X509v3 Authority Key Identifier:
keyid:XX:XX:~
DirName:/C=JP/O=JPKI/OU=JPKI for user authentication/OU=Japan Agency for Local Authority Information Systems
serial:XX:XX
X509v3 Subject Key Identifier:
XX:XX:~~
Signature Algorithm: sha256WithRSAEncryption
Signature Value:
XX:XX:XX:~~~
2コマンドで書きましたが、パイプでつなげて1コマンドで表示させてもOKです。その場合以下のコマンドになります。
pkcs15-tool --read-certificate 1 | openssl x509 -text -noout
Distribution Points, OU = Tokyo-to, CN = Chiyoda-ku CRLDP
ということから、各市区町村が証明書の失効情報を管理しているということがわかります。
(ちなみにあえてchiyoda-kuに変換して書いてるだけで私東京都千代田区に住んでるわけじゃないです)
署名用電子証明書の表示
オブジェクト確認コマンドの結果から、署名用電子証明書の証明書IDは02で登録されていました。
X.509 Certificate [Digital Signature Certificate]
Object Flags : [0x01], private
Authority : no
Path : 0001
ID : 02
この証明書は6〜12桁のPINで保護されており以下のコマンド投入後にPINを入力すると表示されます。
takeda@takedaMacBook ~ % pkcs15-tool --read-certificate 2 --verify-pin --auth-id 2
Using reader with a card: Alcor Micro AU9560
Please enter PIN [Digital Signature PIN]:
-----BEGIN CERTIFICATE-----
XXXXXXXXXXXX~
-----END CERTIFICATE-----
takeda@takedaMacBook ~ %
この結果を user-signature.pem
などの名前でpemファイルに直接貼り付けて openssl
コマンドで出力すると基本4情報含む署名用電子証明書の中身が閲覧できました。
マイナンバーカードの中身はJ-LISが提供しているJPKI利用者ソフトでも閲覧が可能ですが、このようにコマンドで閲覧することでAP構成やファイル形式などを意識することができるので理解が深まりました。
pkcs15-tool以外にも色々ユーティリティやモジュールがありその組み合わせで以下のようなこともできそうです。
また時間があればこれらを試した内容を整理して書こうと思います。
- 署名用電子証明書の秘密鍵で暗号化し、公開鍵で復号化して署名検証する
- 利用者用電子証明書の公開鍵を登録したリモートホストにSSHログイン
- macOSにマイナンバーカードの利用者用電子証明書でログイン
- PDFファイルに電子署名をする
参考になったサイト
OpenSC
総務省:公的個人認証サービスによる電子証明書
総務省:マイナンバーカードを活用したオンライン取引等の可能性について
総務省:民間事業者におけるマイナンバーカードの利活用
RSA暗号の全体像