Linux で個人番号カードを読む

no extension

自宅の Ubuntu 機に IC カードリーダーを接続し,個人番号カードの内容を読み取る。

事前準備

今回は IO DATA の非接触式 IC カードリーダー USB-NFC4 を使用する。

昨年の夏頃に Amazon で安売りしてたのを買ったのだが,そのまま放置していた。 いざ確定申告で使おうとしたら Windows 機で認識できなくて使えなかった。 そのまま捨て置くのはもったいないので Linux で使えるか試そうという話である。

Ubuntu 側で必要なのは以下のソフトウェア

では早速はじめよう。

インストール

Wiki によると Linux 版の OpenSC は自前でビルドしろとあるが, Ubuntu であればバイナリが提供されているっぽいのでそちらを使う。

$ sudo aptitude install opensc opensc-pkcs11 pcscd pcsc-tools libpcsclite1 libusb-1.0-0 libpcsclite-dev libusb-1.0-0-dev
libpcsclite1 は、要求されたバージョン (2.3.3-1) で既にインストールされています
libusb-1.0-0 は、要求されたバージョン (2:1.0.29-2) で既にインストールされています
libpcsclite1 は、要求されたバージョン (2.3.3-1) で既にインストールされています
libusb-1.0-0 は、要求されたバージョン (2:1.0.29-2) で既にインストールされています
以下の新規パッケージがインストールされます:
  libccid{a} libeac3{a} libintl-perl{a} libintl-xs-perl{a} libpcsc-perl{a} libpcsclite-dev libusb-1.0-0-dev libusb-1.0-doc{a} opensc 
  opensc-pkcs11 pcsc-tools pcscd 
更新: 0 個、新規インストール: 12 個、削除: 0 個、保留: 0 個。
アーカイブの 2,824 kB を取得する必要があります。展開後に 12.8 MB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] 

起動確認だけしておく。

$ opensc-tool -i
OpenSC 0.26.1 [gcc  15.2.0]
Enabled features: locking zlib readline openssl pcsc(libpcsclite.so.1)

問題はなさそうかな1

CIR315A の製品ページから「USB Linux インストーラ」をダウンロードする。

CIR315A関連ファイルのダウンロード

ダウンロードしたファイルの内容は以下の通り:

  • Circle_USB_Linux_Installer_v2.2.2_(driver_v.2.2.2).zip (2025-07-25 時点)
    • Generic-Debian
      • libabcccid_2.2.2-1_amd64.deb

この libabcccid_2.2.2-1_amd64.deb をインストールする。

$ sudo dpkg -i libabcccid_2.2.2-1_amd64.deb

myna は GitHub のリリースページからバイナリをダウンロードしてインストールする。

  • myna-v0.6.4-x86_64-unknown-linux-gnu.zip (2026-03-12 時点)
    • myna

ファイル mynaPATH の通ってるディレクトリに置く。 こちらも起動確認だけしておこう。

$ myna help
Usage: myna [OPTIONS] <COMMAND>

Commands:
  text     券面入力補助AP
  visual   券面確認AP
  test     Test card reader
  jpki     公的個人認証
  pin      Pin operation
  unknown  謎のAP
  help     Print this message or the help of the given subcommand(s)

Options:
  -v...          
  -d, --debug    
  -h, --help     Print help
  -V, --version  Print version

個人番号カードを読み込む

まずは USB-NFC4 を繋いだだけの状態で IC カードリーダーが認識されているか確認する。

$ opensc-tool -l
# Detected readers (pcsc)
Nr.  Card  Features  Name
0    No              Circle CIR315 CL [CIR315 CL] (137K231232M2) 00 00

USB-NFC4 から「ピッ!」って音がする。 やっと認識してくれたよ。

ではカードリーダーに個人番号カードを乗っけてみる。

$ opensc-tool -l
# Detected readers (pcsc)
Nr.  Card  Features  Name
0    Yes             Circle CIR315 CL [CIR315 CL] (137K231232M2) 00 00

Card 項目が Yes になっている。 よしよし。

次に PIN 情報を取得する。

$ pkcs15-tool --list-pins
Using reader with a card: Circle CIR315 CL [CIR315 CL] (137K231232M2) 00 00
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

鍵は取り出せるかな。

$ pkcs15-tool --read-certificate 1
Using reader with a card: Circle CIR315 CL [CIR315 CL] (137K231232M2) 00 00
-----BEGIN CERTIFICATE-----

...

-----END CERTIFICATE-----

ありゃ。 暗証番号がなくてもいいのか。 でもちゃんと取り出せてるみたい。

もういっちょ。

$ pkcs15-tool --read-certificate 2 --verify-pin --auth-id 02
Using reader with a card: Circle CIR315 CL [CIR315 CL] (137K231232M2) 00 00
Please enter PIN [Digital Signature PIN]: 
-----BEGIN CERTIFICATE-----

...

-----END CERTIFICATE-----

こちらもちゃんと取り出せてるようだな。

“Please enter PIN” には署名用パスワードを入力する2。 正しく入力すると以下のポップアップが出る。

myna のほうも動かしてみよう。

$ myna pin status
券面入力補助AP 暗証番号: 3
券面入力補助AP 暗証番号A: 10
券面入力補助AP 暗証番号B: 10
券面確認AP 暗証番号A: 10
券面確認AP 暗証番号B: 10
JPKIユーザー認証用 暗証番号: 3
JPKIデジタル署名用 パスワード: 5

これでパスワード入力を失敗できる(ロックアウトされまでの)残り回数が分かる。

券面情報を取得してみよう。

$ myna text attrs
暗証番号(4桁): ****
氏名    : **********
住所    : **********
生年月日: ********
性別    : *

実際にはちゃんと内容が表示されるが,ここでは伏せ字にしている。 あしからず。 暗証番号には券面事項入力補助用パスワードを入力する。

myna を使えば PDF ドキュメントなどに電子署名を付与できる。 こんな感じらしい。

$ myna jpki pdf sign input.pdf -o signed.pdf

署名の検証は以下の通り。

$ myna jpki pdf verify signed.pdf

「JPKI署名用証明書は4属性(氏名・住所・生年月日・性別)を含みますので注意してください」とあるので,実際に運用する場合はホンマにご注意を。

さらに「MPA for Linux」を使えば Linux のブラウザでマイナポータルや e-Tax などのサイトに個人番号カードを使ってログインできるようだ。 ただし(今のところ) Rust のビルド環境が必要なのとブラウザ拡張を無理やり入れるみたいな操作が必要らしいので,今回は割愛する。 またどこかで試そうか。

今回はここまで。

ブックマーク

参考

photo
スーパーユーザーなら知っておくべきLinuxシステムの仕組み
Brian Ward (著), 柴田 芳樹 (翻訳)
インプレス 2022-03-08 (Release 2022-03-08)
単行本(ソフトカバー)
4295013498 (ASIN), 9784295013495 (EAN), 4295013498 (ISBN)
評価     

版元で PDF 版が買える。セキュリティ・エリアにも持ち込めるよう紙の本を買ったのだが,オンライン読書会が始まったので PDF 版も購入。Linux システムの扱い方に関するリファレンス本として優れている。最初に軽く流し読みして,必要に応じて該当項目を拾い読みしていけばいいだろう。

reviewed by Spiegel on 2023-02-11 (powered by PA-APIv5)


  1. OpenSC v0.27 より前のバージョンには脆弱性が報告されている。 2026-03-31 時点では Ubuntu の APT リポジトリには反映されてない模様。頑張って反映させてね。 ↩︎

  2. 個人番号カードの暗証番号・パスワードには 署名用パスワード(最大16文字の英数字),利用者証明用パスワード(4文字の数字),券面事項入力補助用パスワード(4文字の数字),個人番号カード用(住民基本台帳用)パスワード(4文字の数字)の4つがある。 ↩︎