APDU(Application Protocol Data Unit)とは、スマートカードとカードリーダー、またはスマートカードとホスト(PCなど)との間で交換されるデータ構造を指します。APDUは、ISO/IEC 7816で規定された標準に基づいており、スマートカードとの通信の基本的な単位です。
1. APDUの目的
APDUは、スマートカードにコマンドを送信し、カードがその応答を返すために使用されます。この通信により、以下のような操作が可能になります:
- データの読み書き
- 暗号化・復号
- 認証
- ファイルやアプリケーションの選択
2. APDUの種類
APDUは主に2つのタイプに分かれます:
- コマンドAPDU(Command APDU)
- ホスト(例: PC)がスマートカードに送信するコマンド。
- レスポンスAPDU(Response APDU)
- スマートカードがホストに返す応答。
3. コマンドAPDUの構造
コマンドAPDUは以下のような形式を取ります:
フィールド | 説明 | サイズ(バイト) |
---|---|---|
CLA | クラスバイト(命令クラス) | 1 |
INS | 命令コード | 1 |
P1 | パラメータ1 | 1 |
P2 | パラメータ2 | 1 |
Lc (オプション) | 送信データの長さ | 0 または 1–3 |
Data (オプション) | 送信データ | 可変長 |
Le (オプション) | 期待する応答データの長さ | 0 または 1–3 |
フィールドの詳細
- CLA(Class Byte): コマンドの分類(例えば、ISO標準のコマンドか、独自のプロトコルか)。
- INS(Instruction Byte): 実行する命令を表すコード(例: ファイル選択、データ読み取り)。
- P1, P2(Parameter Bytes): コマンドの補足情報(例: ファイルのオフセットやモード)。
- Lc(Length of Command Data): 送信するデータの長さ。
- Data: スマートカードに送信するデータ。
- Le(Length of Expected Response Data): カードが返すべきデータの長さ。
4. レスポンスAPDUの構造
レスポンスAPDUは以下のような形式です:
フィールド | 説明 | サイズ(バイト) |
---|---|---|
Data | 応答データ(オプション) | 可変長 |
SW1, SW2 | ステータスワード(結果コード) | 2 |
フィールドの詳細
- Data: コマンドに対する応答データ(例: ファイル内容や認証結果)。
- SW1, SW2(Status Words): 操作結果を表すコード。以下は例です:
9000
: 成功。6A82
: 指定したファイルが見つからない。6985
: 条件が満たされていない(例: 認証失敗)。
5. APDUの例
例1: ファイルの選択
- コマンドAPDU
CLA: 00
INS: A4
P1: 04
P2: 00
Lc: 02
Data: 3F00 (選択するファイルID)
Le: 00 (応答データの長さは任意)
- レスポンスAPDU
Data: (選択されたファイルの情報)
SW1: 90
SW2: 00 (成功)
例2: データの読み取り
- コマンドAPDU
CLA: 00
INS: B0
P1: 00
P2: 00
Le: 10 (16バイトのデータを要求)
- レスポンスAPDU
Data: (読み取られたデータ)
SW1: 90
SW2: 00 (成功)
6. APDUのメリット
- 標準化:
ISO/IEC 7816に基づいているため、異なるメーカーや種類のカード間での互換性が高い。 - 柔軟性:
カードの種類に応じて幅広い操作が可能。
7. 使用例
- ICカードによる認証システム
- 交通系ICカード(例: Suica、Pasmo)
- クレジットカードのセキュアトランザクション
- 電子署名
APDUは、スマートカードの高度な機能を利用するための基盤となる通信プロトコルであり、セキュリティや効率性が求められる分野で広く使用されています。