10

我正在研究我的 Web 应用程序安全性,想知道我是否使用它:

 <machineKey validationKey="AutoGenerate,IsolateApps" 
 compatibilityMode="Framework45"  decryptionKey="AutoGenerate,IsolateApps" 
 validation="SHA1"/>

在我的 web.config 中,现在第一个用户向我的站点发送第一个请求,此时将创建validationKey,然后第二个用户发送第二个请求,现在将再次创建validationkey 还是什么?

所有用户的这些验证键是否相同?

那个配置和这个有什么区别?

<machineKey compatibilityMode="Framework45"  
 validationKey="37BAD4B702C65CF39B1ED514AC4B3D88990DDF784AA0895659
 B528ED95F8CA0A9CD1AF5ED92A2599362684CB8D204AC30D07E6BF0CF65194A5129" 
 decryptionKey="B450FB3271C49E6BA89A0C5C8D06B61875BCE4916A40474ED" 
 validation="SHA1" decryption="AES" />

哪个更好用?

4

1 回答 1

17

AutoGenerate意味着您的密钥自动生成一次然后存储(由本地安全机构服务) - 换句话说,它不会在请求之间更改 - 事实上,它永远不应该在同一台机器上更改。

IsolateApps意味着每个应用程序(ETA:大多数情况下,见下文)都有自己的验证/解密密钥 - 而不是机器上的所有应用程序共享一个密钥。但是,密钥会在第一次需要时生成并存储,并将被所有后续请求重用。

2017 年更新:添加了 ASP.NET 4.5 IsolateByAppId,与IsolateApps. 根据应用程序的虚拟目录路径IsolateApps为每个应用程序创建不同的密钥。这意味着如果同一服务器上的两个应用程序具有相同的虚拟路径(例如),仅通过托管在不同的端口或主机名上来区分,它们仍然会获得相同的密钥,即使启用了。将根据应用程序的. (更新结束)/IsolateAppsIsolateByAppIdAppDomainAppID

但是,如果您的应用程序托管在网络场、云中、集群上等 - 请求可能由不同的机器处理,则所有这些机器的密钥都需要相同 - 因此 pre -第二个示例中生成的密钥。请记住,您需要自己生成这些(并正确生成),而不是重用别人的。

这是使用 IIS 7 生成密钥的简单方法

ETA:为避免链接失效,以下是上述链接的概要:IIS 7 及更高版本在 IIS 管理器 UI 中包含机器密钥生成:在Machine Key您的网站(在 ASP.NET 部分中找到)下,您将Generate Keys在操作面板。这使用 RNGCryptoServiceProvider 为您生成解密和验证密钥。

(曾几何时,显然SQLMembershipProvider会抱怨自动生成的密钥 - 但只是为了避免上述问题,如果应用程序最终不应该托管在单个服务器上)。

如果上述情况不适用于您,Microsoft 建议使用默认值 - 即:

  • 如果您的应用程序托管在单个服务器上:使用AutoGenerate,IsolateApps
  • 如果您的应用程序位于网络场/云服务/集群网络上:使用手动生成的密钥。

(您还在第二个示例中将“AES”指定为解密算法,但由于 AES 是默认算法,因此两者之间没有区别)。

2017 年更新:我为什么要使用 IsolateApps(和/或 IsolateByAppId)?

问题应该是,你为什么呢?默认开启。原因是没有它的主机并托管多个应用程序,每个应用程序都会获得相同的密钥,如果您无法控制所有应用程序(例如共享主机),这不是最佳方案。

它是否有缺点(除了对网络场/云/集群无用)?是的,有点。IsolateApps将 dncryption 密钥的熵减少 32 位(从 192 位到 160 位),因为 32 位密钥将是您的虚拟目录的哈希值,攻击者知道该哈希值(例如,如果您的应用程序位于域的根,这 32 位将是4e ba 98 b2.IsolateByAppId将其进一步减少 32 位到 128 位。

这使您得到的(基本上)相当于 128 位 AES 而不是 192 位 AES 的解密密钥。类似地,验证密钥将从 256 位的熵减少到 192 位。

免责声明:以下段落在密码学中说起来很危险,因此,如果您正在从事安全关键工作,请进一步研究它而不是相信它 - 特别是如果您正在使用具有未来十年信息价值的数据的密钥.

无论如何:如果您不知道上述熵减少的含义,那么这些含义不太可能会咬到您。AES 的 128 位安全性和验证密钥(哈希)的 192 位熵在 2017 年已经超过“足够好”。(因此,为什么这首先没有被彻底记录)。(更新结束)

于 2013-08-22T18:50:08.570 回答