从 aspnet_regiis.exe 导出的 RSA 密钥容器文件确实是密钥的容器。它们是 XML 文件。实际上,由于 RSA 是公钥加密,因此密钥容器同时保存了公钥和私钥(如果您同时导出两者)。
当您通过 aspnet_regiis.exe 执行 web.config 或 app.config 加密,并且您未指定提供程序时,它将使用“defaultProvider”的值。请参阅http://msdn.microsoft.com/en-us/library/zhhddkxy(v=vs.100).aspx。加密的输出将列出提供者名称(以便您知道如何解密它)。默认提供程序的默认名称似乎是“RsaProtectedConfigurationProvider”。该加密提供者使用密钥。默认密钥的默认名称为“NetFrameworkConfigurationKey”(请参阅 http://blogs.msdn.com/b/mosharaf/archive/2005/11/17/protectedconfiguration.aspx)。具有该名称的密钥在每台机器上都有不同的值,并且在安装 .NET 时生成。
196 位的密钥长度听起来像是您的安全团队希望您执行某种对称密钥加密(不是非对称 PKC)。例如,人们吹嘘他们的 AES 密钥长度为 256 位。用于创建自定义 RSA 加密提供程序和密钥的 .NET 4.0 aspnet_regiis.exe 命令使用 2048 位的密钥大小(尽管过去 1024 位并不少见)。我想默认的 RSA 提供程序和默认密钥使用密钥长度的默认值。但可以肯定的是,您可能希望导出默认密钥,然后自己检查。-pc 和 -px 开关及其相关选项(如 -size)记录在http://msdn.microsoft.com/en-us/library/vstudio/k6h9cz8h(v=vs.100).aspx中。
如果您需要对私钥非常具体,该私钥在机器重新映像之后将是持久的,并且将被服务器场中的许多节点使用,并且需要由安全团队托管,您可能想要花时间创建 RsaProtectedConfigurationProvider 类型的非默认加密提供程序(不发明您自己的 CSP 类作为 RsaProtectedConfigurationProvider 的替代方案)。
最后要注意的是,web.config XML 加密是在一个多步骤过程中执行的。首先,加密过程会生成一个随机对称密钥(与 RSA 密钥相比较短),该密钥将用于加密明文语料库。明文用对称密钥加密(在语料库被标准化为空白等之后)。然后,对称密钥(与语料库相比较短)使用 RSA 公钥加密。如果整个明文语料库都用 RSA 公钥加密,解密需要很长时间。因此,当您查看加密的 web.config 中的加密 XML 块时,您将真正看到两件事:加密的密钥部分和加密的数据部分。要解密密文,ASP.NET 需要首先解密加密的对称密钥,
在“解密 xml 文档的问题”中有一个两级加密的示例。显而易见(也许令人不安)的是,RSA 加密提供程序在 CBC 模式下使用 Triple DES 用于您认为真正提供加密的 RSA PKC 基础的对称加密算法。请参阅此人对尝试将对称算法更改为 AES 的挫败感,例如Change Microsoft Config File Encryption Method From TripleDES。算法的支持者 (NIST)仅建议在 2030 年之前在非常理想的情况下使用三重 DES(参见http://en.wikipedia.org/wiki/Triple_DES#Security)。几年前,NIST 进行了一项替代对称算法套件的测试,他们选择并认可为 AES(http://en.wikipedia.org/wiki/Advanced_Encryption_Standard)。因此,要使用 AES-192 或 AES-256,您需要发明自己的 CSP 类作为 RsaProtectedConfigurationProvider 的替代方案,然后使其可用于创建提供程序并从 ASP.NET 执行加密/解密操作。
这是另一篇相关的堆栈溢出文章:ASP.NET Encryption - aspnet_regiis - Farm。
以下是创建/导出 RSA 加密提供程序和密钥以在农场中传播的指南,例如: http: //msdn.microsoft.com/en-us/library/2w117ede (v=vs.100).aspx