遵循代码示例:
<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)和DigestMethod算法(http://www.w3.org/2000/09/xmldsig-more#rsa-sha256)。
据我所知,SignatureMethod算法意味着首先对XML的内容进行哈希处理(通过SHA256),然后由RSA签名。
现在我读了一篇关于通过更改为SHA512来提高安全级别的文章。
对我的代码影响最大的是什么?它会更慢吗?什么是SHA512明确改变的主要论点。谢谢。
答案 0 :(得分:0)
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位。由于CPU更适合桌面上的64位操作,因此可以加快和的处理时间。切换到32位处理时会出现性能损失,或者更糟糕的是 - 虽然是8位或16位嵌入式CPU。
还有SHA-2 512/256与SHA-512相同但输出大小(以及一些常量)。然而,它并不像SHA-256那样流行,在大多数情况下它并不是一个很好的选择。
签名数据通常远大于SignedInfo
,由签名生成算法处理。所以改变DigestMethod是最有意义的。
最后,并不是说您需要一个16KiB RSA密钥才能达到256位安全性。因此,如果要将所有内容升级到256位安全级别,您可能需要使用512或521位命名曲线切换到ECDSA。