4

私が理解しているように、デジタル署名は、自分の秘密鍵と受信者の公開鍵で暗号化(メッセージダイジェスト)することによって取得されます。

Javaでは、公開鍵を使用して署名の第2段階を実行する方法がわかりません。

Signature sig = Signature.getInstance("MD5WithRSA");
sig.initSign(privateKey);
sig.update(data);
byte[] signatureBytes = sig.sign();

APIを確認しましたが、公開鍵を使用する唯一のメソッドは検証用です...

4

4 に答える 4

6

メッセージの署名に関与する受信者はありません。他の人が署名を確認できないようにする場合は、受信者の公開鍵に署名を暗号化できますが、それは通常、メッセージへの署名の一部とは見なされません。

于 2012-04-09T19:30:51.950 に答える
3

公開鍵暗号の場合:

  • 秘密鍵は、署名解読/解読に使用されます。

  • 公開鍵は、署名の検証暗号化/暗号化に使用されます。

TLS仕様の用語集を参照してください。

公開鍵暗号化:2鍵暗号を使用する暗号技術のクラス。公開鍵で暗号化されたメッセージは、関連付けられた秘密鍵でのみ復号化できます。逆に、秘密鍵で署名されたメッセージは、公開鍵で検証できます。

RSAでは、署名に使用される数学演算は暗号化に使用される演算と非常に似ていますが(署名はダイジェストの「暗号化」とほぼ同じです)、これはすべてのアルゴリズム(DSAなど)に当てはまるわけではありません。さらに、用語を混在させると、全体的なセキュリティの推論に問題が発生します。

ここで行ったことは、署名の唯一の段階です。これに加えて(受信者の公開鍵を使用して)メッセージを暗号化することもできますが、これは独立した操作です。あなたはこれをするために見たいかもしれませんCipher。もちろん、暗号化する必要があるのは、以前に取得した署名だけではなく、最初のメッセージとその署名の連結です。(署名のみを暗号化することに意味があるかどうかはわかりません。)

于 2012-04-09T19:39:30.350 に答える
2

受信者の公開鍵を使用してデジタル署名を暗号化するような手順はありません。この場合、受信者だけが復号化(したがってチェック)できるため、(一般的な)デジタル署名にはなりません。

したがって、はい(Javaの詳細を知らなくても)、APIがプライベートRSAキーを必要とする関数を作成する機能しか提供していないのに対し、受信者は署名をチェックするためにパブリックRSAキーを必要とします。これは2番目の部分です。あなたが言及するAPIの。

于 2012-04-09T19:31:29.970 に答える
0

「第2段階」、秘密鍵でハッシュを暗号化する、または署名を検証するというのはどういう意味ですか?

貼り付けたコードは、を呼び出した後、すでに署名を与えていますupdate()。署名オブジェクトはすでにハッシュ(MD5)を実行し、秘密鍵(RSA)で暗号化します。

署名を確認するには、ここで説明する対称的な手順に従います。

于 2012-04-09T19:32:52.607 に答える