2016-05-31 952 views
3

爲什麼此代碼返回弱密鑰錯誤Decrypting TripleDES:指定的密鑰是已知的弱密鑰,不能使用

static public byte[] TDESDecrypt(byte[] toDecrypt, byte[] key, CipherMode mode = CipherMode.ECB, PaddingMode padding = PaddingMode.None) 
{ 
    TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); 
    tdes.Key = key; 
    tdes.Mode = mode; 
    tdes.Padding = padding; 
    ICryptoTransform cTransform = tdes.CreateDecryptor(); 
    byte[] resultArray = cTransform.TransformFinalBlock(toDecrypt, 0, toDecrypt.Length); 
    tdes.Clear(); 
    return resultArray; 
} 

當我嘗試執行行 「tdes.Key =鍵」,我得到的錯誤

deriveSessionKeyIS System.Security.Cryptography.CryptographicException: 指定鍵爲一個已知的弱關鍵爲TripleDES並且不能使用

爲什麼?我想要的密鑰是隨機的,但其中一個測試密鑰是FB13347FE570DC4FFB13347FE570DC4F。哪裏有問題?

回答

3

例如,您可以在wikipedia中閱讀關於密碼學中哪些弱密鑰。對於三重DES,有一種方法(TripleDES.IsWeakKey),它檢查三重DES密鑰的弱點。在你的情況下,密鑰FB13347FE570DC4FFB13347FE570DC4F是對稱的,它的前8個字節完全等於最後8個字節。這意味着如果您使用該密鑰對某些內容進行加密,然後加密再次加密信息 - 您將恢復原始文本(因爲此具體加密算法的工作原理),這顯然是危險的。

簡而言之,.NET可以防止危險的事情導致密碼的漏洞。如果您將使用標準的GenerateKey()函數來生成密鑰(或者只是不明確地設置Key) - 將不會生成弱密鑰。

關於爲什麼這個密鑰對於三重DES較弱的信息有點多。 3DES是這樣命名的,因爲它基本上使用3個密鑰,並且對這些密鑰應用純DES加密\解密3次。每個密鑰長度爲8個字節,因此3DES密鑰大小爲8 * 3 = 24個字節。但是,算法還允許第一個和第三個密鑰相同,因此允許使用16字節密鑰(如您的示例中所示)。在這種情況下,這些16字節的前半部分被用作第三個密鑰。此選項提供較低的安全性,但仍然可行。

現在,在你的情況下,你的情況下,你的16字節鍵的前半部分和後半部分是相同的,所以所有三個將被3DES使用的鍵都是相同的。鑑於3DES是這樣工作的:

DES encrypt with 3rd(DES Decrypt with 2nd(DES Encrypt with 1st(plaintext))) 

你看你的情況,你退回到使用簡單的DES,這違背首先使用3DES的全部目的。

+0

在什麼意義上使用16字節的密鑰不被覆蓋? – Evk

+0

3DES密鑰是24個字節。 – zaph

+0

我已經將我的答案擴展了一下。 – Evk

1

這是一個弱3DES密鑰,因爲附加的8個字節將再次作爲最後的8位重複。因此3DES加密已經恢復到DES並且很弱。

3DES執行三種操作,最常見的形式是ede,數據首先用密鑰的前8個字節加密,然後用第二個8字節解密,最後用最後的8個字節加密(這在這種情況下是第一個8字節)。請注意,在前兩個操作之後,數據將返回到原始數據,因此唯一實際執行的加密是最後一次加密,即8字節,它是一個56位密鑰。這是一個弱3DES鍵。

+1

在[Keying Option 2(Sec。3.2)](http://csrc.nist.gov/publications/nistpubs/800-67-Rev1/SP-800-67-Rev1.pdf)中K3從K1複製而來。爲了參考[IsWeakKey的代碼](http://referencesource.microsoft.com/#mscorlib/system/security/cryptography/tripledes.cs,362322fbcfdb6230,references),實際上檢查K1和K2在鍵控選項2的情況下是否相等。 –

+0

感謝您挖掘參考文獻。 – zaph

相關問題