如果使用 RSA,"SH512" 安全吗?
Is "SH512" secure if using RSA?
我想签署一些数据(字符串而不是文件)并检查哪些方法和技术是安全的。我的搜索结果很有趣,因为似乎 SHA1、SHA256 和 SHA512 函数不再被认为是安全的并且已被破坏。
现在我的问题是,如果它们不安全,为什么在 .net 中可用?
如果我使用 SHA512 通过 RSA 对我的数据进行签名,这也不安全吗?我在问 因为我们使用 public 和私钥,黑客无法访问私钥。
using (var rsa = new RSACryptoServiceProvider())
{
//...
// Sign the data, using SHA512 as the hashing algorithm
signedBytes = rsa.SignData(originalData, CryptoConfig.MapNameToOID("SHA512"));
//...
}
请提供替代算法或..在 .NET 中的 public 网络上签署我的数据。
SHA1 中的抗碰撞性是 broken。但是,SHA256 和 SHA512 并非如此,它们仍然被认为是安全的加密哈希函数。
重要的一点是您不要“使用 SHA512 来签署”数据。 SHA是一个散列函数,它接受任意长度的输入,并将其映射到固定长度的输出,同时具有一定的properties.
它与签名数据相关的方式是非对称密钥加密对于大量数据来说很慢。您可以先为整个数据创建一个散列,而不是 运行 您的签名算法 (RSA),然后对其进行签名。假设适当的加密散列函数具有第二个原像抗性和抗碰撞性,找到具有相同散列值的另一个输入将是不可行的,从签名的角度来看,这意味着不可能找到签名所针对的另一个输入有效。
由于 SHA1 被破坏,使用它来创建将被签名的散列,你不能有这些假设,即。可能会创建另一条原始签名仍然有效的数据。
所以简而言之,使用 SHA256 或 SHA512 作为 RSA 签名的哈希算法仍然是安全的,但 SHA1 不是。
至于为什么 SHA1 仍在 .net 中,我猜是为了向后兼容。你不能只是从框架中删除整个东西,很多旧东西可能仍然需要它。不过,这并不意味着您应该使用它。
我想签署一些数据(字符串而不是文件)并检查哪些方法和技术是安全的。我的搜索结果很有趣,因为似乎 SHA1、SHA256 和 SHA512 函数不再被认为是安全的并且已被破坏。
现在我的问题是,如果它们不安全,为什么在 .net 中可用?
如果我使用 SHA512 通过 RSA 对我的数据进行签名,这也不安全吗?我在问 因为我们使用 public 和私钥,黑客无法访问私钥。
using (var rsa = new RSACryptoServiceProvider())
{
//...
// Sign the data, using SHA512 as the hashing algorithm
signedBytes = rsa.SignData(originalData, CryptoConfig.MapNameToOID("SHA512"));
//...
}
请提供替代算法或..在 .NET 中的 public 网络上签署我的数据。
SHA1 中的抗碰撞性是 broken。但是,SHA256 和 SHA512 并非如此,它们仍然被认为是安全的加密哈希函数。
重要的一点是您不要“使用 SHA512 来签署”数据。 SHA是一个散列函数,它接受任意长度的输入,并将其映射到固定长度的输出,同时具有一定的properties.
它与签名数据相关的方式是非对称密钥加密对于大量数据来说很慢。您可以先为整个数据创建一个散列,而不是 运行 您的签名算法 (RSA),然后对其进行签名。假设适当的加密散列函数具有第二个原像抗性和抗碰撞性,找到具有相同散列值的另一个输入将是不可行的,从签名的角度来看,这意味着不可能找到签名所针对的另一个输入有效。
由于 SHA1 被破坏,使用它来创建将被签名的散列,你不能有这些假设,即。可能会创建另一条原始签名仍然有效的数据。
所以简而言之,使用 SHA256 或 SHA512 作为 RSA 签名的哈希算法仍然是安全的,但 SHA1 不是。
至于为什么 SHA1 仍在 .net 中,我猜是为了向后兼容。你不能只是从框架中删除整个东西,很多旧东西可能仍然需要它。不过,这并不意味着您应该使用它。