Java プラットフォーム 1.2

java.security
クラス SignedObject

java.lang.Object
  |
  +--java.security.SignedObject

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/RSAMD5/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 - 署名検証エンジン
例外:
SignatureException - 署名検証が失敗した場合
InvalidKeyException - 検証鍵が無効な場合

Java プラットフォーム 1.2

バグや機能要求の報告
新しい javadoc の表示についてのコメントやご提案
Java は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-1998 Sun Microsystems, Inc. 901 San Antonio Road,
Palo Alto, California, 94303, U.S.A. All Rights Reserved.