哪個 machineKey 配置更好?
我正在研究我的 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" />哪個更好用?
AutoGenerate意味著您的密鑰自動生成一次然後儲存(由本地安全機構服務) - 換句話說,它不會在請求之間更改 - 事實上,它永遠不應該在同一台機器上更改。
IsolateApps意味著每個應用程序(ETA:大多數情況下,見下文)都有自己的驗證/解密密鑰 - 而不是機器上的所有應用程序共享一個密鑰。但是,密鑰會在第一次需要時生成並儲存,並將被所有後續請求重用。2017 年更新:添加了 ASP.NET 4.5
IsolateByAppId,與IsolateApps. 根據應用程序的虛擬目錄路徑IsolateApps為每個應用程序創建不同的密鑰。這意味著如果同一伺服器上的兩個應用程序具有相同的虛擬路徑(例如),僅通過託管在不同的埠或主機名上來區分,它們仍然會獲得相同的密鑰,即使**啟用了。將根據應用程序的. (更新結束)/IsolateAppsIsolateByAppId``AppDomainAppID但是,如果您的應用程序託管在網路場、雲中、集群上等 - 請求可能由不同的機器處理,則所有這些機器的密鑰都需要相同 - 因此 pre -第二個範例中生成的密鑰。請記住,您需要自己生成這些(並正確生成),而不是重用別人的。
**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 年已經超過“足夠好”。(因此,為什麼這首先沒有被徹底記錄)。(更新結束)