2016-05-31 947 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

相关问题