moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:2273回复:0

详解DES算法

楼主#
更多 发布于:2002-05-29 10:33
〖Encrypt〗
 
上一篇|下一篇|回文章  分类讨论区   全部讨论区   本讨论区  
 
  发信人: Hitachi (鱼肠剑?断肠毒), 信区: Encrypt
标  题: 详解DES算法
发信站: 武汉白云黄鹤站 (2002年05月28日15:25:13 星期二), 转信

DES算法介绍
  随着电脑的普及,很多以前在纸上的东西慢慢的转变为了电脑里面的文件了,而在
这其中又有很多重要的资料,还有就是隐私都不想被别人轻易看到,这时就有必要对文
件进行加密了。由此产生了本文。
DES算法:
  DES是一个分组加密算法,他以64位为分组对数据加密。同时DES也是一个对称算法
:加密和解密用的是同一个算法。
  它的密匙长度是56位(因为每个第8位都用作奇偶校验),密匙可以是任意的56位的
数,而且可以任意时候改变。其中有极少量的数被认为是弱密匙,但是很容易避开他们
。所以保密性依赖于密匙。
算法概要:
  DES对64位的明文分组进行操作,通过一个初始置换,将明文份组成左半部分和右半
部分,各32位长。然后进行16轮完全相同的运算,这些运算被称为函数f,在运算过程中
数据于密匙结合。经过16轮候,左,右半部分合在一起经过一个末置换,这样就完成了

  在每一轮中,密匙位移位,然后再从密匙的56位中选出48位。通过一个扩展置换将
数据的右半部分扩展成48位,并通过一个异或操作替代成新的32位数据,在将其置换换
一次。这四步运算构成了函数f。然后,通过另一个异或运算,函数f的输出与左半部分
结合,其结果成为新的右半部分,原来的右半部分成为新的左半部分。将该操作重复16
次,就实现了。具体如下图。
  
……………………………………………………………..
初始置换:
  初始置换在第一轮运算之前执行,对输入分组实施如表1-2所示的变换。
表1-2 初始置换
--------------------------------------------------------------
58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4,
62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8,
57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3,
61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7,
--------------------------------------------------------------
  初始置换和对应的末置换并不影响DES的安全性。所以很多软件实现方式删去了初始
置换和末置换。尽管这种新的算法的安全性不比DES差,但他没有遵循DES标准,所以不
叫DES。
密匙置换:
  由于不考虑每个字节的第8位,DES的密匙由64位减至56位,每个字节第8位作为奇偶
校验确保密匙不发生错误。在DES每一轮中,从56位密匙产生出不同的48位子密匙,这些
子密匙Ki由下面的方式确定。
表1-3密匙置换
--------------------------------------------------------------
57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18,
10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36,
63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22,
14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4,
--------------------------------------------------------------
  首先,56位密匙本分成了两个部分,每部分28位。然后,根据论数,这两部分分别
循环左移1位或者2位。表1-4给出了每轮移动的位数。
表1-4 每轮移动的轮数
--------------------------------------------------------------
轮 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
位数 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1
--------------------------------------------------------------
  移动后,就从56位中选出48位。因为这个运算不仅置换了每位的顺序,同时也选择
了子密匙,因而被称作压缩置换。这个运算提供了一组48位的集。表1-5定义了压缩置换

表1-5 压缩置换
--------------------------------------------------------------
14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10,
23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2,
41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48,
44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32,
--------------------------------------------------------------
  因为由移动运算,在每一个子密匙中使用了不同的密匙子集的位。虽然不是所有的
位在子密匙中使用的次数都相同,但在16个子密匙中,每一位大约使用了其中14个子密
匙。
扩展置换:
  这个运算将数据的右半部分Ri从32位扩展到了48位。由于这个运算改变了位的次序
,重复了某些位,故被称为扩展置换。这个操作有两个方面的目的:它产生了与密匙通
长度的数据以进行异或运算;它提供了更长的结果,使得在替代运算时能进行压缩。由
于输入的一位将影响两个替换,所以输出对输入的依赖性将传播的更快,这叫雪崩效应

  图1-6显示了扩展置换,有时他也叫E-盒。对每个4位输入分组,第1和第4位分别表
示输出分组中的两位,而第2和第3位分别表示输出分组中的一位。表1-7给出了那一位输
出对应于那一位输入。
 
表1-7 扩建置换二
--------------------------------------------------------------
32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9,
8, 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17,
16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25,
24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1,
--------------------------------------------------------------
  尽管输出分组大于输入分组,但每一个输入分组产生唯一的输出分组。
S盒代替:
  压缩后的密匙与扩展分组异或以后,将48位的结果送入,进行代替运算。替代由8个
代替盒,或S盒完成。每一个S盒都有6位输入,4位输出,且这8个S盒是不同的。48位的
输入悲愤位8个6位分组,每一分组对应一个S盒代替操作:分组1由S盒1操作,分组2由S
盒2操作,如此进行。
表1-8
  每个S盒是一个4行,16列的表。盒中的每一项都是一个4位数。S和的6个位输入确定
了其对应的输出在那一行那一列。表1-9列出了所有8个盒。
表1-9 S盒
--------------------------------------------------------------
S盒1:
14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,
0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,
4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,
15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13,
S盒2:
15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,
3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,
0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,
13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9,
S盒3:
10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 1, 4, 2, 8,
13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,
13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,
1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 1, 5, 2, 12,
S盒4:
7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 5, 15,
13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,
10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4,
3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14,
S盒 5:
2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,
14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6,
4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14,
11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3,
S盒6:
12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,
10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8,
9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6,
4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13,
S盒7:
4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,
13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6,
1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2,
6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12,
S盒8:
13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7,
1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2,
7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8,
2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11,
--------------------------------------------------------------
  输入位以一种非常特殊的方式确定了S和盒的项。假定将S盒的6位的输入标记为
a1,a2,a3,a4,a5,a6。则a1和a2组合构成了一个2位的数,从0到3,他对应着表中的一行
。从a2,到a5构成一个4位数,从0到15,对应着表中的一列。
  例如,假设第6 个S盒的输入为110011(二进制)。第1位盒最后以位组合形成了11
,他对应着第6个S盒的第三行。中间的4位组合在一起形成了1001,他对应着同一个S盒
的第9列。S盒6的第3行第9列的数是14(注意:行、列的记数从0开始),则值1110就代
替了110011。
P盒置换:
   S盒大体运算后的32位输出依照P盒进行置换。给置换把每输入位映射到输出位,任
一位不能被映射量此。也不能被略去,这个置换叫做直接置换。表1-10给出了每位移至
位置。
表1-10 P和置换
--------------------------------------------------------------
16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10,
2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25,
--------------------------------------------------------------
  最后,将P盒置换的结果与最初的64位分组的左半部分异或,然后左、右半部分交换
,接着开始另一轮。
末置换:
  末置换是初始置换的逆过程,表1-11列出了该置换。应该注意的是DES在最后一轮后
,左半部分和右半部分并未交换,而是将R16与L16并在一起形成一个分组作为末置换的
输入。其实交换左、右两部分并循环移动,仍将获得完全相同的结果;但这样左,就使
该算法既能作加密又能解密。
表1-11 末置换
--------------------------------------------------------------
40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31,
38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29,
36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27,
34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25,
--------------------------------------------------------------
DES解密:
    在经过所有的代替、置换、异或盒循环之后,你也许认为解密算法与加密算法
完全不同。恰恰相反,经过精心选择的各种操作,获得了一个非常有用的性质:加密和
解密使用相同的算法。
  DES加密和解密唯一的不同是密匙的次序相反。如果各轮加密密匙分别是K1,K2,K3…
.K16那么解密密匙就是K16,K15,K14…K1。为各轮产生的密是的算法也是循环的。米匙想
右移动,每次移动的个数为:0,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1。
参考文献:Bruce Schneier. Applied Cryptography Protocols,algorithms,and sour
ce code in C 1996

--
   ___ ___  .___ ___________ _____   _________    ___ ___  
按第一贴的“给分”键,给分。
游客

返回顶部