共用方式為


CA5351 不要使用中斷的密碼編譯演算法

屬性
規則識別碼 CA5351
標題 請勿使用損壞的密碼編譯演算法
類別 安全性
修正程式是中斷或非中斷 不中斷
預設在 .NET 8 中啟用 No

注意

上次於 2015 年 11 月更新此警告。

原因

雜湊函式 (例如 MD5 ) 和加密演算法 (例如 DESRC2 ) 可以公開重大風險,而且可能會透過一般攻擊技巧 (例如暴力攻擊和雜湊衝突) 而導致公開機密資訊。

下列密碼編譯演算法清單是針對已知的密碼編譯攻擊。 密碼編譯雜湊演算法 MD5 是針對雜湊衝突攻擊。 根據使用方式,雜湊衝突可能會導致系統上的模擬、竄改或其他類型的攻擊,而系統依賴雜湊函式的唯一密碼編譯輸出。 加密演算法 DESRC2 是針對可能會導致非預期加密資料外洩的密碼編譯攻擊。

檔案描述

中斷的密碼編譯演算法較不安全,建議您不要使用它們。 MD5 雜湊演算法容易受到已知的衝突攻擊,但是特定的弱點會因使用的內容而不同。 用來確保數據完整性的哈希演算法(例如檔案簽章或數位證書)特別容易受到攻擊。 在這種情況下,攻擊者可能會產生兩個不同的資料部分,讓良性資料可以取代為惡意資料,而不會變更雜湊值,或讓相關聯的數位簽章失效。

針對加密演算法:

  • DES 加密包含小型的金鑰大小,這可能是少於一天的暴力攻擊。

  • RC2 加密容易受到相關金鑰攻擊,其中,攻擊者會找出所有金鑰值之間的數學關係。

如果在原始程式碼中找到任何上述的密碼編譯函式,並將警告擲回給使用者,則會觸發這個規則。

如何修正違規

使用密碼編譯較強的選項:

隱藏警告的時機

請不要隱藏這個規則的警告,除非密碼編譯專家已檢閱過它。

隱藏警告

如果您只想要隱藏單一違規,請將預處理器指示詞新增至原始程式檔以停用,然後重新啟用規則。

#pragma warning disable CA5351
// The code that's violating the rule is on this line.
#pragma warning restore CA5351

若要停用檔案、資料夾或項目的規則,請在組態檔中將其嚴重性設定為 。none

[*.{cs,vb}]
dotnet_diagnostic.CA5351.severity = none

如需詳細資訊,請參閱 如何隱藏程式代碼分析警告

虛擬程式代碼範例

下列虛擬程式代碼範例說明此規則偵測到的模式和可能的替代方案。

MD5 雜湊違規

using System.Security.Cryptography;
...
var hashAlg = MD5.Create();

解決方案:

using System.Security.Cryptography;
...
var hashAlg = SHA256.Create();

RC2 加密違規

using System.Security.Cryptography;
...
RC2 encAlg = RC2.Create();

解決方案:

using System.Security.Cryptography;
...
using (AesManaged encAlg = new AesManaged())
{
  ...
}

DES 加密違規

using System.Security.Cryptography;
...
DES encAlg = DES.Create();

解決方案:

using System.Security.Cryptography;
...
using (AesManaged encAlg = new AesManaged())
{
  ...
}