0

我了解数字签名的过程

  1. 发件人将响应作为数据 + 数据散列给出(用算法散列,比如说 X 并用私钥签名)
  2. 接收方使用算法 X 计算接收方从步骤 1 获得的数据的哈希值。
  3. 如果哈希,在步骤 1 中从发送者(使用公钥解密 pt)得到的响应和从接收到的数据计算的哈希接收者相同,我们很好,但如果它不同,则数据被篡改。

直到现在一切都很好。但我的问题是接收方或发送方如何决定使用哪种算法进行散列。在上述情况下,X 的值是多少。如何确定?

根据我的理解,接收者应该首先告诉发送者它必须使用哪种哈希算法作为请求的一部分。我对么?

请让我知道对此的看法。

4

1 回答 1

1

数字签名包括摘要算法和以 ASN.1 编码的摘要值。请参阅RFC 3447 PKCS#1 v2.1

A.2.4 RSASSA-PKCS1-v1_5

DigestInfo ::= SEQUENCE {
      digestAlgorithm DigestAlgorithm,
      digest OCTET STRING
  }

所以在验证过程中可以确定使用的digestAlgorithm是否是预期的。

但通常的事情是签名算法作为属性包含在签名格式本身中,以便验证部分可以应用适当的。

XMLSignature 示例 xmldsig

JWT/JWS 签名 jwt

如果您使用的格式不包含签名算法,则发送方和接收方应事先同意

于 2017-11-23T09:07:38.033 回答