文档详情

DES加密算法..doc

发布:2016-12-27约1.8万字共32页下载文档
文本预览下载声明
DES加密算法 DES全称Data Encryption Standard,即数据加密标准,是一种使用秘钥加密的分组加密算法。 DES加密算法的入口参数有三个Key、Data、Mode。其中key为7个字节共56位,是DES算法工作的秘钥;Data为8个字节64位,是被加密或解密的数据的一个分组;Mode是DES的工作方式,有两种:加密或解密。 DES是一个十六轮的Feistel型密码(1),它的分组长度为64比特(当明文的长度不为64的整数倍时需要做填充,但可能会引起数据扩展(2)),用一个56比特的秘钥来加密一个64比特明文串,获得一个64比特的密文串。DES的加密过程可以分为三个部分:初始置换IP,十六轮的迭代函数,最后的逆置换。其中十六轮的迭代函数是核心;置换IP及逆置换仅仅打乱原文(明文或未完全加密的密文)的坐标顺序,不具有密码学意义。 DES的加密过程 1、对64位分组明文进行初始置换IP。将置换后的明文记为 ,其中表示置换后64位的左侧32位,表示右侧32位。 2、计算16轮的迭代函数。我们可以根据公式 来计算第i轮的,其中表示按位做异或运算,f是一个函数,是第i轮的秘钥(i=1,2…16)。 3、对得到的密文做逆置换记y=。 步骤2中函数f的定义 函数f的示意图(示意图画的很奇怪,找到合适的工具,重新画。) 函数f的具体实施步骤:迭代过程中每一轮的输入是上一轮的输出。E是一个扩充置换,将32位的A扩充为48位(3)。在每一轮迭代中A是该轮输入的右侧32位。J是48位的子秘钥,由子秘钥生成函数生成(见后面内容),每一轮的子秘钥均不相同。A经过扩充置换后的E(A)与子秘钥J经过异或得到8个S盒(4)B1B2B3B4B5B6B7B8的输入,每一个S盒将六位的输入转换为四位输出。S盒是DES 加密算法中唯一的非线性部分,S盒的复杂度决定DES的安全性。 S盒的转换规则:S盒是由四行十六列64个数字构成每行由0-15的数字构成。假设S盒的输入s1s2s3s4s5s6(均为二进制比特流),s1s6构成的二进制数决定输出的行s2s3s4s5构成的二进制数决定输出的列,行列交点处的数转换为二进制即可得到要输出的四位数。 子秘钥的生成:初始秘钥是64位,通过置换PC1(5)将64位初始秘钥紧缩为56位(省去了八个奇偶校验位,它们分别为第8,16,24,32,48,56,64位)。将56位秘钥等分为两部分记为,再分别做循环左移(在1,2,9,16轮左移一位,其余轮循环左移位。将循环左移后的秘钥再经置换选择二得到最终的秘钥(当轮)而循环左移后的56位秘钥可以作为下一轮的输入秘钥。 初始的64位秘钥由秘钥生成器生成。我没有找到关于DES初始秘钥生成器的资料只找到了关于流密码的秘钥生成器的相关资料。流密码的秘钥由有限状态自动机生成,有限状态自动机由有限状态自动集、有限输入\输出字符集、转移函数三部分构成,可以分成线性部分及非线性部分的组合。即:线性部分控制生成器的状态转移,并为非线性部分提供统计性能良好的序列;非线性组合部分则利用这些序列产生秘钥流序列。其线性部分大多由一个或多个线性反馈移位寄存器组成,非线性部分主要有四种有多个线性反馈移位寄存器驱动的非线性序列生成器:Geffe序列生成器、J-K触发器、pless生成器、钟控序列生成器组成。 S盒的设计要求 1、S盒的输出都不是其输入的线性或仿射函数(保证了S盒的非线性); 2、改变S盒的一个输入比特其输出至少有两个比特产生变化,即近一半产生变化; 3、当S盒的任一输入保持不变,其它5位输入变化时(共有=32种),输出中0,1的总数近于相等。(满足随机性)。 DES的解密算法 DES的解密算法与加密算法共用相同的算法过程,即使用相同的方法完成加密和解密,两者的不同之处仅在于解密时将64位密文作为输入及子秘钥Ki的使用顺序与加密时相反。(真的这么简单吗?请写程序检验!!!) 注释: Feistel 网络:将n bit明文分成左右各半,长为n/2bit每段。分别以L和R表示。然后进行多伦迭代,其中第i轮迭代输出为第i-1轮输出的函数(因为第i轮的输入为第i-1轮的输出)。其中,Ki是第i轮的子秘钥,f是任意密码的轮函数。它保证了加密和解密用同一算法实现。Feistel加密过程:对于密文()将i有n向0进行,即:i=n,n-1,…,0再对密文进行加密算法的逆向操作。 由于分组长度不为64比特因此用0、1填充,填充后数位会扩展。 扩充置换E:将输入的32位扩展为48bit输出 令S表示E原输入数据bit的原下标,则E的输出 将原下标S=0或S=1(mod4)的各比特重复一次得到 即对原第32、1、4、5、8、9、12、13、16、17、20 21、24、25、28、29各位都重复一次
显示全部
相似文档