DES是一种块密码,属于对称密码算法。密钥长度为56bit,如果算上校验位可以认为是64bit,就是8字节。
在DES加密中,有一些密钥属于“弱密钥”和“部分弱密钥”,严禁在加密的过程中使用。

DES弱密钥

在DES的计算中,56bit的密钥最终会被处理为16个轮密钥,每一个轮密钥用于16轮计算中的一轮,DES弱密钥会使这16个轮密钥完全一致,所以称为弱密钥。

有四个弱密钥是绝对不能使用的:

\x01\x01\x01\x01\x01\x01\x01\x01
\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE
\xE0\xE0\xE0\xE0\xF1\xF1\xF1\xF1
\x1F\x1F\x1F\x1F\x0E\x0E\x0E\x0E

如果不考虑校验位的密钥,下面几个也是属于弱密钥的:

\x00\x00\x00\x00\x00\x00\x00\x00
\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF
\xE1\xE1\xE1\xE1\xF0\xF0\xF0\xF0
\x1E\x1E\x1E\x1E\x0F\x0F\x0F\x0F

如果使用弱密钥,PC1计算的结果会导致轮密钥全部为0,全部为1或全部01交替。
因为所有的轮密钥都是一样的,并且DES是Feistel网络的结构,这就导致加密函数是自反相(self-inverting)的,结果就是加密一次看起来没什么问题,但是如果再加密一次就得到了明文。

部分弱密钥

部分弱密钥是指只会在计算过程中产生两个不同的子密钥,每一个在加密的过程中使用8次。这就意味着这对密钥K1和K2有如下性质:
部分弱密钥性质

6个常见的部分弱密钥对

  • 0x011F011F010E010E and 0x1F011F010E010E01
  • 0x01E001E001F101F1 and 0xE001E001F101F101
  • 0x01FE01FE01FE01FE and 0xFE01FE01FE01FE01
  • 0x1FE01FE00EF10EF1 and 0xE01FE01FF10EF10E
  • 0x1FFE1FFE0EFE0EFE and 0xFE1FFE1FFE0EFE0E
  • 0xE0FEE0FEF1FEF1FE and 0xFEE0FEE0FEF1FEF1

OpenSSL中对弱密钥的检查

119 static const DES_cblock weak_keys[NUM_WEAK_KEY]={
120     /* weak keys */
121     {0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01},
122     {0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE},
123     {0x1F,0x1F,0x1F,0x1F,0x0E,0x0E,0x0E,0x0E},
124     {0xE0,0xE0,0xE0,0xE0,0xF1,0xF1,0xF1,0xF1},
125     /* semi-weak keys */
126     {0x01,0xFE,0x01,0xFE,0x01,0xFE,0x01,0xFE},
127     {0xFE,0x01,0xFE,0x01,0xFE,0x01,0xFE,0x01},
128     {0x1F,0xE0,0x1F,0xE0,0x0E,0xF1,0x0E,0xF1},
129     {0xE0,0x1F,0xE0,0x1F,0xF1,0x0E,0xF1,0x0E},
130     {0x01,0xE0,0x01,0xE0,0x01,0xF1,0x01,0xF1},
131     {0xE0,0x01,0xE0,0x01,0xF1,0x01,0xF1,0x01},
132     {0x1F,0xFE,0x1F,0xFE,0x0E,0xFE,0x0E,0xFE},
133     {0xFE,0x1F,0xFE,0x1F,0xFE,0x0E,0xFE,0x0E},
134     {0x01,0x1F,0x01,0x1F,0x01,0x0E,0x01,0x0E},
135     {0x1F,0x01,0x1F,0x01,0x0E,0x01,0x0E,0x01},
136     {0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1,0xFE},
137     {0xFE,0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1}};

有弱密钥的加密算法

  • DES
  • RC4
  • IDEA
  • Blowfish

参考资料

  • https://en.wikipedia.org/wiki/Weak_key#Weak_keys_in_DES
  • https://www.lri.fr/~fmartignon/documenti/systemesecurite/4-DES.pdf