- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PKI相关密码体系学习总结
PKI相关密码体系学习总结
王文路
前言
1883年荷兰语言学家和密码学家Dr. Auguste Kerckhoffs发表了著名的Kerckhoff原则,就是密码系统的安全性只能依赖于密钥,不能依赖于算法或者系统的任一部分。
对称密钥算法
对称密钥算法(Symmetric-key algorithms)指的是通信双方都掌握一个密钥,加解密都由这个密钥完成的密码算法。对称加密算法分为分组密码(block cipher也叫块状密码)算法和序列密码(stream cipher也叫做流密码)算法。分组密码算法中几个主要的是:DES算法、3DES算法、R5算法、AES算法和IDEA算法;序列密码算法中几个主要的是:R4算法和SSF33算法(国家商密)。
DES算法
产生背景
1973年5月15日,当时美国的国家标准局(NBS)就是现在的美国国家标准与技术研究所(NIST)在《联邦公报》上公开征集标准密码算法,他们制定了一系列的设计准则,除了安全性,易于理解,适合应用,可以出口等等以外,最重要的是算法的安全性必须依赖于密钥,而不依赖于算法,这个即著名的Kerckhoffs原理的观点。是这次的结果不尽人意,1874年8月同样的机构在同样的地方以同样的方式发布了同样的内容,最后他们收到了一个来自IBM的算法就是后来的DES,这个算法由同样来自IBM的算法Lucifer(路西法)发展而来,这群发明这个算法的IBM的人员中,有个叫做Horst Feiste,他出生在柏林,二战时期来到美国,以他名字命名的分组密码著名的Feistel网络结构(一种设计分组密码的通用构造)。
而这个算法被改进之后成为DES(Data Encryption Standard数据加密标准)的算法。
算法描述
对称密码算法的算法描述相对较长,但是阅读算法的数学知识使用较少。DES是对64位的明文块进行加密。加密过程分为四步:生成子密钥(subkey)、明文的初始置换、经过加密函数(S盒和P盒)、末置换。
首先理解一个概念:置换。有一组数据要经过置换表的置换生成一组新数据,例子如下:
2 1 4 6 5 3
一组数据为010110,置换表为,然后经过置换后的数据的第一位是原数据的第二位就是1,第三位是原数据的第四位就是1,这样经过置换之后的数据就是101010,这样置换就完成了,下面我们进行DES的加密过程。
一、生成子密钥
DES使用的密钥也是64位的数(就是01001……这样的数值)。
去掉每个字节的第八位,因为每个第八位是用于奇偶校验的(parity check bits),经过一个密钥选择(这里是一个置换,所谓的PC-1)得到一个56位的值(那些第八位都去掉了);
将这个56位的值分成前后28位,按照移位表(这个表只有16个值,为1122222212222221)各进行前后1或2位的16轮移动,每次移动的结果都进行合并得到16组56位的值;
对这16组56位的值分别进行压缩置换(所谓的PC-2,一种置换按照表里的位置放置数据,没有提到的数据将被略去,这个表是48个项的表,,有8个位置没有在这个表中列出)得到16组48位的数,就是16组48位的子密钥K1、K2、…K16(这里从1开始计)。
二、明文的初始置换(initial permutation,IP置换)
现在开始对明文进行操作,对64位的明文按照IP置换表进行置换得到的还是64位的数据(这里没有什么奇偶校验的东西),然后把这个值分成左32位和右32位的两个值L0和R0,这里的数字0(第一个不是1 而是0)代表对明文经过IP置换后进行的16轮重复运算的第1轮。之前我们计算得到的16个子密钥k1、k2、…k16将按照轮数参加到各轮的计算中。
三、经过加密函数F的运算
F意思指Feistel网络(见1.1.3)中的函数,F的输入为Ri-1和子密钥Ki。
扩展置换
先对Ri-1 (32位)进行扩展置换,规则如下:先对这32位进行4位4位的分组,每个4位输入分组的第1位和第4位分别表示输出分组的两位,而第2、3位表示一位,这句话不好理解,通俗点讲就是第1位和第4位重复两次,例如序号1 2 3 4 输出后为 1 1 2 3 4 4这样扩展之后32位的Ri-1变成了48位,然后将这48位的输出值与子密钥Ki(它也是48位)进行异或运算(运算符号为⊕),得到的结果要进行S盒(substitution boxes)替代。
S盒替代
这里经过与Ki异或后的48位值进行分组,以6个为一组,自然分8组,对应着8个S盒进行操作,这里8个S盒每个S盒是个4行16列的替代表,给个例子:
S盒6(第6个S盒):
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
文档评论(0)