DES弱密钥

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


TOP