7

これはhttp://crypto.stackexchange.comの質問かもしれませんが、答えは暗号化アルゴリズム自体ではなく.NETに関連している可能性があるため、最初にここで試してみると思いました。

RSACryptoServiceProvider クラスには、メソッドSignHashがあります。

秘密鍵で暗号化することにより、指定されたハッシュ値の署名を計算します。

最初の引数はデータのハッシュ値 (これは公平に見えます) ですが、2 番目の引数はハッシュ値の作成に使用されるアルゴリズムを示す文字列です。

問題は、なぜハッシュ アルゴリズムが重要なのかということです。メソッドが行う必要があるのは、秘密鍵を使用して指定された値を暗号化し、結果を返すことだけでしょうか? そして、本当に知る必要がある場合、なぜ RSACryptoServiceProvider にはそれを行うメソッドがないのでしょうか (適切な Verify メソッドと共に)?

4

2 に答える 2

5

ここで正しい方向に考えさせてくれたイリジウムに感謝します。

受信者は2つのものを受け取ります。

  • メッセージ
  • 署名(送信者の秘密鍵で暗号化)

メッセージを確認するには、受信者は送信者の公開鍵を使用して署名を復号化し、メッセージのハッシュと照合する必要があります。

受信者にハッシュアルゴリズムが指定されていない場合、受信者はメッセージをハッシュする方法を知る方法がないため、メッセージを検証できません。

したがって、アルゴリズムは受信者に指定する必要があります。

ハッシュアルゴリズムを送信者(署名の作成方法を知っている)が指定し、他の人が変更できないようにするには、ハッシュアルゴリズムを署名内に含め、ハッシュと一緒に暗号化する必要があります。

したがって、有用な署名を作成するには、ハッシュを暗号化するときにハッシュアルゴリズムを指定する必要があります。

于 2012-08-07T10:30:29.140 に答える
0

たとえば、RSA 署名の PKCS#1 パディングは、署名前にハッシュ関数識別子をハッシュ値に追加することを意味します。

ご覧のとおり、まさにこの方法を使用しています。同じダイジェスト長で別のアルゴリズムを設定してみると、署名が異なることがわかります。

于 2012-08-27T10:19:49.903 に答える