EternalWindows
スマートカード / ファイル構造

前節では、コマンドとレスポンスのフォーマットを確認しました。 今回は、コマンドのヘッダであるCLAからP2にどのような値を指定することになるかを説明します。 今一度、コマンドのヘッダを示します。

ヘッダ
CLAINSP1P2

CLAはクラスバイトを表します。この値は主に0x00または0x80となり、 最上位ビットが0の場合はINSに指定したコマンドがISO 7816準拠であることを意味します。 一方、1の場合はコマンドが準システムコマンドであることを意味します。 下位2ビットは論理チャンネルを表し、0は基本チャンネルを意味しています。 論理チャンネルについては、後の節で再び取り上げます。 INSはコマンドが行うべき命令の値です。P1とP2はコマンドのパラメータで、 どのような値を指定するかはINSによって変化します。 INSに指定できる値には、次のようなものがあります(JISCAP仕様を基に記述しています)。

コマンド INS 概要
基本コマンド
READ BINARY0xb0 透過構造のWEFからデータを取得する。
WRITE BINARY0xd0 透過構造のWEFにデータの初期書き込みを行う。
UPDATE BINARY0xd6 透過構造のWEFに格納されているデータを更新する。
READ RECORD(S)0xb2 レコード構造のWEFからデータを取得する。
WRITE RECORD0xd2 レコード構造のWEFにレコードを追加する。
APPEND RECORD0xe2 レコード構造のWEFにレコードを追加する。
UPDATE RECORD0xdc レコード構造のWEFのデータを更新する。
GET DATA0xca DO-WEFが格納しているデータオブジェクトからデータを取得する。 JICSAP 2.0のみ利用可能。
PUT DATA0xda DO-WEFに特定のデータを持ったデータオブジェクトを作成する。 JICSAP 2.0のみ利用可能。
SELECT FILE0xa4 ファイルを選択し、そのファイルをカレントファイルにする。
VERIFY0x20 指定された照合鍵(PIN)がIEFに格納された照合鍵と一致するかを検証する。
INTERNAL AUTHENTICATE0x88 カードにデータを送信し、カードによって暗号化されたデータを取得する。
EXTERNAL AUTHENTICATE0x82 外部認証鍵でチャレンジを暗号化し、カードに送信する。
GET CHALLENGE0x84 EXTERNAL AUTHENTICATEで必要となるチャレンジを取得する。
管理コマンド(JICSAP2.0のみ利用可能)
DEACTIVATE FILE0x04 MFまたはDFを閉塞させる。JICSAP1.1のLOCK DFに相当。
ACTIVATE FILE0x44 MFまたはDFの閉塞を解除する。JICSAP1.1のUNLOCK DFに相当。
RESET RETRY COUNTER0x2c IEFのリトライカウンタをリセットする。JICSAP1.1のUNLOCK KEYに相当。
CHANGE REFERANCE DATA0x24 IEFの中身を変更する。JICSAP1.1のCHAGE KEYに相当。
セキュリティ関連コマンド(JICSAP2.0のみ利用可能)
MANAGE SECURITY ENVIRONMENT0x22 MFまたはDFのセキュリティ環境を更新する。
COMPUTE DIGITAL SIGNATURE0x2a カレントSE(セキュリティ環境)の署名情報を利用して署名を作成し取得する。
VERIFY DIGITAL SIGNATURE0x2a 署名を検証する。
VERIFY CERTIFICATE0x2a カレントSEの公開鍵と署名アルゴリズムで証明書を検証する。
GENERATE PUBLIC KEY0x46 IEFの鍵ペアを新しく置き換え、新しい公開鍵を取得する。
GET SESSION KEY0xd0 セッション鍵を取得する。
発行コマンド(JICSAP2.0のみ利用可能)
CREATE FILE0xe0 DFまたはEFを創生する。
DELETE FILE0xe4 DFまたはEFを削除する。
MANAGE ATTRIBUTE0x8a ファイル属性を変更する。

JICSAP 2.0のみという記述は、JICSAP 1.1では利用できないコマンドであることを意味しますが、 それらのコマンドはJICSAP 2.0で独自に規定されたわけではありません。 コマンドの仕様は、ISO 7816-4/8/9によって決定されています。 このため、ISO 7816-4/8/9からでも上記コマンドの詳細を知ることができますが、 利用しているカードがJICSAP 2.0のものであれば、 JICSAP 2.0の仕様書の第3部に目を通した方がよいでしょう。 この第3部には、上記したコマンド全ての詳細な記述が行われています。

ではここで、前節のコマンドのINSの部分を確認します。

BYTE command[] = {0x00, 0xa4, 0x00, 0x00};

先の表から、前節のINSに指定していた0xa4という値がSELECT FILEコマンドであることが分かります。 SELECT FILEコマンドの目的は、スマートカード内に存在するファイルを選択することです。 スマートカードのファイル構造は、DF(専用ファイル)の下にEF(基礎ファイル)が存在するようになっており、 これはWindowsのファイルシステムのような、フォルダの下にファイルが存在するのと同じ要領です。 フォルダの下にフォルダを作成できるように、DFの下にもDFを作成することができるため、 ファイル構造はツリー状に広がり深くなります。 このツリーの最上位に存在するDFは特別にMF(主ファイル)と呼ばれ、 カードへ接続した時点でのカレントファイルはMFとなります。 カレントファイルとは、現在選択しているファイルのことです。 次に、ファイル構造のモデル図を示します。

この図では、MFの下にDFとEFが1個ずつしか作成されていませんが、 実際のスマートカードにはより多くのファイルが作成されているはずです。 また、DFの下にDFが作成されていることもあります。 各種ファイルの主な要点は次のようになります。

ファイル 意味
MF ・MFのファイル識別子は、0x3f00である。
・MFの直下には予約済みの識別子を持ったEFが存在することがある。
・MFの直下に独自のEFを作成することは推奨されない。
DF ・DFは1〜16バイトのファイル名を持つ。
・DF名はAID(RID(5バイト) + PFX(11バイト))で命名されることがある。
・DF名はファイル構造内で一意でなければならない。
・DF(MF含む)は下位DFへのセキュリティステータスの継承をオプションとする。
・DF(MF含む)はセキュリティ環境を持つ。
EF ・EFは2バイトのファイル識別子を持つ。
・EFのファイル識別子は親DF内で一意でなければならない。
・EFは0x01〜0x1eまでの短縮識別子を持つこともできる。
・EFの短縮識別子は親DF内で一意でなければならない。
・EFにはWEFとIEFの2種類が存在する。

SELECT FILEの視点から見た場合、特に重要となるのがファイル識別子とファイル名です。 DFはファイル名で識別しますが、EFはファイル識別子で識別します。 また、MFはDFでありながら、0x3f00というファイル識別子を持っています。 MFの直下には、次に示すような予約済みの識別子を持ったEFが予め作成されていることがあります(0x2f00以外は、JICSAP仕様のファイルです)。

ファイル識別子 意味
0x1e カード識別子を表す。カード識別子には、カード製造者の情報が格納されている。 カードの発行者は、カード識別子からどのようなカードであるかを特定する。
0x2f00 EF.DIRを表す。このファイルは、MF直下に存在するDF名を格納している。 このため、レコードを読み取ることで、 どのようなDFが存在するのかを特定することができる。
0x2f10 業務一覧ファイルを表す。このファイルは、MFまたはDFの直下に存在するDFの名前を 格納している。このため、レコードを読み取ることで、 どのようなDFが存在するのかを特定することができる。 EF.DIRと基本的な役割は同一であるが、 このファイルはアプリケーションが明示的に作成するものと思われる。 また、通常のDFの直下に作成することもできる。
0x2f11 IC製造者識別子ファイルを表す。このファイルは、セキュリティ監査追跡のために存在する。

上記の表のように決まった識別子を持つわけではありませんが、 MFの直下にはIEFが存在することもあります。 このIEFに対して照合または認証を行って成功した場合、 MFの直下に独自のDFを作成することができるようになると思われます。 なお、0x3fffと0xffffのファイル識別子は将来のために予約されているため、 この識別子を持ったファイルは現在存在しません。

EFには、WEF(作業用基礎ファイル)とIEF(内部基礎ファイル)、 そしてDO-WEF(データオブジェクト基礎ファイル)の3種類が存在します。 最初の2つのファイルを理解するための良い例としては、 店頭などで導入されるポイントカードが挙げられるでしょう。 ポイントカードには、所有者情報や現在のポイント数などを格納しなければなりませんが、 このようなアプリケーションが解釈するデータはWEFに格納されることになります。 一方、IEFにはファイルの制御を制限するための鍵を格納します。 たとえば、WEFが存在するDFにIEFを作成した場合、そのWEFにアクセス(書き込みなどを)するためには、 IEFに対してPIN(パスワード)の照合を済ましておかなければなりません。 つまり、PINを知らない限りは、IEFが存在するDF内でのファイル制御は失敗することになります。 PINの照合はカードが行うことから、IEFにはカードが解釈するデータが格納されていると考えることができます。

JICSAPについて

スマートカードの規格には、ISO(国際)規格とJIS(国内)規格が存在します。 JIS規格はISO規格を基に作成された国内用の規格ですが、 グローバルな国際規格が存在するにも関わらず、 このような国内用の規格が存在するのは何故でしょうか。 たとえば、接触型カードの基本コマンドを規格するISO 7816-4は、 既に述べたSELECT FILEなどのコマンドの仕様を定義していますが、 実際にこうしたコマンドをカードが実装するかどうかは、オプションとしています。 つまり、カードに毎に実装しているコマンドの種類が異なり、 互換性の維持が困難になるという問題があります。 こうした問題を解決し、カード間の最低限の互換性を維持するために規格されたのがJIS規格です。 まず、ISO規格とJIS規格の対応関係を確認します。

ISO規格 対応するJIS規格
ISO 7816-1
(物理特性)
JIS X 6303
ISO 7816-2
(端子のサイズと位置)
JIS X 6303
ISO 7816-3
(電気信号と伝送プロトコル)
JIS X 6304
ISO 7816-4
(共通コマンド)
JIS X 6306
ISO 7816-5
(アプリケーション識別子のための付番システム及び登録)
JIS X 6308
ISO 7816-6
(共通データ要素)
JIS X 6307
ISO 7816-8
(セキュリティ関連共通コマンド)
JIS X 6300-8
ISO 7816-9
(追加共通コマンド及びセキュリティ属性)
JIS X 6300-9

JIS規格はISO規格に準拠しているため、 英文で書かれたISO規格を日本語化したものがJIS規格と考えても、特に問題はありません。 ただし、先に述べたカードの互換性を確保するために、 JIS X 6306では必ず実装しなければならないコマンドを定義しています。 そのようなコマンドを次に示します。

JIS X 6306における必須コマンド
READ RECORD(S)
APPEND RECORD
UPDATE RECORD
SELECT FILE
INTERNAL AUTHENTICATE
EXTERNAL AUTHENTICATE
GET CHALLENGE

JIS X 6306はこれらのコマンドの実装を必須としていますが、 コマンドの仕様自体はISO 7816-4と同一であることに注意してください。 つまり、あるコマンドの使い方を調べる場合に、 ISO 7816-4を参照するかJIS X 6306を参照するかは特に問いません。

JIS原案の作成は、JICSAP(日本ICカードシステム利用促進協議会)という団体が行っています。 この団体はJICSAP仕様の策定も行っており、 現在までで1.0、1.1、2.0の3つの仕様が公開されています。 JICSAP仕様とは、JIS規格をまとめたものであり、 単純なリファレンスではなく、具体的な実装方法についても記述されています。 最新のJICSAP 2.0仕様は、次に示す4部構成となっています。

第1部 接触型ICカード
第2部 近接型ICカード
第3部 共通コマンド
第4部 高速処理用ICカード

基本的にカードを利用するアプリケーションに有用となるのは、第3部の共通コマンドです。 この部にはコマンドの説明だけでなく、ファイル構造やセキュリティについての説明もあり、 ISO 7816-4/8/9(JIS規格として考えても可)の内容が含まれます。 非接触型カードにはISO 14443(JIS X 6322)という専用の規格がありますが、 JICSAP 2.0の内容は非接触型カードにも適用されることになっています。 また、JICSAP 2.0はプラットフォーム型カード(JAVAやMULTOS)に おける1つのアプリケーションとして実装することも可能です。 JICSAP 2.0の仕様書は、JICSAPのHPから購入することができます。



戻る