第14章 |
|
Security and Trust Services APIs (SATSA) は、小型デバイス上で動作するアプリケーションにスマートカードへのアクセスと暗号化の機能を提供します。JSR 177 (SATSA 仕様) では、オプションパッケージとして 4 つの API が定義されています。
Sun JavaTM Wireless Toolkit for CLDC エミュレータでは、SATSA を完全にサポートします。この章では、Sun JavaTM Wireless Toolkit for CLDC を使用して、アプリケーションで SATSA を操作する方法を説明します。
SATSA と小型デバイスでスマートデバイスを使用する方法の概要については、『SATSA Developer's Guide』(http://java.sun.com/j2me/docs/satsa-dg/) を参照してください。
Sun JavaTM Wireless Toolkit for CLDC には、Java Card Platform Simulator が含まれています。これを使用して、Sun JavaTM Wireless Toolkit for CLDC エミュレータのスロットでスマートカードをシミュレートできます。Java Card Platform Simulator は、次の場所にあります。
独自の Java Card アプリケーションを開発する必要がある場合は、http://java.sun.com/products/javacard/ で Java Card Development Kit をダウンロードしてください。
多くの場合、実際の SATSA デバイスには、スマートカードを収納する 1 つまたは複数のスロットが装備されます。SATSA を使用してスマートカードと通信するアプリケーションは、スロットとカードアプリケーションを指定する必要があります。
Sun JavaTM Wireless Toolkit for CLDC エミュレータは実際のデバイスではないため、スマートカード用の物理的なスロットはありません。代わりに、ソケットプロトコルを使用してスマートカードアプリケーションと通信します。ソケットの通信先はスマートカードシミュレータか、実際のスマートカードハードウェアと通信するプロキシになります。
Sun JavaTM Wireless Toolkit for CLDC エミュレータには、シミュレートされたスマートカードスロットが 2 つあります。各スロットには、スマートカードアプリケーションと通信するために使用されるプロトコルの端点を表すソケットが関連付けられています。各スロットにソケットのポート番号を設定できます。「編集」->「環境設定」を選択し、「SATSA」タブをクリックします。スロット 0 のデフォルトポートは 9025、スロット 1 は 9026 です。
Sun JavaTM Wireless Toolkit for CLDC を使用して SATSA アプリケーションをテストする基本的な手順は、次のとおりです。
1. Java Card プラットフォームアプリケーションで cref を起動します。
2. Sun JavaTM Wireless Toolkit for CLDC エミュレータを起動します。
SATSA アプリケーションがスマートカードと通信を試みるときには、ソケット接続を使用して cref と通信します。
したがって、必ず Sun JavaTM Wireless Toolkit for CLDC の環境設定で指定したスロットのポート番号と同じポート番号を使って cref を起動することが重要です。
たとえば、構築済みのメモリーイメージを使ってポート 9025 で cref を実行する場合は、コマンド行で次のように入力します。
cref -p 9025 -i memory_image.eeprom
Sun JavaTM Wireless Toolkit for CLDC に含まれているデモアプリケーション Mohair では、SATSA の使用方法が説明されています。Mohair の実行手順の詳細については、付録 A を参照してください。
Sun JavaTM Wireless Toolkit for CLDC では、シミュレートされたスマートカードアプリケーションと交換したデータをネットワークモニターに表示できます。ネットワークモニターには、エミュレータとスマートカードシミュレータ間で交換された APDU (Application Protocol Data Unit) が表示されます。また、Java Card Remote Method Invocation (Java Card RMI) プロトコルを使用して交換されたデータも表示できます。ネットワークモニターの「APDU」および「JCRMI」タブに、スマートカードと交換したデータが表示されます。
ネットワークモニターは各 APDU を解析し、要求と応答のフィールドを表示します。
アクセス制御のアクセス権と PIN プロパティーは、テキストファイルで指定できます。最初の APDU または Java Card RMI 接続が確立されると、実装は workdir¥appdb ディレクトリの acl_slot-number から ACL と PIN データを読み取ります。たとえば、スロット 0 のアクセス制御ファイルは、workdir¥appdb¥acl_0 です。ファイルがない場合またはファイルにエラーがある場合、このスロットのアクセス制御の検証は無効になります。
ファイルには、PIN プロパティーとアプリケーションのアクセス権に関する情報も指定できます。
PIN プロパティーは、アクセス制御ファイルの pin_data レコードで表されます。
アプリケーションのアクセス権は、アクセス制御ファイル (acf) のレコードで定義されます。
acf レコードはアクセス制御ファイルを表します。acf の後ろの AID は、アプリケーションを識別します。AID が指定されていない場合、エントリはすべてのアプリケーションに適用されます。acf レコードには、ace レコードを含めることができます。ace レコードがない場合、アプリケーションへのアクセスはこの acf によって制限されます。
ace レコードはアクセス制御エントリを表します。このレコードには、root、apdu、jcrmi、pin_apdu、および pin_jcrmi レコードを含めることができます。
root レコードには、1 つの CA 名を記述します。MIDlet スイートがこの CA によって発行された証明書を使用して承認されている場合、この ace はこの MIDlet へのアクセスを許可します。root フィールドが指定されていない場合は、識別された対象のすべてに ace が適用されることを示します。1 行に 1 つの主体を記述します。この行には、root と主体名だけを記述する必要があります。たとえば、次のように指定します。
root CN=thehost;OU=JCT;O=dummy CA;L=Santa Clara;ST=CA;C=US
apdu または jcrmi レコードは、APDU または Java Card RMI アクセス権を指定します。アクセス権レコードが指定されていない場合は、すべての操作が許可されます。
APDU アクセス権には、空白文字で区切られた 8 つの 16 進数の列が 1 つまたは複数含まれます。最初の 4 バイトは APDU コマンドを表し、残りの 4 バイトはマスクを表します。たとえば、次のように指定します。
apdu { 0 20 0 82 0 20 0 82 80 20 0 0 ff ff 0 0 }
Java Card RMI アクセス権には、ハッシュ修飾子 (オプション)、クラスリスト、およびメソッドリスト (オプション) に関する情報が含まれます。メソッドのリストが空の場合、アプリケーションはクラスのリストにあるすべてのリモートメソッドのインタフェースを呼び出すことができます。たとえば、次のように指定します。
jcrmi {classes { com.sun.javacard.samples.RMIDemo.Purse } hashModifier zzz methods { debit(S)V setAccountNumber([B)V getAccountNumber()[B } } |
すべての数値は 16 進数です。タブ、空白文字、復帰、および改行記号が、区切り文字として使用されます。{ および } の記号の前後では、区切り文字を省略できます。
pin_apdu および pin_jcrmi レコードには、PIN エントリメソッドに必要な情報が含まれます。これらの情報は、PIN 識別子、APDU コマンドヘッダー、またはリモートメソッド名です。
Copyright© 2007, Sun Microsystems, Inc. All rights reserved.