ICカードについて


(update: 2004.11.01)

  ヒマつぶしにICカードを調べることにしました。目標はICカード用パソコン上プログラムの開発方法を基礎から書くこと。自分が忘れるからね。。。

作業履歴。だに。

  1. 2004/09/28 あまりに暇なので住民基本台帳カード(以下住基カードと略)を取得する。
  2. 2004/10 住基カードをもらった際にもらったCDROMを見て思わず公的個人認証のプログラムを開発したくなる。
  3. 2000/11/01 住基カードの仕様書が個人では手に入らないので、とりあえず自分の知識キャッシュを吐き出すべくICカードの知識をWebページに書き出す。

目次

ICカードとは

よく出てくる、訳分からない(であろう)ICカード専門用語集

住基カードの仕様書問題

住基カード系の仕様書


ICカードとは

特に使える参考書(先に読むと以下がよく理解できる)

  1. セキュリティICカ−ドの基礎と応用
    基本的なところが押さえられている。おそらく必須。
  2. MULTOSカード発行ガイド
    MULTOS専用だけど、そこら辺を飛ばせばICカード利用の基礎が書いてある。

はじめに

ICカードのプログラムを作りたかったけど、あまりに知識がなかったので途方にくれました。今でも苦労しているけど。。用語がわからなかったり。ということで、このWebページではICカードをパソコン上で使用したプログラムを作りたいけど、イメージが沸かない人用に、せめてイメージが沸くようにしたいです。

ICカードの論理レイヤー

ICカードと一言で言っても、いろいろな関連があります。その関連を整理するために、パソコン上のソフトウェアを作る人という観点で、論理レイヤーに分けてみました。このレイヤー分けは、私個人的にまとめたものです。専門用語との関連はありません。ご注意ください。

JPKI1105.JPG - 14,526BYTES

ICカード論理レイヤー図

このレイヤーに従って説明します。

(1)カードトークンアクセスAPI

PKCS#11やCSPのこと。パソコン上のソフトウェアがICカードアクセス用に使用するAPIを想定しています。


(2)プロトコル解釈

PC/SC等が運んできたプロトコルを解釈する部分。主にAPDUを解釈します。カードデータ、にも依存しますし、仕様にも依存します。


(3)リーダプロトコル搬送

PC/SCを想定しているレイヤーです。ちなみにPC/SCとはシステムニーズ に詳しいです。この会社はすばらしい値段(個人には)でPC/SC技術仕様書を販売しているところです。英語でいいのならば Microsoftの規格としてスタートしてからPC/SC Workgroupに移管したらしく、仕様書をダウンロード できます。


また、MUSCLEというミドルウェアもこの範疇に入ります。

(4)(リーダOS)

一応入れてみました。MS WindowsとかLinuxとかMAC OS Xのことです。あまりICカード自体には関係ないけど、どのミドルウェアを使用するかには関連します。

(5)物理リーダ

この中は主に2のものを想定しています。

  1. ICカードリーダライタ
    いわゆる

    のことです。この絵のやつは。アテナスマートカードソリューション社のリーダライタです。
    他のリーダライタとしては ちなみにここにICカード適合検証済み一覧があります。私の場合は、地方自治体から紙をもらいました。

  2. リーダライタドライバ

    ドライバの実装はいろいろあるのだろう、と思います。アテナスマートカードソリューション社 のICカードリーダドライバはifdhandlerという名前のAPI(?)でICカードのドライバを実装しています。 ifdhandler APIという規約があるらしいです。

    それで実装しているということはPC/SCのドライバであるのとほぼ同義です。私は、2004/11/04現在、このICカードリーダライタしか持っていないので、それ以外は分からないっす。分かったら随時追加予定です。
(6)物理カード

いわゆる接触型ICカード等のICカードの物理層です。プログラムを作成する立場からはあまり関係ないので、ひとくくりにしてあります。

(7)カードOS

主に下の三つがあります。

  1. Java Card
    ICカード上のアプリケーションをJavaで実装できるカードOS。アプレットをカード内に取り入れるらしい。
  2. MULTOS
    特にここの仕様書は必見。これを見れば私らの知りたいことがほとんどわかるといってよいです。
  3. 独自
    ICカード内のOSは独自もありえるらしいです。それほどOSによるサービスも必要としないし。

他のところの説明では、延々と説明しているところもあるようです。が、ぶっちゃけると、パソコン上のソフトウェアを作る人にはどのカードOSを使われてようが、結局は、プロトコルを解釈する部分がすべてなので関係ない。どれも一緒。

(8)カードアプリ

ICカード内に入っているアプリケーション。たとえば、住基カード内における公的個人認証サービスのようなものだと思えばよいです。どのようにカードアプリがカードデータに入るかというと、カードOSに関連します。

ぢつは、カードアプリ自体にはそれほど知識は必要ないです。どのみちリーダプロトコルの解析がすべてなので。

(9)カードデータ

ICカード内にはいろいろなデータが入っています。単純にいって、一つ一つが「ファイル」だと思って差し支えありません。それぞれのカードアプリによって「ファイル」自身の使い方がきまります。これは各アプリで仕様が決まるので、仕様書参照ということになります。


よく出てくる、訳分からない(であろう)ICカード専門用語集

  1. APDU

    アプリケーションデータユニットの略。たとえるならHTTPみたいなもん(わかんないか)1バイト単位で数種類の命令と、およびデータが規定されている。ほとんどが HTTPのようにリクエスト(パソコン上のアプリケーションからの。私のレイヤー分けなら「プロトコル解釈」からの)命令を送付し、「カードアプリ」からのレスポンスを受信する。 そのリクエストとレスポンスの内容をAPDUという

  2. セッション

    トークンとスロットを結びつける道のこと。ICカードだけでいうなら、多セッションというのは   意味がない場合が多い。

  3. トークン

    「カードデータ」のこと。だと思って差し支えない。

  4. スロット   

    「論理リーダ」のこと。

  5. PKCS#11   

    一応、カードトークンアクセスAPIのである。が、私はぢつは誤解していた。どーゆー誤解かというと、 ずっとPKCS#11の実装は「ひとつ」だと思っていたのである。ICカード中、「カード」の多様性を無視して カードリーダのドライバさえあればPKCS#11の実装は一意に定まる、と思っていたのであった。PKCS#11は単なる APIの仕様であって、カードが違うと、PKCS#11の実装が違うことに、やっと気づいたのであった(苦笑)

  6. PC/SC

    APDUを受け渡すAPI群、である。ほかにいろいろ規定してあるが、それはリーダドライバ用だったりする。 ICカードを利用するだけのプログラマには関係ない。

  7. ATR

    Answer To Reset の略。ICカード的には物理的意味があるらしいが、どうでもよい。ICカードが挿入された際に 「物理カード」が送りつけてくるバイナリデータだと思えばよい。つまりこれにて「カード」を特定できる。 

  8. ICカード用ライブラリ

    ICカードと一緒によく売っているライブラリ。基本的には、空のICカードと一緒に売ってるはず。この系統は、空のICカードからシステムを作り上げるためのライブラリだと思ったほうがよい。一般用ではない。

  9. ICカードリーダライタ

    この世界は、特にOEM(日立のやつがなになにだったりNTTデータのやつがこれこれだったり)が発達しまくっている。実際、日本でICカードを作成しているところはないと思う。


住基カードの仕様書問題

公的個人認証サービスを使おうと、仕様書を取得しようとした。仕様開示 がそれである。その記述を郵送した。でも、取得できなかった。なぜ個人で手に入れられないのだろう??

仕様書を取得しようとした際の返送メールが以下、ほぼ引用。

From juki-net-icc@lasdec.or.jp Thu Oct 28 16:42:31 2004
Return-Path: 
Received: from mx.mbn.or.jp (mx.mbn.or.jp [220.111.47.194])
	by ba.mbn.or.jp (Postfix) with ESMTP id 3F3CA343B
	for ; Thu, 28 Oct 2004 16:42:34 +0900 (JST)
Received: from prdn03.lasec.or.jp (prdn03.lasdec.or.jp [210.254.150.121])
	by mx.mbn.or.jp (Postfix) with ESMTP id 519323587
	for ; Thu, 28 Oct 2004 16:42:33 +0900 (JST)
Received: from prdn03.lasec.or.jp (localhost [127.0.0.1])
	by prdn03.lasec.or.jp (unknown) with ESMTP id i9S7ebt22557
	for ; Thu, 28 Oct 2004 16:40:37 +0900 (JST)
Received: from prdn04.lasdec.or.jp ([192.168.1.219])
	by prdn03.lasec.or.jp (unknown) with ESMTP id i9S7ea322553
	for ; Thu, 28 Oct 2004 16:40:36 +0900 (JST)
Received: from brns01.las.lasdec.or.jp (brns01.las.lasdec.or.jp [192.168.10.1])
	by prdn04.lasdec.or.jp (8.11.7+Sun/3.7W-02100117) with ESMTP id i9S7bXG28480
	for ; Thu, 28 Oct 2004 16:37:33 +0900 (JST)
content-class: urn:content-classes:message
MIME-Version: 1.0
Content-Type: text/plain;
  charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit
Subject: =?iso-2022-jp?B?GyRCMys8KD89QEE9cSRLJEQkLSReJDckRiFKJDQyc0V6IUsbKEI=?=
Disposition-Notification-To: "juki-net-icc" 
X-MimeOLE: Produced By Microsoft Exchange V6.0.5762.3
Date: Thu, 28 Oct 2004 16:42:31 +0900
Message-ID: 
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
Thread-Topic: =?iso-2022-jp?B?GyRCMys8KD89QEE9cSRLJEQkLSReJDckRiFKJDQyc0V6IUsbKEI=?=
Thread-Index: AcS8wa5XHNGeQvXrR2yZNEBQq5QGLg==
From: "juki-net-icc" 
To: 
Status: R
X-Status: N
X-KMail-EncryptionState:  
X-KMail-SignatureState:  
X-KMail-MDN-Sent: 

谷野 健一 様

  時下、ますますご清栄のこととお慶び申し上げます。
  住民基本台帳ネットワークシステムに関しましては、日頃からご理解
を賜り、誠にありがとうございます。

 さて、この度「住民基本台帳カード仕様書(TypeT)開示申請書」を、
郵便によりお送りいただいておりますが、当該仕様書の開示にあたりま
しては、住民基本台帳カードの製造希望事業者及びカードアプリケーシ
ョン開発事業者が、住民基本台帳カード製造及びカードアプリケーション
開発において、仕様書を必要とする場合は、必要書類を提出することに
より、仕様書を開示させていただく旨、ご案内しているところです。
 したがいまして、ご案内に該当する機関以外への開示は、行わない
こととなっております。

 誠に申し訳ございませんが、ご理解いただきますよう、よろしくお願い
申し上げます。

*************************************

財団法人 地方自治情報センター

*************************************
だそうです。で、私は、以下のメールを送付しました。(2004/11/01)
「開示申請書につきまして(ご回答)」についての質問

谷野健一@個人です。

住民基本台帳カード(TypeT)の仕様開示
(http://www.lasdec.nippon-net.ne.jp//rpo/icc/icc_kaiji_index.htm)に従い、
仕様開示を行ったところ、以下のように

--メールより引用
 住民基本台帳カードの製造希望事業者及びカードアプリケーシ
ョン開発事業者が、(中略)
 したがいまして、ご案内に該当する機関以外への開示は、行わない
こととなっております。
--
のご回答を頂いたため、その関連による質問をします。

前提として以下とします。

・本業(カードアプリケーション開発事業者)ではなく、趣味であることを
先に書いておきます。確かに個人としては「業務」ではありません。
・私はコンピュータの知識は一通り持っております。一応技術英語を読むこと
もできます。
・このメールおよび、その回答は他人へ転送する可能性があります。あらかじめ
ご了承ください。

Q1. Q2. Q3.の質問についてお答えしていただけると幸いです。

Q1.事業者のみに開示する理由は何でしょうか。また、その政策(地方自治体
から配布しているため)はどのようにして決定されたのでしょうか。

(1)事業者のみである理由で、考えられるのはセキュリティ等を破る
クラッカーのような、「うろんな」、何か不正をする人々を排除することがあります。
ですが、ちゃんと正しい情報を記述して提出している人まで排除する理由にはなりません。

また、事業者だからといって不正しないとも限りません。

(2)その決定は誰によってなされたのでしょうか?法律等、開示しない
「政治的に」「正当」な理由は明示されないのでしょうか。

Q2.個人を排除する理由は何でしょうか?

(1)個人というより、住基カードを持っている本人を排除する理由がわかりません。
どうして所有している個人が仕様を見られないのでしょうか?

(2)また、個人でも住基カードの通信内容(APDU)を
リバースエンジニアリングして、内容を解析し、仕様を推測することができます。
例えば

 transmitted:
  00 20 00 80 04 xx xx xx xx
 received:
  90 00

は住基カードのパスワード変更時に生成されているAPDUの一部ですが、
2バイト目の"20"とはVERIFY命令だな、とかの推測はできるわけです。
また、90 00は成功していることを示すレシーブコードなのだろう、と。

このように推測はできてしまい、不完全な仕様書を公開することが
できてしまいます。
これらはISO7816-4に規定されている命令ですから、推測は容易です。

ICカードには詳しくない私はができるのですから、誰でもできると思います。

よってそのような不完全な仕様が流出するより、公開したほうがコストが低くなる
と思います。

Q3.なぜ電子申請を採用しないのか?

対象を限定しているのにもかかわらず、電子申請をしないということは、まったく
やる気を感じません。カードアプリケーション開発事業者はICカードによる電子申請
が期待できる対象です。というより「事業者」に電子申請させない、で誰に
電子申請させるつもりなのでしょうか。ご検討をお願いします。

さぁ、どう出てくるか楽しみです。(2004/11/08現在回答なし)

    住基カード系の仕様書

    1. 公的個人認証サービス利用者クライアントソフト

      PKCS#11の仕様がたくさん書いてあるので役に立つ

    2. 近接型通信インターフェイス実装規約書

    谷野健一(tanino@a2.mbn.or.jp)