ASP.NET 2.0 RijndaelManaged加密算法与FIPS的比较

7
我在一个ASP.NET 2.0应用程序中遇到了问题。我们的网络人员刚刚提高了我们的安全性,现在每当我尝试访问该应用程序时,就会收到以下错误:
"This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms."
我做了一些研究,听起来像是ASP.NET使用RijndaelManaged AES加密算法来加密页面的ViewState...而RijndaelManaged在不符合FIPS标准的算法列表上。我们肯定没有明确调用任何加密算法...更不用说非符合标准的算法了。
这个ViewState的业务对我来说有意义,但我搞不清楚该怎么办。我找到了一篇KB文章,建议使用web.config设置指定不同的算法...但是要么那没生效,要么那个算法也不符合要求。
所以:
1)RijndaelManaged / ViewState的问题是否真的是问题?还是我在瞎扯?

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

谢谢!

Richard

8个回答

5

请仔细检查您的Web.config文件中是否存在<compilation debug="true" />。当启用调试编译时,.NET会使用MD5哈希进行一些内部簿记。因为MD5不符合FIPS标准,所以会出现此错误。


2
关于您的第二个问题:也许这篇MSDN文章可以帮助您。
根据文档,您可以像这样配置加密算法: 对于验证,您可以使用以下之一: [SHA1 | MD5 | 3DES | AES]
对于解密,您可以使用以下之一: [Auto | DES | 3DES | AES]
因此,为了符合FIPS标准,您可能会使用3DES(尽管理论上不太安全)。

2

来源: 链接

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

<configuration>   

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

您可以在此处找到machine.config文件: \Microsoft.NET\Framework<version>\config\machine.config

如果更改了machine.config文件,则可能需要进行iisreset操作才能使设置生效。请注意:更改maching.config将影响系统上的所有.NET应用程序。


要使您的应用程序符合FIPs标准,而无需禁用FIPs,您可以尝试以下方法:

  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>

注意:如果您正在使用Web农场环境,可以使用IIS GUI并转到Machine Keys配置部分生成一组密钥,并在整个Web农场中使用相同的密钥。

  1. 确保编译debug =“false”,并且所有页面指令都有debug =“false”。将debug设置为true还会启动FIPs合规性检查。

1

虽然并不是非常相关,也不值得被评为-1,无论你是谁——所以通过点赞来平衡(如果那个-1的人回来解释了,我很乐意取消我的点赞)。 (链接解释了这些网络人员首先如何打开此策略) - Ruben Bartelink

0
一些网站,如SharePoint网站,在web config中已经有SHA1机器密钥,因此请检查是否已经存在算法,如果存在,请删除并添加上述内容。

0
根据这个答案,Cryptography 命名空间中的算法没有受到 FIPS 认证的托管实现
使用非托管实现应该可以解决您的问题:Rijnaed 是 AES 的前身 - 也许尝试一下 AesCng
非托管实现的缺点是它们可能不符合旧版本的 Windows

0

我们尝试了您建议的machineKey。 它对一些Web应用程序有所帮助(当与配对时),这很棒,但并非所有应用程序都如此,这令人沮丧。

我似乎漏掉了什么,但我无法确定是什么。


0

根据我看到的情况,视图状态机密钥和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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接