Java Security API概要


最終更新日 1997 年 2 月 12 日


はじめに

Java Security API は新しい Java コア API で、java.security に組み込まれています。この最初のリリースには、主として暗号化機能が含まれ、Java ベースのアプリケーションに組み込むことができます。この API の将来のリリースでは、システムセキュリティや安全な分散コンピューティングをサポートする多くのプリミティブが含まれます。

Java Security API の暗号化フレームワークは、後から新しいアルゴリズムを容易に追加して、現行アルゴリズムと同じ方法で利用することができるように設計されています。たとえば、DSA がこのリリースでは唯一の組み込みデジタル署名アルゴリズムですが、フレームワークは RSA のような別のアルゴリズムを容易に収容することができます。

データ暗号化やその他の機能の API は、米国の輸出管理規則に準拠して、その実装とともに、「Java 暗号化拡張」 (JCE)でアドオンパッケージとして別にリリースされます。これらの API には、ブロック暗号とストリーム暗号、対称暗号化と非対称暗号化、複数のオペレーションモードや暗号化のサポートが含まれます。

JDK 1.1 に含まれる、Java Security の最初のリリースでは、以下の API が含まれます。

デジタル署名
DSA などのデジタル署名。その機能には、任意のデジタルデータの署名や承認に加えて、公開鍵とプライベート鍵の組み合わせを作成することもできます。

メッセージダイジェスト
MD5 や SHA-1 のような暗号的に安全なメッセージダイジェスト。これらのアルゴリズムは、一方向のハッシュアルゴリズムとも呼ばれ、データの「デジタル指紋」の作成に便利です。データのデジタル指紋は、デジタル署名や、デジタルデータに一意で偽造不可能な識別子が必要なアプリケーションで頻繁に利用されます。

鍵管理
基本要素(個別ユーザやグループなどのエンティティ)、その鍵、その証明を管理するための抽象化のセット。これによりアプリケーションが自分自身の鍵管理システムを設計したり、高いレベルで他のシステムとインターオペレートしたりすることができるようになります。X.509 v3 のような特定の証明フォーマットのサポートはしていませんが、将来の JDK リリースに含まれる予定です。

アクセスコントロールリスト
基本要素とアクセス許可を管理するための抽象化のセット。 高いレベルの抽象化 を利用できます。この API は内部的には JDK システムセキュリティに使用されません。また、完全なアクセスコントロールをサポートするように次のリリースで実質的に改訂および拡張されます。

アーキテクチャと設計

Java Security API は以下の原則に従って設計されました。

実装の独立性とアルゴリズムの独立性は相補的関係にあります。その目的は API のユーザに、実装やこれらの概念を実装するのに使用されるアルゴリズムを気にせずに、デジタル署名やメッセージダイジェストなどの暗号化の 概念 を利用してもらうことです。完全なアルゴリズム独立性が不可能なときは、開発者には標準化したアルゴリズム専用の API が提供されます。実装の独立性が不要なときは、開発者は必要な特定の実装を指示することができます。

実装の独立性は「プロバイダ」ベースのアーキテクチャを使用して実現します。 暗号化パッケージプロバイダ (略して「プロバイダ」)は、デジタル署名アーキテクチャ(DSA)や RSA Cryptosystem(RSA)のような、専用のアルゴリズムを実装するパッケージまたはパッケージのセットです。アプリケーションは、DSA オブジェトのような特定種類のオブジェクトを要求して、インストールしたプロバイダから実装を取得することができます。必要な場合は、アプリケーションはその代わりに特定のプロバイダに実装を要求することができます。

アルゴリズムの独立性は、暗号化「エンジン」(アルゴリズム)の種類を定義し、これらの暗号化エンジンの機能を提供するクラスを定義することによって実現します。これらのクラスは エンジンクラス と呼ばれます。その例には MessageDigest や Signature クラスがあります。

実装の相互運用性とは、様々な実装が互いに機能して、相手の鍵を使い、互いの署名を検査することができるという意味です。これは、たとえば、同じアルゴリズムでは、あるプロバイダによって作成された鍵を別のプロバイダで使用できて、あるプロバイダによって作成された署名が別のプロバイダで検査できるということです。

アルゴリズムの拡張性とは、サポートされるエンジンクラスの 1 つに適合する新しいアルゴリズムが簡単に追加できるということを言います。

暗号化パッケージプロバイダ

Java Security は 抽象 レイヤであり、 暗号化パッケージプロバイダ (略して「プロバイダ」)という概念を導入しています。この用語は、Java Security API の暗号化面のサブセットの完全な実装を提供するパッケージ(またはパッケージのセット)を表します。Java のユーザやクライアントは、趣味趣向に応じて特定のプロバイダパッケージをインストールすることができます。

JDK 1.1 には標準で SUN という名称のデフォルトのプロバイダが付属しています。

JDK では 1 つ以上のプロバイダパッケージがインストールされます。新しいプロバイダを静的または動的に追加することができます。

ユーザはメソッドを呼び出してどのプロバイダがインストールされているかを問い合わせることができます。

プロバイダは、デジタル署名アルゴリズム(DSA)や RSA 暗号化(RSA)などの特定のアルゴリズムを実装するパッケージです。アプリケーションは、DSA オブジェクトのような特定の種類のオブジェクトを要求し、インストールしたプロバイダのうちの 1 つから実装を取得することができます。必要な場合は、クライアントが特定のプロバイダから実装を要求することもできます。

クライアントが様々なプロバイダでシステムを構成するときは、それぞれに プリファレンスオーダー を指定します。プリファレンスオーダーは、特定のプロバイダが要求されていないときに要求されるアルゴリズムに対してプロバイダを検索する順序のことです。

アルゴリズム実装を取得して利用したいクライアントは、Java Security API (java.security) メソッドを呼び出してそうします。直接プロバイダコードを呼び出す必要はまったくありません(呼び出さないでください)。

"SUN"プロバイダ

JDK 1.1 には、SUN と呼ばれるデフォルトのプロバイダがあります。 "SUN" プロバイダパッケージには以下が含まれます。

JDK のデフォルトの環境では、これらのアルゴリズムのいずれかが要求されると、SUN が要求されたサービスプロバイダでない場合や、サービスプロバイダが明示的に指定されない場合に、SUN プロバイダからの実装が利用されます。言い換えれば、SUN は、デフォルトの実装を提供する最優先(デフォルトの)プロバイダです。このプリファレンスオーダーは設定することができます。

また"SUN"プロバイダは、プリンシパルの永続データベースや X.509 v1 証明などの単純なシステムキーや信頼管理機構を提供します。javakey ツールが永続データベースのインタフェースになります。

Java Security 参考文献

詳しくは以下の文献を参照してください。


Copyright (C) 1996, 1997 Sun Microsystems, Inc., 2550 Garcia Ave., Mtn. View, CA 94043-1100 USA. All rights reserved.

ご意見は java-security@java.sun.com までお送りください。