Asp.net RSACryptServiceProvider和Web.config加密

Asp.net RSACryptServiceProvider和Web.config加密,asp.net,cryptography,Asp.net,Cryptography,我对密码学一无所知。我想加密web.config中的连接字符串部分和其他部分。我知道这可以通过RSACryptServiceProvider实现。 但我不确定默认RSACryptServiceProvider使用的密钥和密钥大小。 根据我们的组织安全政策,密钥大小应为196位,我们必须与用于加密的安全团队共享密钥 当我们使用默认加密时,asp.net内部将使用什么密钥进行加密/解密以及密钥大小 为了使用可与安全团队共享的自定义密钥,我们是否需要通过inhering CryptoServicePr

我对密码学一无所知。我想加密web.config中的连接字符串部分和其他部分。我知道这可以通过RSACryptServiceProvider实现。 但我不确定默认RSACryptServiceProvider使用的密钥和密钥大小。 根据我们的组织安全政策,密钥大小应为196位,我们必须与用于加密的安全团队共享密钥

当我们使用默认加密时,asp.net内部将使用什么密钥进行加密/解密以及密钥大小

为了使用可与安全团队共享的自定义密钥,我们是否需要通过inhering CryptoServiceProvider创建自定义类

另外,RSA密钥容器有点混乱。它是密钥的容器还是密钥本身


请给我一些建议

从aspnet_regiis.exe导出的RSA密钥容器文件实际上是密钥的容器。它们是XML文件。实际上,由于RSA是公钥加密,密钥容器同时保存公钥和私钥(如果同时导出这两个密钥)

当您通过aspnet_regiis.exe执行web.config或app.config加密,并且未指定提供程序时,它将使用“defaultProvider”的值。看见加密输出将列出提供者名称(以便您知道如何解密它)。默认提供程序的默认名称似乎是“RsaProtectedConfigurationProvider”。该加密提供程序使用密钥。默认密钥的默认名称为“NetFrameworkConfigurationKey”(请参阅)。具有该名称的密钥将在每台计算机上具有不同的值,并在安装.NET时生成

196位的密钥长度听起来像是您的安全团队希望您执行某种对称密钥加密(而不是非对称PKC)。例如,人们吹嘘他们的AES密钥长度为256位。用于创建自定义RSA加密提供程序和密钥的.NET 4.0 aspnet_regiis.exe命令使用2048位的密钥大小(尽管在过去1024位并不少见)。我设想默认的RSA提供程序和默认密钥使用默认的密钥长度值。但可以肯定的是,您可能希望导出默认密钥,并亲自检查它。-pc和-px开关及其相关选项(如-size)记录在

如果您需要非常具体地说明私钥,该私钥的持久性超出了机器重新映像的范围,并且将由服务器场中的许多节点使用,并且需要由安全团队托管,那么您可能需要将时间投入到创建RsaProtectedConfigurationProvider类型的非默认加密提供程序中(不是发明自己的CSP类作为RsaProtectedConfigurationProvider的替代品)

最后要注意的一点是,web.config XML加密是在一个多步骤过程中执行的。首先,加密过程生成一个随机对称密钥(与RSA密钥相比很短),用于加密明文语料库。明文使用对称密钥加密(在语料库被规范化为空白等)然后,对称密钥(与语料库相比短)是使用RSA公钥加密的。如果整个明文语料库是使用RSA公钥加密的,则解密将需要很长时间。因此,当您查看加密的web.config中的加密XML块时,您将真正看到两件事:加密的密钥部分和加密的数据部分。要解密密文,ASP.NET需要首先解密加密的对称密钥,然后使用解密的密钥将实际需要的内容解密为明文

在“”中有一个两级加密的示例。什么是明显的(可能是令人不安的),即RSA加密提供商在CBC模式下使用Triple-DES作为RSA PKC基础的对称加密算法,您认为该算法真正提供了加密功能。例如,请参阅此人在尝试将对称算法更改为AES时遇到的挫折。Triple-DES仅建议在2030年之前在非常理想的情况下使用(参见)由算法的拥护者(NIST)提供。NIST在几年前为替换对称算法套件举行了一次烘焙,他们选择并认可该套件为AES()。因此,要使用AES-192或AES-256,您需要发明自己的CSP类作为RsaProtectedConfigurationProvider的替代方案,然后使其可用于从ASP.NET创建提供程序和执行加密/解密操作

下面是另一篇与此相关的堆栈溢出文章:


以下是创建/导出RSA加密提供程序和密钥以在场中传播的指南,例如:

从aspnet_regiis.exe导出的RSA密钥容器文件实际上是密钥的容器。它们是XML文件。实际上,由于RSA是公钥加密,密钥容器同时保存公钥和私钥(如果两者都导出)

当您通过aspnet_regiis.exe执行web.config或app.config加密,并且未指定提供程序时,它将使用“defaultProvider”的值。请参阅。加密的输出将列出提供程序名称(以便您知道如何解密)。默认提供程序的默认名称似乎是“RSAPECTEDTConfigurationProvider”。该加密提供程序使用密钥。默认密钥的默认名称为“NetFrameworkConfigurationKey”(请参阅)。具有该名称的密钥在每台计算机上具有不同的值,并在安装.NET时生成

196位的密钥长度听起来像是您的安全团队希望您执行某种对称密钥加密(而不是非对称PKC)。例如,人们吹嘘他们的AES密钥长度为256位。用于创建自定义RSA加密提供程序和密钥的.NET 4.0 aspnet_regiis.exe命令使用2048位的密钥大小(虽然1024在过去并不少见)。我想象默认的RSA提供程序和