我们是否有任何库或任何机制可以使用真正的7字节密钥代替8字节密钥。我需要它用于DES中的密钥分析,并且关联库的8字节密钥要求在获得实际密钥分析时产生问题。
答案 0 :(得分:2)
如http://en.wikipedia.org/wiki/Data_Encryption_Standard中所述,DES的8字节密钥只是8字节的56位密钥,添加了奇校验:
密钥名义上存储或传输为8个字节,每个字节具有奇校验。根据ANSI X3.92-1981,第3.5节:
One bit in each 8-bit byte of the KEY may be utilized for error detection in key generation, distribution, and storage. Bits 8, 16,..., 64 are for use in ensuring that each byte is of odd parity.
(结束语)
因此,给定一个8字节密钥,我可以通过丢弃奇偶校验位并重新格式化来生成7字节密钥,并且给定7字节密钥,我可以通过重新格式化和添加奇偶校验位来生成8字节密钥。因此,应该很容易制作包装器,使一个键格式的库看起来像另一个库的库 - 或者你还有其他问题我没有被注意到吗?
答案 1 :(得分:1)
在DES中,一个密钥由8个字节组成,LSB是一个奇偶校验位,一个漂亮而规则的结构。对于输入字节和置换选择1之间的关系有一个含义,即加载两个28位C和D寄存器。
按照NBS标准的说法,置换选择是一种选择排列,而不是使用更大整体的所有值。
历史上,任何使用7个字节的DES实现都不兼容,其中有几个FIPS / Nist pubs指定密钥/密文/明文三元组。
如果您需要一个代表密钥的56位数字,那么您将以表格方式使用或存储它们。否则,你可以简单地保证奇偶校验位是正确的或者说'' 0'。 '盒装'密钥只对节省存储空间感兴趣。
如果您需要一个代表密钥的56位数字,您可以在64位值中表示8个字节的密钥,并在识别出与字节序相关的奇偶校验位位置后,移位64位数组值在64位机器上的8次操作中一次删除一个奇偶校验位,留下56'有效'关键位。
在32位或更小的机器上,您还必须跟踪字节位置以跟踪位移偏移,并且必须处理在字节之间移动的位以将位打包为7个字节。
对于32位机器,您可以将两个32位值以相反的方向打包成28位,然后将第二个的正确4位合并为第一位,然后将第二个值向下移位8位。
对于字节编号系统1到8中的大端位,位8,LSB(来自标准) 位1-4进入C寄存器,输入键的8个连续字节中只有4位4值(描述为位输入数组)。 D块共享位4并使用位5-7来导出28位:
这里更大的问题可能是能够根据对处理8字节键表示的键有用的键来传达任何有趣的发现。具有反函数也可能很方便。
圆形键与C和D连接块之间也存在关系,如Carl Meyers和Stephen Metyas所着,“密码学,计算机安全的新维度”,副标题为' ;安全系统设计与实施指南',Wiley Interscience,1982,ISBN-0-471- 04892-5。
我使用原始BSD libcrypt源的衍生物重新创建了表。这一点的重要性在于C和D位不会混合从置换选择2(在表格的第16轮中的选定密钥(KS)中可见)的两个24位值。
Bit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
KS
1 15 18 12 25 2 6 4 1 16 7 22 11 24 20 13 5 27 9 17 8 28 21 14 3
2 16 19 13 26 3 7 5 2 17 8 23 12 25 21 14 6 28 10 18 9 1 22 15 4
3 18 21 15 28 5 9 7 4 19 10 25 14 27 23 16 8 2 12 20 11 3 24 17 6
4 20 23 17 2 7 11 9 6 21 12 27 16 1 25 18 10 4 14 22 13 5 26 19 8
5 22 25 19 4 9 13 11 8 23 14 1 18 3 27 20 12 6 16 24 15 7 28 21 10
6 24 27 21 6 11 15 13 10 25 16 3 20 5 1 22 14 8 18 26 17 9 2 23 12
7 26 1 23 8 13 17 15 12 27 18 5 22 7 3 24 16 10 20 28 19 11 4 25 14
8 28 3 25 10 15 19 17 14 1 20 7 24 9 5 26 18 12 22 2 21 13 6 27 16
9 1 4 26 11 16 20 18 15 2 21 8 25 10 6 27 19 13 23 3 22 14 7 28 17
10 3 6 28 13 18 22 20 17 4 23 10 27 12 8 1 21 15 25 5 24 16 9 2 19
11 5 8 2 15 20 24 22 19 6 25 12 1 14 10 3 23 17 27 7 26 18 11 4 21
12 7 10 4 17 22 26 24 21 8 27 14 3 16 12 5 25 19 1 9 28 20 13 6 23
13 9 12 6 19 24 28 26 23 10 1 16 5 18 14 7 27 21 3 11 2 22 15 8 25
14 11 14 8 21 26 2 28 25 12 3 18 7 20 16 9 1 23 5 13 4 24 17 10 27
15 13 16 10 23 28 4 2 27 14 5 20 9 22 18 11 3 25 7 15 6 26 19 12 1
16 14 17 11 24 1 5 3 28 15 6 21 10 23 19 12 4 26 8 16 7 27 20 13 2
Bit 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
KS
1 42 53 32 38 48 56 31 41 52 46 34 49 45 50 40 29 35 54 47 43 51 37 30 33
2 43 54 33 39 49 29 32 42 53 47 35 50 46 51 41 30 36 55 48 44 52 38 31 34
3 45 56 35 41 51 31 34 44 55 49 37 52 48 53 43 32 38 29 50 46 54 40 33 36
4 47 30 37 43 53 33 36 46 29 51 39 54 50 55 45 34 40 31 52 48 56 42 35 38
5 49 32 39 45 55 35 38 48 31 53 41 56 52 29 47 36 42 33 54 50 30 44 37 40
6 51 34 41 47 29 37 40 50 33 55 43 30 54 31 49 38 44 35 56 52 32 46 39 42
7 53 36 43 49 31 39 42 52 35 29 45 32 56 33 51 40 46 37 30 54 34 48 41 44
8 55 38 45 51 33 41 44 54 37 31 47 34 30 35 53 42 48 39 32 56 36 50 43 46
9 56 39 46 52 34 42 45 55 38 32 48 35 31 36 54 43 49 40 33 29 37 51 44 47
10 30 41 48 54 36 44 47 29 40 34 50 37 33 38 56 45 51 42 35 31 39 53 46 49
11 32 43 50 56 38 46 49 31 42 36 52 39 35 40 30 47 53 44 37 33 41 55 48 51
12 34 45 52 30 40 48 51 33 44 38 54 41 37 42 32 49 55 46 39 35 43 29 50 53
13 36 47 54 32 42 50 53 35 46 40 56 43 39 44 34 51 29 48 41 37 45 31 52 55
14 38 49 56 34 44 52 55 37 48 42 30 45 41 46 36 53 31 50 43 39 47 33 54 29
15 40 51 30 36 46 54 29 39 50 44 32 47 43 48 38 55 33 52 45 41 49 35 56 31
16 41 52 31 37 47 55 30 40 51 45 33 48 44 49 39 56 34 53 46 42 50 36 29 32
这几乎说明你的56位数字应该从C和D寄存器值连接起来,因此与圆键有明显的关系,同时允许你根据C和/或D值进行索引。
答案 2 :(得分:0)
我尝试编辑pyDes库代码我只需要7字节密钥,然后通过填充' 0'转换回64位。到位的第8位的每个倍数。因此,希望获得算法实际需要的7字节密钥的分析,并将奇偶校验位取为0(现在与我的密钥无关):)。如果我的密钥仍不仅仅用于DES算法,请发表评论..