machineKey 項目 (ASP.NET 設定結構描述)

設定演算法和金鑰以用於表單驗證資料及檢視狀態資料的加密、解密和驗證,並用於跨處理序 (Out-Of-Process) 工作階段狀態識別。

<machineKey 
  validationKey="AutoGenerate,IsolateApps" [String]
  decryptionKey="AutoGenerate,IsolateApps" [String]
  validation="HMACSHA256" [SHA1 | MD5 | 3DES | AES | HMACSHA256 | 
    HMACSHA384 | HMACSHA512 | alg:algorithm_name]
  decryption="Auto" [Auto | DES | 3DES | AES | alg:algorithm_name]
/>

屬性和項目

下列各節將說明屬性、子項目和父項目。

屬性

屬性

描述

decryption

選擇性 String 屬性。

指定用於加密和解密表單驗證資料的演算法。

這個屬性可能會具有下列其中一個值:

  • Auto指定該 ASP.NET 自動判斷要使用的加密演算法。 這是這個屬性的預設值。

  • AES指定 ASP.NET 使用AES (Rijndael) 演算法來加密和解密資料。 AES是預設演算法,用於此屬性的值為 Auto 時。 這個演算法符合聯邦資訊處理標準 (FIPS)。

  • DES指定 ASP.NET 使用資料加密標準 (DES) 演算法來加密和解密資料。 包含這個演算法僅是為了配合舊版,只有在需要與 ASP.NET 早期版本相容時才應該使用它。

  • 3DES 指定 ASP.NET 使用 TripleDES 演算法 (3DES) 加密和解密資料。 包含這個演算法僅是為了配合舊版,只有在需要與 ASP.NET 早期版本相容時才應該使用它。

  • alg:algorithm_name指定 ASP.NET 使用自訂演算法加密及解密資料。 必須在衍生自 SymmetricAlgorithm 的類別中定義的加密演算法。 ASP.NET 會呼叫 SymmetricAlgorithm.Create 方法並傳入這裡所指定的演算法名稱。

decryptionKey

必要的 String 屬性。

指定用於加密和解密資料的金鑰,或是產生金鑰的程序。 當檢視狀態已加密時,這個屬性會用於表單驗證加密和解密,以及檢視狀態加密和解密。

這個屬性可能會具有下列其中一個值:

  • AutoGenerate, IsolateApps指定自動產生索引鍵。 此為預設值。 AutoGenerate 修飾詞指定 ASP.NET 產生隨機金鑰,並將它儲存在本機安全性授權 (LSA) 中。 IsolateApps 修飾詞指定 ASP.NET 使用每個應用程式的應用程式 ID 為每個應用程式產生唯一的金鑰。

  • 機碼值指定手動指派的金鑰。 您必須手動地將 decryptionKey 值設定為十六進位字元的字串,以確保整個 Web 伺服陣列中的所有伺服器都有一致的組態。 金鑰在 DES 加密中的長度應為 64 位元 (16 個十六進位字元),在 3DES 中的長度應為 192 位元 (48 個十六進位字元)。 若為AES,索引鍵可以是 128 位元 (32 個字元)、 192 位元 (48 個字元),或是 256 個位元 (64 個字元)長。 最長的金鑰會提供最大的安全性。隨機金鑰可以使用 RNGCryptoServiceProvider類別手動產生。 如需詳細資訊,請參閱How To:在 ASP.NET 2.0 中設定 MachineKey

如需詳細資訊,請參閱DecryptionKey

validation

必要的 MachineKeyValidation 屬性。

指定用來驗證資料的雜湊演算法。

預設會以 Base-64 編碼字串形式傳輸檢視狀態。 雖然編碼資料看起來難以理解,但 base 64 編碼並不安全,因為它很容易解碼。 如果您將機密資料儲存在檢視狀態中,除了驗證外,可以指定 ASP.NET 加密檢視狀態資料。 您可以為 Web 應用程式的所有頁面或選取的頁面指定檢視狀態加密。 如需此選項的資訊,請參閱ViewStateEncryptionModeRegisterRequiresViewStateEncryption().

如果您想使用檢視狀態加密,請將此屬性設為AES. 在這種情況下,decryptionKey 的值將用於加密檢視狀態資料,而且 ASP.NET 將使用HMACSHA1雜湊演算法進行資料驗證。

這個屬性可能會具有下列其中一個值。

  • AES當加密檢視狀態時,指定 ASP.NET 使用AES (Rijndael) 加密演算法來加密和解密資料。 如果為validation屬性指定此選項,會使用HMACSHA1演算法進行驗證。

  • MD5 會指定 ASP.NET 使用訊息摘要 5 (MD5) 雜湊演算法驗證資料。 包含這個演算法僅是為了配合舊版,只有在需要與 ASP.NET 早期版本相容時才應該使用它。

  • SHA1 會指定 ASP.NET 使用 HMACSHA1 雜湊演算法來驗證資料。 只有在需要將這個屬性設定為 AES 以支援檢視狀態加密時,才應該使用這個演算法。 否則,使用 HMACSHA256, HMACSHA384 或 HMACSHA512。

  • 3DES指定 ASP.NET 在檢視狀態加密時使用TripleDES(3DES) 演算法來加密和解密資料。 如果為validation屬性指定此選項,會使用HMACSHA1演算法進行驗證。 包含這個演算法僅是為了配合舊版,只有在需要與 ASP.NET 早期版本相容時才應該使用它。

  • HMACSHA256 會指定 ASP.NET 使用 HMACSHA256 雜湊演算法來驗證資料。 此為預設值。 這個演算法符合美國聯邦資訊處理標準 (FIPS)。

  • HMACSHA384 會指定 ASP.NET 使用 HMACSHA384 雜湊演算法來驗證資料。 這個選項可供所需安全性比 HMACSHA256 演算法提供之安全性更強大的應用程式使用。 這個演算法符合聯邦資訊處理標準 (FIPS)。

  • HMACSHA512 會指定 ASP.NET 使用 HMACSHA512 雜湊演算法來驗證資料。 這個選項可供所需安全性比 HMACSHA384 演算法提供之安全性更強大的應用程式使用。 這個演算法符合聯邦資訊處理標準 (FIPS)。

  • alg:algorithm_name  指定 ASP.NET 使用自訂演算法。 前置詞 "alg:" 後面會跟隨衍生自 KeyedHashAlgorithm 之類別的名稱。 ASP.NET 會呼叫 Create() 方法並傳入這裡所指定的演算法名稱。

validationKey

必要的 String 屬性。

指定用來驗證資料的金鑰,或是產生金鑰的處理序。 validationKey 值也可用來產生跨處理序和應用程式特定的工作階段 ID,以確保工作階段狀態變數會在工作階段之間隔離。

這個屬性可能會具有下列其中一個值:

  • AutoGenerate, IsolateApps指定自動產生索引鍵。 此為預設值。 AutoGenerate 修飾詞指定 ASP.NET 產生隨機金鑰,並將它儲存在本機安全性授權 (LSA) 中。 IsolateApps 修飾詞指定 ASP.NET 使用每個應用程式的應用程式 ID 為每個應用程式產生唯一的金鑰。

  • 機碼值指定手動指派的金鑰。 您必須手動地將 validationKey 值設定為十六進位字元的字串,以確保整個 Web 伺服陣列中的所有伺服器都有一致的組態。 金鑰的長度取決於所使用的雜湊演算法:

    • AES 需要 256 位元金鑰 (64 個十六進位字元)。

    • MD5 需要 128 位元金鑰 (32 個十六進位字元)。

    • SHA1 需要 160 位元金鑰 (40 個十六進位字元)。

    • 3DES 要求 192 位元的金鑰 (48 個十六進位字元)。

    • HMACSHA256 需要 256 位元金鑰 (64 個十六進位字元)。

    • HMACSHA384 需要 384 位元金鑰 (96 個十六進位字元)。

    • HMACSHA512 需要 512 位元金鑰 (128 個十六進位字元)。

    可以透過使用 RNGCryptoServiceProvider類別手動產生隨機金鑰。 如需詳細資訊,請參閱How To:在 ASP.NET 2.0 中設定 MachineKey。 本主題不會列出 HMACSHA256、HMACSHA384 或 HMACSHA512 演算法。 不過,流程也適用於這些演算法,只要您指定正確的索引鍵長度即可。

如需詳細資訊,請參閱ValidationKey

子項目

無。

父項目

項目

描述

configuration

指定 Common Language Runtime 和 .NET Framework 應用程式所使用之每個組態檔中需要的根項目 (Root Element)。

system.web

指定組態檔中 ASP.NET 組態設定的根項目,並包含會設定 ASP.NET Web 應用程式以及控制這些應用程式之行為的組態項目。

備註

下列程式碼範例示範如何將 validationKey 和 decryptionKey 屬性都設定為 AutoGenerate。 isolateApps 值的指定可為伺服器上的每個應用程式產生唯一金鑰。

<machineKey 
    validationKey="AutoGenerate,IsolateApps" 
    decryptionKey="AutoGenerate,IsolateApps" 
/>

下列程式碼範例示範如何設定 validationKey 屬性和 decryptionKey 屬性,以手動產生隨機值。 validationKey 屬性在 HMACSHA256 雜湊演算法下設定為 256 位元長的金鑰,而 decryptionKey 屬性也在 AES 加密演算法下設定為可能最長的 256 位元金鑰。 這些都只能當做範例,不可實際在您的應用程式中使用。

<machineKey 
    validationKey="32E35872597989D14CC1D5D9F5B1E94238D0EE32CF10AA2D2059533DF6035F4F" 
    decryptionKey="B179091DBB2389B996A526DE8BCD7ACFDBCAB04EF1D085481C61496F693DF5F4" 
/>

請參閱

工作

逐步解說:使用受保護的組態加密組態資訊

HOW TO:使用位置設定來設定特定的目錄

HOW TO:鎖定 ASP.NET 組態設定

參考

system.web 項目 (ASP.NET 設定結構描述)

configuration 項目 (一般設定結構描述)

System.Configuration

System.Web.Configuration

MachineKeySection

MachineKey

概念

跨應用程式的表單驗證

設定角色的安全性

保護成員資格的安全

保護設定檔屬性

設定工作階段狀態的安全性

ASP.NET 組態檔階層架構和繼承

保護 ASP.NET 組態

ASP.NET 組態案例

其他資源

一般組態設定 (ASP.NET)

ASP.NET 組態設定

ASP.NET 網站管理

ASP.NET 組態 API