XML SignatureMethod 和 DigestMethod

XML SignatureMethod and DigestMethod

代码示例如下:

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
  <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
  <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig-more#rsa-sha256" />
  <ds:Reference URI="">
    <ds:Transforms>
      <ds:Transform Algorithm="http://www.w3.org/2001/09/xmldsig#enveloped-signature" />
      <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
    </ds:Transforms>
    <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
    <ds:DigestValue>...</ds:DigestValue>
  </ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>...</ds:SignatureValue>
<ds:KeyInfo>
  <ds:KeyName>...</ds:KeyName>
</ds:KeyInfo>

有一个 SignatureMethod 算法 (http://www.w3.org/2000/09/xmldsig#rsa-sha256) and a DigestMethod Algorithm (http://www.w3.org/2000/09/xmldsig-more#rsa-sha256)。

据我所知,SignatureMethod 算法意味着 XML 的内容首先被散列(通过 SHA256)然后由 RSA 签名。

现在我读了一篇关于通过更改为 SHA512 来提高安全级别的文章。

什么对我的代码影响最大?会不会更慢? SHA512 肯定会改变的主要论据是什么。谢谢。

SHA-256 在抗碰撞方面已经为您提供了 128 位的安全性。所以没有那么多需要升级;破解 128 位安全性被认为是不可能的。 SHA-3 竞赛向我们表明,除了长度扩展攻击之外,SHA-2 仍然非常安全。 SHA-512 将您的安全性升级到 256 位,因此如果这是您的目标,那么使用它是有意义的。

量子计算机最终可以使用 Grovers 算法将 128 位安全性减半到 64 位安全性。然而,目前这根本不可行,因此量子计算机很可能也会攻击 RSA,因此出于这个原因进行升级似乎没有那么有用。

SHA-512 在现代计算机上通常 比 SHA-256 更快。这听起来很奇怪,但 SHA-512 在内部使用 64 位操作,而 SHA-256 使用 32 位。由于 CPUs 更适合桌面上的 64 位操作,您可以加快处理时间 并且 更安全。切换到 32 位处理或 - 更糟 - 8 或 16 位嵌入式 CPU 时,预计性能会受到影响。


还有 SHA-2 512/256,它与 SHA-512 相同,但输出大小(和一些常数)。然而,它不像 SHA-256 那样普遍,这在大多数情况下都不是一个好的选择。

签名数据通常比SignedInfo大很多,由签名生成算法处理。因此,更改 DigestMethod 最有意义。

最后,并不是说您需要大约 16KiB RSA 密钥才能达到 256 位的安全性。因此,如果您想将所有内容升级到 256 位安全级别,您可能需要切换到具有 512 或 521 位命名曲线的 ECDSA。