我是密码学的新手。我想加密连接字符串部分和web.config中的其他部分。我知道这可以使用RSACryptoServiceProvider完成。 但我不确定默认RSACryptoServiceProvider使用的密钥和密钥大小。 根据我们的组织安全策略,密钥大小应为196位,我们必须与用于加密的安全团队共享密钥。
当我们使用默认加密时,asp.net将在内部使用密钥加密/解密以及密钥大小?
为了使用可与安全团队共享的自定义密钥,我们是否需要通过继承RSACryptoServiceProvider来创建自定义类?
RSA密钥容器也有点令人困惑。它是Key或Key本身的容器
请指教。
答案 0 :(得分:1)
从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需要首先解密加密的对称密钥,然后使用解密密钥将您实际想要的内容解密为纯文本。
“Problem with decrypting xml document”有两级加密示例。显而易见(也许是令人不安的)是RSA加密提供程序在CBC模式下使用Triple DES,用于RSA PKC底层的对称加密算法,您认为它实际上提供了加密。看到这个人在尝试将对称算法更改为AES时感到沮丧,例如,Change Microsoft Config File Encryption Method From TripleDES。三重DES仅建议在2030年之前在非常理想的情况下使用(参见http://en.wikipedia.org/wiki/Triple_DES#Security)算法的代言人(NIST)。几年前,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