现代密码学总结第一讲绪论密码学是保障信息安全的核心安全服务包括:机密性、完整性、认证性、不可否认性、可用性一个密码体制或密码系统是指由明文(m或p)、密文(c)、密钥(k)、加密算法(E)和解密算法(D)组成的五元组。现代密码学分类:对称密码体制:(又称为秘密密钥密码体制,单钥密码体制或传统密码体制)密钥完全保密;加解密密钥相同;典型算法:DES、3DES、AES、IDEA、RC4、A5非对称密码体制:(又称为双钥密码体制或公开密钥密码体制)典型算法:RSA、ECC第二讲古典密码学代换密码:古典密码中用到的最基本的处理技巧。将明文中的一个字母由其它字母、数字或符号替代的一种方法。(1)凯撒密码:c=E(p)=(p+k)mod(26)p=D(c)=(c–k)mod(26)(2)仿射密码:明文p∈Z26,密文c∈Z26,密钥k=(a,b)ap+b=cmod(26)(3)单表代换、多表代换Hill密码:(多表代换的一种)——明文p∈(Z26)m,密文c∈(Z26)m,密钥K∈{定义在Z26上m*m的可逆矩阵}——加密c=p*Kmod26解密p=c*K-1mod26Vigenere密码:查表解答(4)转轮密码机:置换密码:将明文字符按照某种规律重新排列而形成密文的过程列置换,周期置换密码分析:统计分析法:移位密码、仿射密码和单表代换密码都没有破坏明文的频率统计规律,可以直接用统计分析法重合指数法完全随机的文本CI=0.0385,一个有意义的英文文本CI=0.065实际使用CI的估计值CI’:L:密文长。fi:密文符号i发生的数目。第三讲密码学基础第一部分密码学的信息论基础Shannon的保密通信系统模型对称密码体制发送者接收者信源分析者加密解密安全信道无噪信道安全信道MMMCKK密钥源非对称密码体制发送者接收者信源分析者加密解密无噪信道安全信道MMMCKK’密钥源无噪信道一个密码体制是一个六元组:(P,C,K1,K2,E,D)P--明文空间C--密文空间K1--加密密钥空间K2--解密密钥空间E--加密变换D--解密变换对任一k∈K1,都能找到k’∈K2,使得Dk’(Ek(m))=m,mM.熵和无条件保密0)(1log)()(iiaixpxpXH设随机变量X={xi|i=1,2,…,n},xi出现的概率为Pr(xi)≧0,且,则X的不确定性或熵定义为熵H(X)表示集X中出现一个事件平均所需的信息量(观察前);或集X中每出现一个事件平均所给出的信息量(观测后).设X={xi|i=1,2,…,n},xi出现的概率为p(xi)≥0,且∑i=1,…,np(xi)=1;Y={yi|i=1,2,…,m},yi出现的概率为p(yi)≥0,且∑i=1,…,mp(yi)=1;则集X相对于集Y的条件熵定义为X视为一个系统的输入空间,Y视为系统的输出空间,通常将条件熵H(X|Y)称作含糊度,X和Y之间的平均互信息定义为:I(X,Y)=H(X)-H(X|Y)表示X熵减少量。完善保密的(无条件保密的)密码系统(P,C,K,E,D)系统满足或第二部分复杂性理论算法计算复杂性常常用两个变量来度量:时间复杂度(计算复杂度)T和空间复杂度S假设一个算法的计算复杂度为O(nt),其中t为常数,n为输入问题的长度,则称这算法的复杂度是多项式的。具有多项式时间复杂度的算法为多项式时间算法。如果一个算法的复杂度为O(tf(n)),t为大于1的常数,f(n)是以n为自变量的多项式函数,则称该算法的复杂度是指数的。当f(n)是大于常数而小于线性函数时,称为亚指数时间算法。如果一个判定问题存在解它的多项式时间的算法,则称该问题属于P类.如果一个判定问题不存在解它的多项式时间的算法,且对于一个解答可以在多项式时间验证其是否正确,则称该问题属于NP类.第四讲分组密码DES算法整体结构:Feistel结构给定明文,通过一个固定初始置换IP来重排输入明文块P中的比特,得到比特串P0=IP(P)=L0R0,这里L0和R0分别是P0的前32比特和后32比特16轮迭代,密钥生成),(LR1-RL1iiiiiiKRf按下述规则进行16次迭代,即1≤i≤16这里是对应比特的模2加,f是一个函数(称为轮函数);16个长度为48比特的子密钥Ki(1≤i≤16)是由密钥k经密钥编排函数计算出来的.对比特串R16L16使用逆置换IP-1得到密文C,即C=IP-1(R16L16)注意:第十六轮迭代左右两块不交换分组密码的轮函数(f)长度为32比特串Ri-1作为第一输入,以长度为48比特串Ki作为第二个输入,产生长度为32比特的输出扩展置换(E盒):32位输入扩展为48位输出:按照8行6列次序排列,从32,1,2……排列,上一行的后两位一次在下一行的起始位置得到重用。1()iiERK密钥加:按位异或加,计算S盒代换:DES中唯一的非线性部分8个S盒。每个S盒输入均为6位,输出为4位。Bj=b1b2b3b4b5b6,b1b6确定行r的二进制表示,b2b3b4b5确定列c的二进制表示,行列确定唯一长度为4的二进制数字P置换:根据固定置换P(*)进行置换DES算法的密钥编排算法64比特密钥K,根据固定置换PC-1来处理K得到PC-1(K)=C0D0,C0和D0分别由最前和最后28比特组成(去除8,16,24,32,40,48,56,64这8位奇偶校验位)对1≤i≤16,DES的每一轮中使用K的56比特中的48个比特(压缩方法:删除C中的9,18,22,25位和D中的7,9,15,26位)计算Ci=LSi(Ci-1)和Di=LSi(Di-1),且Ki=PC-2(CiDi),LSi表示循环左移两个或一个位置,具体地,如果i=1,2,9,16就移一个位置,否则就移两个位置,PC-2是另一个固定的置换。DES的解密与加密使用一样的算法,以密文y作为输入,以相反顺序使用密钥编排K16,K15,…,K1,输出的是明文XDES算法的扩散两轮扩散:三轮扩散:从LO的一块数据影响开始AES算法128位(16个字)输入明文,128位密钥长度,第一次迭代前明文密钥AES算法整体结构:AES算法的轮函数——Rijndael轮函数1)字节代换(SubByte)2)行移位(ShiftRow)3)列混合(MixColumn)4)密钥加(AddRoundKey)①字节代换:字节代换是非线形变换,独立地对状态的每个字节进行,代换表(即S-盒)是可逆的S盒可以由以下两步运算得到:求输入元素在m(x)=x8+x4+x3+x+1上的逆元;对上步中所求得的逆元进行如下运算②行移位:行移位是将状态阵列的各行进行循环移位,不同状态行的位移量不同;第0行不移动;第1行左移1字节;第2行左移2字节;第3行左移3字节列混合:其中:(00000010)*(a7a6a5a4a3a2a1a0)=(a6a5a4a3a2a1a00),a7为0;=(a6a5a4a3a2a1a00)(00011011),a7为1(00000001)*(a7a6a5a4a3a2a1a0)=(a7a6a5a4a3a2a1a0)(00000011)*(a7a6a5a4a3a2a1a0)=(00000010)*(a7a6a5a4a3a2a1a0)(a7a6a5a4a3a2a1a0)密钥加:密钥加是将轮密钥简单地与状态进行逐比特异或;轮密钥由种子密钥通过密钥编排算法得到注:结尾轮函数将列混合这一步骤去掉AES算法的密钥编排算法密钥编排指从种子密钥得到轮密钥的过程,AES的密钥编排由密钥扩展和轮密钥选取两部分组成,基本原则如下:——轮密钥的总比特数等于轮数加1再乘以分组长度;((10+1)*128=1408)——种子密钥被扩展成为扩展密钥——轮密钥从扩展密钥中取,第1轮轮密钥取扩展密钥的前Nb个字,第2轮轮密钥取接下来的Nb个字密钥扩展:——每一列的4个字节组成一个字——对w数组扩充40个新列,构成总共44列扩展密钥数组,如下产生(1)如果i不是4的倍数,那么w[i]=w[i-4]w[i-1](2)若果i是4的倍数,那么w[i]=w[i-4]T(w[i-1])T为一个复杂的函数T函数由三个部分组成:字循环,字节代换和轮常量异或字循环:将1个字中的4个字节循环左移1个字节。即[b0,b1,b2,b3]变换成[b1,b2,b3,b4]字节代换:对自循环的结果使用S盒(书上P112表4-15)将前两步的结果同轮常量Rcon[j]进行异或,其中j表示轮数轮密钥的选取。。。W40W41W42W43W0W1W2W3W4W5W6W7轮密钥0轮密钥1轮密钥10。。。AES的解密变换ByteSub的逆变换由代换表的逆表做字节代换行移位运算的逆变换是循环右移,位移量与左移时相同列混合运算的逆运算是类似的,即每列都用一个特定的多项式d(x)相乘d(x)=‘0B’x3+‘0D’x2+‘09’x+‘0E’.密钥加运算的逆运算是其自身AES算法的扩散第一轮第二轮总体其他典型分组密码——SMS4算法128比特明文128比特密文Xi+3Xi+2Xi+1XiXi+3F函数X35X34X33X32初始化赋值反序变换R32轮运算F’函数rki+3rki+2rki+1rkiCKirki+4MKFK初始化赋值32轮运算128比特明文分为4个32比特字,分别赋值给四个寄存器A、B,C,D(D为最高).(,,,,)()iiFDCBArkATBCDrk432(D,C,B,)2ZA32i2rkZ进行32轮F运算,设每轮输入为寄存器当前状态值和轮密钥为,则轮函数F为:3534333232333435()()RXXXXXXXX35343332()XXXX将寄存器最右边字A的值移出,高三个字顺次右移32位,F函数的输出赋值给最左边的寄存器字D.32轮的输出进行反序变换R,然后输出密文.4123321(,,,;)()iiiiiiiiiiiFXXXXTrkrkXXXXX轮函数F以字为单位进行运算,输入寄存器值和轮密钥合成置换T:是一个可逆变换,由非线性变换τ和线性变换L复合而成,即T(.)=L(τ(.))32103210(,,,)()((),(),(),())YSboxSboxSboxSboxyyyyzzzz非线性变换τ由4个并行的S盒构成()(2)(10)(18)(24)WLYYYYYY线性变换L:密钥编排算法0131()rkrkrk,,......,加密密钥长度为128比特MK轮密钥表示为,0131CK=(......)CKCKCK,,,0123FK=()FKFKFKFK,,,为系统参数,为固定参数,用于密钥扩展算法密钥扩展算法:012301230123(,,,)=(,,,)FKFKFKFKKKKKMKMKMKMK0123(A3B1BAC6),(56AA3350),=(677D9197),(B27022DC).FKFKFKFKT’变换与加密算法轮函数中的T基本相同,只将其中的线性变换L修改为()(13)(23)LYYYY固定参数CKi的取值方法为:设为的第j字节(i=0,1,…,31;j=0,1,2,3,即则分组密码的运行模式为了能在各种场合使用DES,定义了4中DES运行模式:ECB,CBC,CFB,OFBAES的另外一种运行模式:CTRECB模式最简单的一种分组密码工作方式。一次处理一个明文分组。密文块可以分别独立解密,无顺序要求;密钥相同时,明文中相同的64比特分组产生相同的64比特密文块;不存在错误传播,一块密文传送错误只导致对应明文解密错误;主要用于发送少数量的分组数据;CBC模式先对明文分组,一次对一个明文分组加密,加密算法的输入是当前明文分组和前一次密文分组的异或.在产生第1个密文分组时,需要有一个初始向量IV与第1个