JavaTM Platform
Standard Ed. 6

java.security
クラス SignedObject

java.lang.Object
  上位を拡張 java.security.SignedObject
すべての実装されたインタフェース:
Serializable

public final class SignedObject
extends Object
implements Serializable

SignedObject は、認証実行時オブジェクトの作成を目的としたクラスです。この実行時オブジェクトの整合性が損なわれた場合は、必ず検出されます。

より具体的には、SignedObject は、別の Serializable オブジェクト、署名付きオブジェクト、およびその署名を保持します。

署名付きオブジェクトは、元のオブジェクトの直列化された形式での精密なコピーです。ひとたびコピーが作成されると、元のオブジェクトをさらに操作してもコピーに影響が及ぶことはありません。

基になる署名アルゴリズムは、コンストラクタと verify メソッドに渡される Signature オブジェクトによって指定されます。次に、署名の一般的な使い方を示します。

Signature signingEngine = Signature.getInstance(algorithm,
provider);
SignedObject so = new SignedObject(myobject, signingKey,
signingEngine);
 

次に、検証の一般的な使い方を示します (SignedObject so を受け取っている)。

Signature verificationEngine =
Signature.getInstance(algorithm, provider);
if (so.verify(publickey, verificationEngine))
try {
Object myobj = so.getObject();
} catch (java.lang.ClassNotFoundException e) {};
 

留意点をいくつか挙げます。最初に、署名エンジンや検証エンジンはコンストラクタと verify メソッド内で再初期化されるので、それらのエンジンを初期化する必要はありません。次に、検証を成功させるには、指定された公開鍵が、SignedObject を生成するのに使う非公開鍵に一致していなければなりません。

さらに重要なのは、柔軟性です。 コンストラクタと verify メソッドはカスタマイズされた署名エンジンにより、暗号プロバイダの一部として正式にインストールされていない署名アルゴリズムを実装できます。ただし、署名の検証には verify メソッドの Signature エンジン自身の実装が呼び出されるので、検証用コードを記述するプログラマは、どの Signature エンジンが使用中であるかを確認することが重要です。言い換えれば、悪意のある Signature はセキュリティーチェックを免れるために検証で常に true を返そうとする場合があります。

多くの署名アルゴリズムの中で、DSA および SHA-1 を使用した NIST 標準の DSA を使用できます。 アルゴリズムは、署名と同じ規約を使って指定されます。たとえば、SHA-1 メッセージダイジェストアルゴリズムを使用する DSA アルゴリズムは、SHA/DSA または SHA-1/DSA (これらは等価) のように指定できます。RSA の場合は、メッセージダイジェストアルゴリズムに複数の選択肢があります。 したがって、署名アルゴリズムの指定は、MD2/RSA、MD5/RSA、または SHA-1/RSA のようにします。デフォルトはないので、必ずアルゴリズムの名前を指定しなければなりません。

暗号パッケージプロバイダの名前は、コンストラクタと verify メソッドに対する Signature パラメータで指定されます。このプロバイダを指定しないと、デフォルトのプロバイダが使用されます。各インストールは、特定プロバイダをデフォルトとして使うように設定できます。

SignedObject を使用するアプリケーションでは、以下のことが行えます。

関連項目:
Signature, 直列化された形式

コンストラクタの概要
SignedObject(Serializable object, PrivateKey signingKey, Signature signingEngine)
          任意の Serializable オブジェクトから SignedObject を構築します。
 
メソッドの概要
 String getAlgorithm()
          署名アルゴリズムの名前を取得します。
 Object getObject()
          カプセル化されたオブジェクトを取得します。
 byte[] getSignature()
          署名付きオブジェクトの署名を、バイト配列の形式で取得します。
 boolean verify(PublicKey verificationKey, Signature verificationEngine)
          この SignedObject 内の署名が、内部に格納されたオブジェクトの有効な署名かどうかを、指定された検証エンジンを使って、指定された検証鍵で検証します。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

SignedObject

public SignedObject(Serializable object,
                    PrivateKey signingKey,
                    Signature signingEngine)
             throws IOException,
                    InvalidKeyException,
                    SignatureException
任意の Serializable オブジェクトから SignedObject を構築します。指定されたオブジェクトは、指定された署名エンジンを使って、指定された署名鍵で署名されます。

パラメータ:
object - 署名対象のオブジェクト
signingKey - 署名のための非公開鍵
signingEngine - 署名エンジン
例外:
IOException - 直列化でエラーが発生した場合
InvalidKeyException - 鍵が無効な場合
SignatureException - 署名が失敗した場合
メソッドの詳細

getObject

public Object getObject()
                 throws IOException,
                        ClassNotFoundException
カプセル化されたオブジェクトを取得します。このオブジェクトは、復帰する前に直列化が復元されます。

戻り値:
カプセル化されたオブジェクト
例外:
IOException - 直列化復元でエラーが発生した場合
ClassNotFoundException - 直列化復元でエラーが発生した場合

getSignature

public byte[] getSignature()
署名付きオブジェクトの署名を、バイト配列の形式で取得します。

戻り値:
シグニチャーこのメソッドが呼び出されるたびに新しい配列を返す

getAlgorithm

public String getAlgorithm()
署名アルゴリズムの名前を取得します。

戻り値:
署名アルゴリズム名

verify

public boolean verify(PublicKey verificationKey,
                      Signature verificationEngine)
               throws InvalidKeyException,
                      SignatureException
この SignedObject 内の署名が、内部に格納されたオブジェクトの有効な署名かどうかを、指定された検証エンジンを使って、指定された検証鍵で検証します。

パラメータ:
verificationKey - 検証用の公開鍵
verificationEngine - 署名検証エンジン
戻り値:
署名が有効な場合は true、そうでない場合は false
例外:
SignatureException - 署名検証が失敗した場合
InvalidKeyException - 検証鍵が無効な場合

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。