- すべての実装されたインタフェース:
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
- 関連項目:
-
コンストラクタのサマリー
コンストラクタ説明SignedObject
(Serializable object, PrivateKey signingKey, Signature signingEngine) 任意の直列化可能オブジェクトからSignedObject
を構築します。 -
メソッドのサマリー
修飾子と型メソッド説明署名アルゴリズムの名前を取得します。カプセル化されたオブジェクトを取得します。byte[]
署名付きオブジェクトの署名を、バイト配列の形式で取得します。boolean
このSignedObject
のシグネチャが、指定された検証エンジンを使用して、指定された検証キーとともに内部に格納されているオブジェクトの有効なシグネチャであることを確認します。
-
コンストラクタの詳細
-
SignedObject
public SignedObject(Serializable object, PrivateKey signingKey, Signature signingEngine) throws IOException, InvalidKeyException, SignatureException 任意の直列化可能オブジェクトからSignedObject
を構築します。 指定されたオブジェクトは、指定された署名エンジンを使って、指定された署名キーで署名されます。- パラメータ:
object
- 署名対象のオブジェクト。signingKey
- 署名のための非公開キー。signingEngine
- 署名エンジン。- 例外:
IOException
- 直列化でエラーが発生した場合InvalidKeyException
- キーが無効な場合。SignatureException
- 署名が失敗した場合。
-
-
メソッドの詳細
-
getObject
public Object getObject() throws IOException, ClassNotFoundExceptionカプセル化されたオブジェクトを取得します。 このオブジェクトは、復帰する前に直列化が復元されます。- 戻り値:
- カプセル化されたオブジェクト。
- 例外:
IOException
- 直列化復元でエラーが発生した場合ClassNotFoundException
- 直列化復元でエラーが発生した場合
-
getSignature
public byte[] getSignature()署名付きオブジェクトの署名を、バイト配列の形式で取得します。- 戻り値:
- シグネチャ。 このメソッドが呼び出されるたびに新しい配列を返す。
-
getAlgorithm
-
verify
public boolean verify(PublicKey verificationKey, Signature verificationEngine) throws InvalidKeyException, SignatureException このSignedObject
のシグネチャが、指定された検証エンジンを使用して、指定された検証キーとともに内部に格納されているオブジェクトの有効なシグネチャであることを確認します。- パラメータ:
verificationKey
- 検証用の公開キー。verificationEngine
- 署名検証エンジン。- 戻り値:
- 署名が有効な場合は
true
、そうでない場合はfalse
- 例外:
SignatureException
- シグネチャの検証に失敗した場合は(例外により、シグネチャ検証エンジンが正常に完了しませんでした)。InvalidKeyException
- 検証キーが無効な場合。
-