我们是否有任何库或任何机制,我们可以使用真正的7字节的DES密钥而不是8字节密钥。我需要它用于DES中的密钥分析,而关联库的8字节密钥要求在获取实际密钥分析时会产生问题。
发布于 2014-04-24 19:02:27
正如在Standard中所解释的,DES的8字节密钥只是一个56位的密钥(8字节),并添加了奇数奇偶校验:
该密钥名义上存储或传输为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字节的密钥。因此,可以很容易地生成包装器,使一种关键格式的库看起来像另一种格式的库,或者您有其他我没有注意到的问题吗?
发布于 2014-04-24 19:05:27
在DES中,键由8个字节组成,LSB为奇偶校验位,这是一个很好的规则结构。这意味着输入字节和置换选择1之间的关系,后者加载两个28位C和D寄存器。
在NBS标准中,永久选择是一种选择排列,而不是使用更大整体的所有值。
历史上,任何使用7个字节的DES实现都是不兼容的,因为有几个FIPS/Nist酒吧指定密钥/密文/明文三胞胎。
如果您需要一个表示键的56位数,那么就意味着您正在使用或以表格的方式存储它们。否则,您可以简单地保证奇偶位是正确的,或者说'0‘。“打包”密钥只对节省存储空间感兴趣。
如果您需要一个代表键的56位数字,那么您可以用64位值表示8字节的密钥,并且在确定了与endian相关的奇偶位位置之后,将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值索引。
发布于 2014-04-24 20:25:46
我试着编辑pyDes库代码,我只取了7个字节键,然后通过将'0‘填充到每8位位的每一个多个位置将其转换回64位。因此,对算法实际需要的7字节键的分析有望得到,奇偶校验位被取为0(现在与我的密钥无关) :)。如果我的密钥仍然不是只用于DES算法,请评论。
https://stackoverflow.com/questions/23272959
复制相似问题