モジュール java.base
パッケージ java.security

クラスSignedObject

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

public final class SignedObject extends Object implements Serializable

SignedObjectは、検出せずに整合性を損なうことができない認証ランタイム・オブジェクトを作成する目的でクラスです。

具体的には、SignedObjectには、別の直列化可能オブジェクト、(to-be-)シグネチャ済オブジェクトおよびそのシグネチャが含まれます。

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

基になる署名アルゴリズムは、コンストラクタと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
関連項目: