スマートカードは、標準的なクレジットカードと同じサイズで、情報改ざん防止機能が付いています。スマートカードのプラスチック回路基板には、シリコンに埋め込まれた電子回路があり、情報を格納したり処理します。スマートカードにはメモリカードとインテリジェント・カードという基本的な 2 つのタイプがあります。メモリカードはデータをローカルに格納しますが、そのデータの計算をおこなうための CPU をもっていません。インテリジェント (スマート) カードはマイクロプロセッサをもち、ローカルに格納されたデータの計算をおこなうことができます。
Java Card テクノロジーのアプリケーション・プログラミング・インタフェース (Application Programming Interface:API) は、アプレットが Java Card Runtime Environment と内蔵のサービスにアクセスするための呼出し規則を定義します。Java Card API を使用すると、ある Java Card 対応プラットフォーム用に書かれたアプリケーションは、別の Java Card 対応プラットフォーム上で実行できます。
Java Card API は、ISO7816 などの正式な国際標準と Europay、Master Card、Visa (EMV) などの業界固有の標準と互換性があります。
Java Card テクノロジーは、生産性、セキュリティ、堅牢性、ツール、移植性など、Java プログラミング言語の多くのメリットを保持したまま、スマートカード上で Java テクノロジーを使用できるようにします。仮想マシン (Virtual Machine:VM) と、言語の定義と、主要パッケージをよりコンパクトで簡潔にして、Java テクノロジーをスマートカードの制約のある環境に導入しました。
Q: Java Card プラットフォーム用アプレットは何を使って開発できますか。
市販の Java プログラミング言語用開発ツールはどれでも、 Java Card プラットフォーム用アプレットの開発に使用できます。
Q: ほかにはどのようなツールで開発できますか。そのようなツールは誰が提供していますか。
Java Card プラットフォームのライセンシの多くが、Java Card Application Environment 用の開発ツールを作成しています。たとえば、そのような開発ツールのうち、Java Card プラットフォーム用に書かれたアプレットをテストしたりデバッグしたりするスマートカード環境のシミュレーションをおこなうものもあります。詳細はJava Card テクノロジー Web サイトを参照してください。
Q: 非接触型カードはJava Card プラットフォームに対応しますか。
Java Card テクノロジーは対応するハードウェアのタイプに依存しません。Java Card プラットフォームは、接触型デバイス上でも非接触型デバイス上でも実行できます。
Q: Java Card プラットフォームと OpenCard Framework は関連がありますか。
Java Card テクノロジーは、スマートカードやメモリに制約のあるデバイスで作動します。OpenCard Framework はカードの端末側またはワークステーションで作動し、カードリーダーと通信する API を開発者に提供します。そしてカード端末やワークステーションで実行されるアプリケーションからの通信の詳細を抽象化します。Java Card テクノロジーと OpenCard Framework は、どちらも Java テクノロジーに基づいています。詳細は OpenCard Frameworkの Web サイトを参照してください。
Q: 現在どの Java Card テクノロジー製品が利用できますか。
Java Card プラットフォームのライセンシの多くが、製品の出荷時期について公表しています。Java Cardテクノロジーの Web サイト にベンダーの一覧と問合せ先が掲載されています。
Q: Java Card テクノロジーは標準のスマートカード・テクノロジーと同程度にセキュリティ保護されていますか。Java Card テクノロジーに大変興味がありますが、標準のスマートカード・テクノロジーよりセキュリティ保護されていないのではないでしょうか。たとえば、共有メカニズムで使用されるコンテキストの切替えはかなり危険な操作だそうです。これは本当ですか。ほかにも危険だと思われる操作がありますか。
Java Card テクノロジーはハードウェアとスマートカードに内蔵されたシステム上の実行環境を定義します。Java Card 実行環境 (Java Card Runtime Environment:JCRE) はスマートカード・アプリケーションに高レベルの標準インタフェースを提供します。その結果、Java スマートカードのアプリケーションを開発するのがかなり容易になります。
Java スマートカードが従来のスマートカードよりセキュリティ保護されていないと考えるのは誤解です。逆に、Java Card テクノロジーは総合的なセキュリティ構想を提供します。Java Card システムのセキュリティ保護機構は、アプリケーション開発時から実行時のセキュリティ実施まで、各段階で対応します。
まず、Java プログラミング言語はセキュリティを考慮して設計されています。Java Card テクノロジーは Java プログラミング言語のサブセットに対応しています。そのため、Java Card システムは、対応する Java プログラミング言語のサブセットに組み込まれたセキュリティ機能を継承します。
第2に、Java Card バイナリファイルは完全性と正確性を保証するために検証することができます。ファイルはセキュリティ保護されていないネットワークを介してダウンロードされることがあるため、これは重要です。Java Card バイナリファイルは信頼できるサードパーティが暗号署名できます。バイナリファイルのデジタル署名はコードの安全性をさらに保証するため、カード上でインストール中に検証できます。
第3に、実行時に、Java Card 仮想マシン1 はファイアウォール機構でアプレットの分離を保証します。Java 環境では、セキュリティはサンドボックス・モデルのアイデアが中心になっていることを思い出してください。アプレットはサンドボックス内のリソースにアクセスできますが、それを越えてアクセスすることはできません。サンドボックス・モデルはアプレットの間で一定の分離を保ちます。Java Card システムで、サンドボックスの概念はアプレットのファイアウォール機構を介して実装されます。ファイアウォールは基本的にカード上の各アプレットに対して、コンテキストと呼ばれるオブジェクト空間を割り当てます。コンテキスト内のデータアクセスは許可されます。しかし異なるコンテキストのアプレットへのアクセスはファイアウォールによって禁止されます。また協調的なアプリケーションに対応するために、異なるコンテキストのアプレットもデータをシェアする必要があります。Java Card テクノロジーは多数のセキュリティ保護された共有メカニズムを提供します。セキュリティ保護された共有メカニズムが適用されると、Java Card 仮想マシンはコンテキストの切替えをおこなうことでアクセスできるようにします。コンテキストの切替えはいい加減なアクションではありません。むしろ、仮想マシンが安全に制御します。
詳細情報
謝辞
回答を投稿した JDC メンバーの Zhiqun Chen に感謝します。
1 このドキュメントで使用される「Java 仮想マシン」または「JVM」という用語は、Java プラットフォーム用の仮想マシンを指します。
