【问题标题】:ASP.NET 2.0 RijndaelManaged encryption algorithm vs. FIPSASP.NET 2.0 RijndaelManaged 加密算法与 FIPS
【发布时间】:2008-12-16 14:46:53
【问题描述】:

我遇到了 ASP.NET 2.0 应用程序的问题。我们的网络人员刚刚提高了我们的安全性,现在每当我尝试访问该应用程序时都会收到以下错误:

“此实现不是 Windows 平台 FIPS 验证的加密算法的一部分。”

我做了一些研究,听起来 ASP.NET 使用 RijndaelManaged AES 加密算法来加密页面的 ViewState...而且 RijndaelManaged 在不符合 FIPS 的算法列表中。我们当然没有明确地调用 any 加密算法......更不用说不合规列表上的任何东西了。

我猜这个 ViewState 业务对我来说很有意义。不过,我无法混淆的是如何处理它。我发现了一个KB article,它建议使用 web.config 设置来指定不同的算法……但要么没有坚持,要么该算法不符合标准。

所以:

1) RijndaelManaged / ViewState 真的是问题所在吗?还是我找错树了?

2) 我如何指定使用什么算法而不是 RijndaelManaged?我有一份符合和不符合要求的算法列表;我只是不确定在哪里插入这些信息。

谢谢!

理查德

【问题讨论】:

    标签: asp.net viewstate rijndaelmanaged fips


    【解决方案1】:

    仔细检查您的 Web.config 中是否没有 <compilation debug="true" />。设置调试编译时,.NET 使用 MD5 散列进行一些内部簿记。 MD5 不符合 FIPS,因此您会收到此错误。

    【讨论】:

      【解决方案2】:

      关于您的第二个问题:也许这 MSDN Article 有帮助。

      根据文档,您可以像这样配置加密算法:

      <machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="3DES" decryption="3DES"/>

      对于验证,您可以使用以下方法之一: [SHA1 | MD5 | 3DES | AES]

      对于解密,您可以使用以下之一: [汽车 | DES | 3DES | AES]

      因此,为了符合 FIPS,您可以使用 3DES(尽管 AFAIK 理论上不太安全)。

      【讨论】:

        【解决方案3】:

        来源: http://blogs.msdn.com/b/shawnfa/archive/2008/03/14/disabling-the-fips-algorithm-check.aspx

        您可以将以下内容添加到您的 web.config 或机器配置中,这样您的 ASP.Net 应用程序就不会因 FIP 合规性检查而失败。

        <configuration>   
        
          <runtime>
                <enforceFIPSPolicy enabled="false"/>
            </runtime>
        

        您的 machine.config 可以在这里找到: \Microsoft.NET\Framework\\config\machine.config

        如果您更改您的 machine.config,则可能需要 iisreset 才能使设置生效。注意:更改 macing.config 将影响系统上的所有 .NET 应用程序。


        要让您的应用程序符合 FIP 而不必禁用 FIP,您可以尝试以下方法:

        1) 将您的机器密钥配置为使用 3DES 进行解密并使用 SHA1 进行验证。

        编辑 (2018-04-05):新的 IIS8.5 STIG 说您应该将机器密钥设置设置为验证:HMACSHA256,加密:自动。

        <configuration>
        <system.web>
            <authentication mode="Windows" />
            <machineKey decryption="3DES" decryptionKey="AutoGenerate,IsolateApps" validation="SHA1" validationKey="AutoGenerate,IsolateApps" />
        </system.web>
        </configuration>
        

        注意:如果您使用的是网络场环境,则可以使用 IIS GUI 并转到机器密钥配置部分以生成一组密钥并在整个网络场中使用相同的密钥。

        2) 确保您的编译 debug="false",并且所有页面指令都具有 debug="false"。将 debug 设置为 true 也将启动 FIP 合规性检查。

        【讨论】:

          【解决方案4】:

          您还需要在盒子上执行此操作

          Enforcing FIPS Certified Cryptography

          【讨论】:

          • 尽管不是很相关,几乎不值得 -1,无论你是谁 - 所以通过支持来平衡(如果 -1er 回来并解释,我很高兴删除我的支持)。 (该链接解释了有问题的网络人员如何首先启用此策略)
          【解决方案5】:

          我们已经尝试过您建议的 machineKey。它对一些网络应用程序有帮助(与 配对时),这很棒,但不是所有的应用程序,这令人沮丧。

          我遗漏了一些东西,但如果我能说出什么,我会很高兴。

          【讨论】:

            【解决方案6】:

            某些网站(如 SharePoint 网站)在 Web 配置中已经有 SHA1 机器密钥,因此请检查是否已经存在算法,如果有删除它并添加以上内容。

            【讨论】:

              【解决方案7】:

              根据我所见,viewstate machine key 和 compilation="debug" 配置问题是导致此问题的最常见原因。据我所知,在 .NET 2.0 中,用于视图状态验证/加密的 3DES 算法是唯一符合 FIPS 的算法。所以 SHA1、MD5 和 AES 选项在那里不起作用。

              同样重要的是要认识到,如果代码中引用了任何不符合 FIPS 的算法,即使从未实际使用过/无法访问,也会导致 FIPS 合规性错误。例如,仅仅声明一个 MD5CryptoServiceProvider 变量而不实例化它会导致错误。这包括其他引用的 .NET 程序集,因此请确保没有引用的 dll 也可能使用不符合 fips 的算法。

              这是一个方便的站点,列出了 .NET 中的所有 FIPS 和非 FIPS 算法 http://blog.aggregatedintelligence.com/2007/10/fips-validated-cryptographic-algorithms.html

              【讨论】:

                【解决方案8】:

                根据this answer没有任何托管实现是经过 FIPS 认证的,用于 Cryptography 命名空间中的算法。

                使用非托管实现应该可以解决您的问题:Rijnaed 是 AES 的前身 - 不妨试试AesCng

                非托管实现的缺点是它们可能会not be compliant with older versions of windows

                【讨论】:

                  猜你喜欢
                  • 2012-11-09
                  • 1970-01-01
                  • 2019-05-06
                  • 2012-01-04
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-06-06
                  • 2014-05-10
                  • 2014-08-22
                  相关资源
                  最近更新 更多