メインコンテンツまでスキップ

APDU プロトコル

IC カードリーダとパソコンとの通信には APDU プロトコルが使われています。パソコンから IC カードリーダに対して APDU の形式で命令を送り、カードからの応答がバイナリ形式で帰ってきます。

APDU コマンドは4バイト以上からなるバイト列です。

APDU の詳細な仕様は ISO7816 という標準規格で定められています。ISO7816 の中身はこちらのサイトで読むことができます。

この記事では、マイナンバーカードとの通信に必要な APDU に関する情報を掲載します。

APDU の基本的なフォーマット

APDU は次の 5 つの要素を持ちます。

長さ(byte)内容
CLA1命令クラス
INS1命令コード
P11引数 1
P21引数 2
Lc1/3データフィールドの長さ
データフィールドLc送信するバイト列
Le1/3期待するレスポンスの長さ

この中で、LcデータフィールドLeは省略可能です。

これらの要素を[CLA|INS|P1|P2]といった形でカードリーダに送信することで通信できます。

APDU の主なコマンド

ここでは、マイナンバーカードと通信する際に使われる主なコマンドについて解説します。

SELECT FILE

命令コード: a4

カードの中からMF, DF, EFを指定や移動するコマンドです。

Linux で言うところのcdコマンドに当たります。

引数 1内容
00MF, DF, EF を指定する
02現在の DF 配下にある EF を指定
04DF 名で指定

READ BINARY

命令コード: b0

P1, P2 がともに 0 の場合先頭からLeバイト読み取ります。

引数 1: 読み取るバイト数

VERIFY

命令コード: 20

カードに対してパスワードを送信します。

COMPUTE DIGITAL SIGNATURE

命令コード: 2a

秘密鍵を用いて電子署名を計算します。