6


セキュリティーと MIDlet の署名

MIDP 2.0 (JSR 118) には、保護ドメインに基づく総合的なセキュリティーモデルが含まれています。MIDlet スイートは保護ドメインにインストールされ、そこで保護された機能へのアクセスが決定されます。MIDP 2.0 仕様には、公開鍵暗号方式を使って MIDlet スイートの検証と認証を行うための推奨手順も含まれています。

明確な情報については、MIDP 2.0 仕様を参照してください。Sun JavaTM Wireless Toolkit for CLDC を使用した MIDlet 署名の概要については、次の URL で Understanding MIDP 2.0's Security Architecture を参照してください。
http://developers.sun.com/techtopics/mobility/midp/articles/permissions/

公開鍵暗号方式に関する基礎知識については、次の URL で MIDP Application Security 1: Design Concerns and Cryptography を参照してください。
http://developers.sun.com/techtopics/mobility/midp/articles/security1/

この章では、保護ドメイン、アクセス権、および MIDlet への署名に関する Sun JavaTM Wireless Toolkit for CLDC のサポートについて説明します。


6.1 アクセス権

ネットワークへの接続など、セキュリティーにかかわる処理を MIDlet で実行するには、MIDlet にアクセス権が付与されている必要があります。アクセス権には固有の名前があります。MIDlet スイートに特定のアクセス権が必要な場合は、MIDlet スイート記述子の属性を使って指定できます。

これらのアクセス権属性をプロジェクトに追加するには、「属性設定」ボタンをクリックします。「アクセス権」アイコンを選択します。「MIDlet-Permissions」ボックスに、MIDlet に必須のアクセス権が表示されます。「MIDlet-Permissions-Opt」ボックスには、オプションのアクセス権が表示されます。

図 6-1 MIDlet スイートのアクセス権


Project settings for project "Tiny" with Permissions icon selected on left

どちらかのボックスにアクセス権を追加するには、「追加」をクリックし、アクセス権を選択します。アクセス権を削除するには、それを強調表示してから「削除」をクリックします。


6.2 セキュリティーポリシーの選択

Sun JavaTM Wireless Toolkit for CLDC では、JSR 185 (Java Technology for the Wireless Industry) と JSR 248 (Mobile Service Architecture (MSA)) の両方で定義されたセキュリティーポリシーがサポートされます。保護ドメインの詳細は、6.2.1, MSA 保護ドメインおよび 6.2.2, Java Technology for the Wireless Industry 保護ドメインで説明します。

エミュレータで使用するセキュリティーポリシーを選択するには、「編集」->「環境設定」を選択し、「カテゴリ」リストで「セキュリティー」を選択します。「セキュリティーポリシー」コンボボックスで、「MSA」または「JTWI」のいずれかを選択します。利用可能なセキュリティーポリシーのいずれかを選択します。

「OTA 経由で実行」を使用する場合、パッケージ化された MIDlet スイートは、エミュレータに直接インストールされますが、その際いずれかの保護ドメインに配置されます。エミュレータは、公開鍵暗号方式を使用して、インストールされた MIDlet スイートの保護ドメインを決定します。

MIDlet スイートに署名がない場合は、デフォルトの保護ドメインに置かれます。MSA と JTWI では、デフォルト設定が異なります。6.2.1 項および 6.2.2 項を参照してください。署名付き MIDlet は、署名キーの証明書チェーンのルート証明書に関連付けられている保護ドメインに配置されます。

たとえば、Respectable Software という架空の会社が、暗号で署名された MIDlet スイートを配布するとします。Respectable Software は、Super-Trustee という架空の認証局から署名キーペアを購入します。Respectable Software は、署名キーを使って MIDlet スイートに署名し、MIDlet スイートとともに証明書を配布します。MIDlet スイートがエミュレータまたはデバイスにインストールされるときに、Respectable Software の証明書が検証されます。この検証には、Super-Trustee のルート証明書のコピーが使用されます。次に、Respectable Software の証明書を使って、MIDlet スイートの署名が検証されます。すべての検査が正常に終了した場合、デバイスまたはエミュレータで MIDlet スイートがインストールされ、Super-Trustee のルート証明書に関連付けられている保護ドメインに配置されます。ほとんどの場合は、identified_third_party です。

ツールキットには、MIDlet スイートへの署名、キーの管理、およびルート証明書の管理を行うためのツールが用意されています。

6.2.1 MSA 保護ドメイン

ツールキットでは、MSA に対して次の 5 つの保護ドメインがサポートされます。

エミュレータでアプリケーションを実行するために「実行」ボタンをクリックすると、デフォルト設定では unidentified_third_party 保護ドメインでコードが実行されます。

6.2.2 Java Technology for the Wireless Industry 保護ドメイン

Sun Java Wireless Toolkit には、次の 4 つの保護ドメインがあります。

エミュレータでアプリケーションを実行するために「実行」ボタンをクリックすると、デフォルト設定では untrusted 保護ドメインでコードが実行されます。


6.3 MIDlet スイートへの署名

MIDlet スイートに署名するには、最初にパッケージ化を行う必要があります (「プロジェクト」->「パッケージ」を選択)。続いて、「プロジェクト」->「署名」を選択します。署名ウィンドウが表示されます (図 6-2)。

図 6-2 MIDlet スイートの署名ウィンドウ


Sign MIDlet Suite window with localhost1 alias selected shows Java SE key details

使用するキーを「エイリアスリスト」で選択し、「MIDlet スイートに署名」ボタン
(緑色の三角形) をクリックします。


6.4 キーの管理

MIDlet の署名ウィンドウは、キーの管理にも使用できます。テストの目的で、キーペアを作成して MIDlet に署名できます。デバイスに配備するには、デバイスが認識する認証局から署名キーペアを取得する必要があります。既存の Java SE プラットフォームキーストアからキーをインポートすることもできます。

6.4.1 新しいキーペアの作成

まったく新しいキーペアを作成するには、「新規キーペア」をクリックします。キーの別名とキーペアに関連付ける情報の入力を求めるメッセージが表示されます。

図 6-3 新しいキーペアの作成


New Key Pair dialog prompts for an alias name, common name, organization unit, organization, City/Locality, State/Province and a two-letter country code

「作成」をクリックすると、保護ドメインの選択を求めるメッセージが表示されます。作成したキーペアと保護ドメインとの関連は不透明に思えますが、次のような意味があります。

この新しいキーで署名された MIDlet スイートをインストールすると、次のような処理が行われます。

6.4.2 実際のキーの取得

Sun JavaTM Wireless Toolkit for CLDC 環境でキーペアを作成して MIDlet に署名する機能は、テストのためだけに使用する機能です。実際のデバイスでアプリケーションを実行するときは、デバイスが認識する認証局から署名キーペアを取得する必要があります。

実際のキーを使用して MIDlet スイートに署名する手順は、次のとおりです。

1. 新しいキーペアを作成します。

Sun JavaTM Wireless Toolkit for CLDC では、前述したように、MIDlet の署名ウィンドウで「新規キーペア」を押してこの操作を実行できます。

2. 証明書署名要求 (CSR) を生成します。

a. 署名ウィンドウで「CSR を生成」を押します。

b. CSR ファイルの場所を変更する場合は、新しいパスを入力するか、「参照」を押して新しいファイルの場所を選択します。

c. 「作成」を押して、CSR ファイルを書き込みます。

CSR が書き込まれると、成功したことを示すメッセージが表示されます。

3. CSR を認証局 (CA) に送信します。

CA では、識別情報を確認するための詳細情報が必要です。また、生成される証明書に応じて認証局に料金を支払う必要もあります。

CA は、識別情報を確認して支払いを受け取ると、公開鍵を証明する証明書を送信します。

4. MIDlet の署名ウィンドウで「証明書のインポート...」を押して、証明書を Sun JavaTM Wireless Toolkit for CLDC にインポートします。

これで、独自の非公開鍵を使用して MIDlet スイートに署名することができます。Sun JavaTM Wireless Toolkit for CLDC により、署名と証明書が MIDlet スイートに配置されます。

6.4.3 既存のキーペアのインポート

MIDlet 署名に使用するキーが、Java SE プラットフォームキーストアに含まれている場合があります。この場合、MIDlet スイートに署名するには、署名キーを Sun JavaTM Wireless Toolkit for CLDC にインポートする必要があります。そのためには、MIDlet の署名ウィンドウで「キーペアのインポート」をクリックします。Java SE プラットフォームキーストアが含まれているファイルを選択します。インポートするキーペアの別名を選択するように要求されます。続いて、キーストアにインポートしたキーペアを識別するための別名を入力します。最後に、キーペアのルート証明書に対して保護ドメインを選択する必要があります。

6.4.4 キーペアの削除

MIDlet の署名ウィンドウからキーペアを削除するには、そのキーペアの別名を選択してから、「アクション」->「選択を削除」を選択します。


6.5 証明書の管理

この節では、Sun JavaTM Wireless Toolkit for CLDC を使用してエミュレータのルート証明書リストを管理する方法について説明します。

実際のデバイスにも同様のルート証明書リストがありますが、通常は、ユーザーがこれらを変更することはできません。実際のデバイスにアプリケーションを配備するときは、認証局によって発行された署名キーを使用し、その認証局のルート証明書がそのデバイス上に存在している必要があります。それ以外の場合、デバイスはアプリケーションを検証できません。

アプリケーションの開発中に、ツールキットの証明書管理ユーティリティーを使用すると、エミュレータのルート証明書リストをテストの目的で簡単に操作できます。

「ファイル」->「ユーティリティー」を選択します。「証明書の管理」を選択して「起動」を押すと、証明書管理ウィンドウが表示されます。小さいキーストア _main.mks が表示されます。このキーストアは、appdb ディレクトリに存在します。

appdb ディレクトリには、keystore.ksserverkeystore.ks も含まれます。Java ME プラットフォーム証明書マネージャーでは *.ks ファイルを開けませんが、6.5.2, 証明書のインポートで説明するように、これらのキーストアから証明書をインポートできます。

図 6-4 証明書マネージャー


Java ME certificate manager displays certificate list on the left and Java ME key details on the right.

ウィンドウの左部分の「証明書リスト」には、各証明書が 1 行で表示されます。証明書をクリックすると、ウィンドウの右側部分に、証明書の詳細と関連付けられた保護ドメインが表示されます。

6.5.1 証明書の有効化と無効化

証明書は有効または無効にすることができます。この方法は、証明書をキーストアから削除することなく、一時的に使用不可にする場合に便利です。証明書を有効または無効にするには、リストで証明書を選択して「証明書を有効化/無効化」を押します。操作を確認するメッセージが表示されます。「はい」を選択して、処理を続行します。

6.5.2 証明書のインポート

証明書ファイルまたは Java SE プラットフォームのキーストアファイルから、証明書をインポートできます。

ファイルから証明書をインポートするには、証明書マネージャーウィンドウの「証明書のインポート」をクリックします。証明書ファイルの場所を指定してから、その証明書に関連付けられている保護ドメインを選択します。

Java SE プラットフォームキーストアから証明書をインポートするには、証明書マネージャーウィンドウのメニューから「アクション」->「Java SE プラットフォーム証明書をインポート」を選択します。まず、証明書の保護ドメインを選択します。次に、キーストアファイルを選択し、キーストアのパスワードを入力します。最後に、インポートする証明書の別名を選択します。

6.5.3 証明書の削除

リストから証明書を削除するには、証明書を選択してから、「アクション」->「選択を削除」を選択します。


6.6 USB トークンのサポート

USB トークンにより、パスワードで保護された携帯用ストレージで公開鍵と非公開鍵および証明書を利用できます。Java SE PKCS#11 ネイティブインタフェースは、PKCS#11 準拠のネイティブドライバを備えた USB トークンへのアクセスをサポートします。ドライバがインストールされるときに、PKCS#11 ライブラリもインストールされます。Windows では、ライブラリは win32.DLL です。

この節では、Windows プラットフォームで USB トークンをインストールして使用する手順の例を示します。



注 - USB トークンを Linux ドライバで十分にテストしていないため、Linux はサポート対象外です。PKCS#11 準拠のネイティブドライバを利用できる場合は、Linux でも USB トークンが動作する可能性があります。



この節の残りの部分では、USB トークンのサポートに必要なインストールと設定の処理を、手順に従って説明します。

6.6.1 USB トークンドライバのインストール

すべてのアプリケーションを終了します。

1. http://downloads.geotrust.com/TCSPIKEY0407203016.exe にアクセスします。

2. 「ファイルのダウンロード」ダイアログボックスが表示されたら、「保存」をクリックします。

実行可能ファイルを保存するディレクトリを記録しておきます。

3. 実行可能ファイルを選択してダブルクリックし、Crypto Token のインストールを開始します。

インストールの指示に従ってトークンを挿入すれば、インストールを完了できます。

4. Windows の「ハードウェアの追加ウィザード」が起動します。

指示に従い、すべてデフォルトの設定を使用します。

5. ウィザードが完了したら、「はい」を選択してコンピュータを再起動します。


procedure icon  USB トークンのパスフレーズの再設定

この手順は、新しい USB トークンのみで有効です。すべての USB トークンには、デフォルトのパスフレーズとして PASSWORD (すべて大文字) が設定されています。このパスフレーズを再設定してください。

1. Windows のタスクバーで「スタート」をクリックします。「すべてのプログラム」->「GeoTrust Token」->「iKey 2000 Series Software」->「PassPhrase Utility」を選択します。

2. 「Update Passphrase」をクリックします。

新しいパスフレーズを入力する前に、「古いパスフレーズ」を入力するように指示されます。

3. パスフレーズを再設定します。

GeoTrust および Cingular は、パスフレーズに 8 文字以上の組み合わせを使用することを推奨しています。


procedure icon  USB トークンの管理

GeoTrust ドライバのインストールディレクトリに移動します。CIPUtils.exe を実行し、USB トークンの内容を管理します。

6.6.2 USB トークンの使用

「MIDlet スイートに署名」ダイアログで、USB トークンにアクセスできます。USB トークンを接続してドライバをインストールし、「ファイル」->「Load keystore」->「from USB Token」を選択します (または Ctrl キー + T キーを押す)。USB トークンがパスワードで保護されている場合、パスワードの入力を求めるメッセージが表示されます。トークンが正しくロードされると、すべてのエイリアスとキーの詳細が表示されます。6.3, MIDlet スイートへの署名で説明するように、キーを選択して署名に使用できます。

USB トークンからキーストアをロードしようとしたときに、エラーメッセージが表示される場合があります。