Reference-Request

在這種情況下,.NET DESCryptoServiceProvider 是否安全?

  • October 9, 2014

我有以下 .NET 程式碼(見下文)。我知道 DES 不是很安全,我看到MSDN 不推薦使用 DES,只是為了與遺留程序兼容。我還看到有人說每次加密新消息時都必須重新生成 IV。

問:程式碼的安全性如何?假設攻擊者有數百條消息和相應的密碼(並且可以獲得更多),那麼破解它並找到密鑰/IV 有多容易?怎麼可能做到?但最重要的是,如何確保它的安全?更改為 AES 會有幫助嗎?我是初學者,非常感謝任何幫助或參考。

internal static class Encryptor
{      
 private static readonly byte[] Key = { *** };
 private static readonly byte[] Iv = { *** };

 internal static String Encrypt(string source)
 {
   var des = new DESCryptoServiceProvider();
   var enc = des.CreateEncryptor(Key, Iv);
   var b = Encoding.ASCII.GetBytes(source);
   var encId = enc.TransformFinalBlock(b, 0, b.Length);
   return Convert.ToBase64String(encId);
 }

 internal static string Decrypt(string encrypted)
 {
   var des = new DESCryptoServiceProvider();
   var dec = des.CreateDecryptor(Key, Iv);
   var b = Convert.FromBase64String(encrypted);
   var decId = dec.TransformFinalBlock(b, 0, b.Length);
   return Encoding.ASCII.GetString(decId);
 }
}

DES 的密鑰空間太小(56 位)。因此,DES 的任何使用都是不安全的。使用什麼模式並不重要。如果攻擊者擁有一對明文、密文,他們可以暴力破解密鑰空間並在可行的時間內(使用雲計算24 小時)恢復密鑰。

但最重要的是,如何確保它的安全?更改為 AES 會有幫助嗎?

遷移到 AES 肯定會有所幫助。最有幫助的是首先定義所需的保護模型(即,在您的上下文中“安全”是什麼意思?)。你只關心保密嗎?你也關心誠信嗎?真實性如何?決定這一點將幫助您決定使用哪種模式。特別是,您需要MAC還是經過身份驗證的加密模式

弄清楚這一點後,請選擇符合您需求的密碼和模式,不僅是安全需求,還有性能需求。

引用自:https://crypto.stackexchange.com/questions/19547