モジュール java.base
パッケージ 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-256を使用したNIST標準のDSAを使用できます。 アルゴリズムは、署名と同じ規約を使って指定されます。 SHA-256メッセージ・ダイジェスト・アルゴリズムを使用するDSAアルゴリズムは、たとえばSHA256withDSAのように指定できます。 RSAの場合、署名アルゴリズムはSHA256withRSAのように指定できます。 デフォルトはないので、必ずアルゴリズムの名前を指定しなければいけません。

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

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

  • 改ざんが不可能な承認トークンとしてどのJava実行時に対しても内部的に使用できる。悪質な改ざんは必ず検出されるので、このトークンは安心して渡すことができる。
  • Java実行時以外に格納する(重要なアクセス制御データをディスクに格納するなど)ために、データやオブジェクトに署名し、それらを直列化するために使用できる。
  • 入れ子のSignedObjectsを使うと、承認と委譲の連鎖に類似した、署名の論理シーケンスを構築できる。

導入されたバージョン:
1.2
関連項目:
  • コンストラクタのサマリー

    コンストラクタ
    コンストラクタ
    説明
    SignedObject(Serializable object, PrivateKey signingKey, Signature signingEngine)
    任意のSerializableオブジェクトからSignedObjectを構築します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    署名アルゴリズムの名前を取得します。
    カプセル化されたオブジェクトを取得します。
    byte[]
    署名付きオブジェクトの署名を、バイト配列の形式で取得します。
    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 - 検証キーが無効な場合。