.Net Core->如何使用1024位密钥解密

时间:2019-01-22 16:29:58

标签: c# .net-core cryptography rsa

如何使用1024位密钥解密RSA消息? It looks like only 512bits默认启用选项

1 个答案:

答案 0 :(得分:2)

似乎您是在指的是OAEP填充中使用的MGF1的哈希函数的最大位大小。该大小确实限制了可以加密的数据量,但这仅仅是因为填充需要一定的开销。因此,哈希大小确实有助于确定开销量。因此从某种意义上说,它确实确定了所需的 minimum 密钥大小。要检查OAEP产生的带有特定哈希值的开销,请查看我的答案here。因此,使用SHA-512,您实际上需要一个大于1024位的密钥,因为仅开销就是130字节(1040位)。

1024位的RSA密钥被认为提供了非常低的安全性。使用这些密钥,可能会应用称为PKCS#1 v1.5填充的旧方案。这是that you referenced in the question页上显示的Pkcs1选项。这个仅需要11字节/ 88位的开销,因此可以与任何实际的密钥大小一起使用。该协议应定义您实际需要的选项之一(因此,如果您不知道:请对方)。


要获取所支持的实际密钥大小,请查看this page

  

如果您安装了Microsoft增强加密提供程序,则RSACryptoServiceProvider支持的密钥大小从384位到16384位(以8位为增量)。如果您安装了Microsoft基本加密提供程序,则它支持从384位到512位(以8位为增量)的密钥大小。

     

有效密钥大小取决于RSACryptoServiceProvider实例使用的加密服务提供程序(CSP)。 Windows CSP对于Windows 8.1之前的Windows版本启用384至16384位的密钥大小,对于Windows 8.1启用512至16384位的密钥大小。有关更多信息,请参见Windows文档中的CryptGenKey函数。

请注意,在RSA加密中只需要16到32字节的有效负载即可加密无限量的数据。这是因为您可以使用16或32字节来加密128或256位AES密钥。然后可以使用此密钥来加密明文本身,例如在GCM模式下使用AES是安全的。这种方案称为“混合密码系统”。


如果您使用的是诸如智能卡之类的硬件提供商,则稍后的评论很重要。没有多少硬件提供商会假定16Ki位密钥。首先,它们通常没有硬件来适应如此大的值的模幂。其次,生成16Ki位RSA密钥对可能会花费很长时间,尤其是在硬件有限的设备上(毕竟,这取决于找到两个随机的8Ki位素数)。

许多智能卡只有预先生成的特定大小的密钥对,因此您甚至无法生成新的密钥对。您只能使用具有预配置大小的私钥。