概要
アプレットの署名プロセスは、4
つの基本的な概念に基づく公開鍵暗号化システムを基礎にしています。公開鍵暗号化を支える
4
本の柱とは、公開/秘密鍵のペア、デジタル証明書、認証局、および暗号化アルゴリズムの
4
つです。キーのペアはメッセージを交換する手段を提供し、デジタル証明書は送信者と受信者両方の信頼性を保証します。また、認証局はデジタル証明書の有効性を保証し、暗号化アルゴリズムはメッセージの「スクランブル」を行います。
デジタル証明書とは、身元証明の一形式として動作するソフトウェアトークンのことで、運転免許証が運転者の身元証明に使用されるのに似ています。デジタル認証は電子署名の一形式として認められており、個人や企業のアイデンティティを認証するために使用されます。危険性の高いリクエストに応答する前に送信者が正当であるかどうかを検証することは、証明書の受信者の責任です。
デジタル署名は、デジタル証明書をデータの集合に適用し、データの作成者を保証するための手段です。かつて、書簡はロウで封印され、一目でわかるエンブレムをロウに刻印することで、その書簡の受取人は、その書簡が自分が想像する相手から送られたものであることを断定することができました。概念的には、アプレットの署名はこれとまったく同様ですが、その安全性と信頼性は格段に向上しています。Java
コードに署名を行うというのは、完成したアプレットのデータ、クラスファイル、イメージファイル、データファイルなど、jar
ファイルの形式で格納されたファイルにデジタル署名を適用することを意味します。このメカニズムにより、アプレットの出所を検証して、署名が行われた後でアプレットに変更が加えられていないことを確認することができます。転送中にインターセプトが行われた場合でも、変更を加えられたアプレットは署名の検証プロセスに合格しません。
エンドユーザが実行するコードがその署名者から送信されたもので、何ら悪意のないことを証明できるため、開発した
Java
アプレットのコードに署名を行うことは重要です。また、署名を行うことで、デベロッパは
Java
セキュリティ「sandbox」の外部にあるリソースにもアクセスできるようになります。一般に、開発したコードは、それがあたかもクライアントマシン上のアプリケーションであるかのように何の制限もなしに動作します。特に、署名を行うと、アプレットは次の機能にアクセスできるようになります。
- アプレットのサーバとは異なるサーバ上で実行されているリモート
オブジェクトへの RMI 呼び出しの発行
- クライアント側のプログラムの実行
- クライアント上に格納されているファイルの読み書き
- ローカルプリンタへの印刷ジョブの送信
- システムクリップボードへのアクセス
- クライアントのシステムプロパティの読み込み
(たとえば、ユーザ名など)
- Reflection API を使ったオブジェクト
(フィールド、メソッド、値など) の構造の判定
- その他
アプレットセキュリティに関する MRJ
によるインプリメンテーションでは、Sun
の標準的な署名アプレットメカニズムを使用しています。Sun の
Javakey ツールは、証明書の作成、jar
ファイルの署名、身元データベースの管理、およびその他の関連タスクの実行に使用されます。Javakey
ツールは、公開/秘密鍵のペアとそれに関連する証明書を含むデータベースを管理します。Javakey
ツールを使って jar ファイルに署名を行うため、Javakey
のデータベースには公開/秘密鍵のペアが含まれていなければなりません。Javakey
ツールは、「機能拡張」フォルダの MRJ
Libraries:lib:security フォルダの中にある
java.security
という名前のセキュリティプロパティファイルに含まれる
identity.database
プロパティによって指定された位置でデータベースを検索します。デフォルトの設定では、このデータベースは「identitydb.obj」という名前のファイルで、「初期設定」フォルダの中に格納されています。このデータベースは、多数のさまざまな潜在的署名者に対するキーのペアを保持しており、それぞれのキーのペアは署名者のユーザ名と関連づけられています。キーのペアに加えて、Javakey
のデータベースには、公開鍵に対応する証明書が含まれています。新しい証明書がこのデータベースに追加されると、Javakey
は識別を目的として重複しない番号をその証明書に割り当てます。
|