现代密码学总结第一讲绪论•密码学是保障信息安全的核心•安全服务包括:机密性、完整性、认证性、不可否认性、可用性•一个密码体制或密码系统是指由明文(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 = c mod (26)(3)单表代换、多表代换Hill密码:(多表代换的一种)——明文p ∈(Z26)m,密文c ∈(Z26)m,密钥K ∈{定义在Z26上m*m的可逆矩阵}——加密c = p * K mod 26 解密p = c * K-1 mod 26Vigenere密码:查表解答(4)转轮密码机:•置换密码•••:将明文字符按照某种规律重新排列而形成密文的过程列置换,周期置换•密码分析:•统计分析法:移位密码、仿射密码和单表代换密码都没有破坏明文的频率统计规律,可以直接用统计分析法•重合指数法• 完全随机的文本CI=0.0385,一个有意义的英文文本CI=0.065• 实际使用CI 的估计值CI ’:L :密文长。
fi :密文符号i 发生的数目。
第三讲 密码学基础第一部分 密码学的信息论基础• Shannon 的保密通信系统模型发送者接收者信源分析者加密解密安全信道无噪信道安全信道MM MCK K密钥源发送者接收者信源分析者加密解密无噪信道安全信道MM MC KK ’密钥源无噪信道•一个密码体制是一个六元组:(P, C, K 1, K 2, E, D )P--明文空间 C--密文空间 K 1 --加密密钥空间K2 --解密密钥空间E --加密变换D --解密变换对任一k∈K1,都能找到k’∈K2,使得D k’ (E k (m))=m,m M. •熵和无条件保密•)(1log)()(≥=∑i iaixpxpXH设随机变量X={xi | i=1,2,…,n}, xi出现的概率为Pr(xi) ≧0, 且, 则X的不确定性或熵定义为熵H(X)表示集X中出现一个事件平均所需的信息量(观察前);或集X中每出现一个事件平均所给出的信息量(观测后).•设X={x i|i=1,2,…,n}, x i出现的概率为p(x i)≥0,且∑i=1,…,n p(x i)=1;Y={y i|i=1,2,…,m}, y i出现的概率为p(y i)≥0,且∑i=1,…,m p(y i)=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(n t),其中t为常数,n为输入问题的长度,则称这算法的复杂度是多项式的。
具有多项式时间复杂度的算法为多项式时间算法。
•如果一个算法的复杂度为O(t f(n)),t为大于1的常数,f(n)是以n为自变量的多项式函数,则称该算法的复杂度是指数的。
当f(n)是大于常数而小于线性函数时,称为亚指数时间算法。
•如果一个判定问题存在解它的多项式时间的算法,则称该问题属于P类.如果一个判定问题不存在解它的多项式时间的算法,且对于一个解答可以在多项式时间验证其是否正确,则称该问题属于NP类.第四讲分组密码•DES算法•整体结构:Feistel结构• 给定明文,通过一个固定初始置换IP 来重排输入明文块P 中的比特,得到比特串P0=IP(P)=L0R0,这里L0和R0分别是P0的前32比特和后32比特 • 16轮迭代,密钥生成),(L R 1-R L 1i i i i i i K R f -⊕==按下述规则进行16次迭代,即1≤i ≤16 ⊕这里 是对应比特的模2加,f 是一个函数(称为轮函数);16个长度为48比特的子密钥K i (1≤i ≤16)是由密钥k 经密钥编排函数计算出来的.• 对比特串R 16L 16使用逆置换IP -1得到密文C ,即C=IP -1 (R 16L 16) • 注意:第十六轮迭代左右两块不交换• 分组密码的轮函数(f)• 长度为32比特串R i-1作为第一输入,以长度为48比特串K i 作为第二个输入,产生长度为32比特的输出 • 扩展置换(E 盒):32位输入扩展为48位输出:按照8行6列次序排列,从32,1,2……排列,上一行的后两位一次在下一行的起始位置得到重用。
•1()i i E R K-⊕密钥加:按位异或加,计算 • S 盒代换:DES 中唯一的非线性部分8个S 盒。
每个S 盒输入均为6位,输出为4位。
Bj=b 1b 2b 3b 4b 5b 6, 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位)•计算C i=LS i(C i-1)和D i=LS i(D i-1),且K i=PC-2(C i D i),LS i表示循环左移两个或一个位置, 具体地, 如果i=1,2,9,16就移一个位置,否则就移两个位置, PC-2是另一个固定的置换。
•DES的解密与加密使用一样的算法,以密文y作为输入,以相反顺序使用密钥编排K16,K15,…,K1,输出的是明文X•DES算法的扩散•两轮扩散:•三轮扩散:从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;⊕ =( aa5a4a3a2a1a00) (00011011),a7为16(00000001)*(a7a6a5a4a3a2a1a0)= (a7a6a5a4a3a2a1a0)⊕(00000011)*(aa6a5a4a3a2a1a0)= (00000010)*(a7a6a5a4a3a2a1a0) (a7a6a5a4a3a2a1a0)7•密钥加:密钥加是将轮密钥简单地与状态进行逐比特异或;轮密钥由种子密钥通过密钥编排算法得到注:结尾轮函数将列混合这一步骤去掉•AES算法的密钥编排算法•密钥编排指从种子密钥得到轮密钥的过程,AES的密钥编排由密钥扩展和轮密钥选取两部分组成,基本原则如下:——轮密钥的总比特数等于轮数加1再乘以分组长度;((10+1)*128=1408)——种子密钥被扩展成为扩展密钥——轮密钥从扩展密钥中取,第1轮轮密钥取扩展密钥的前N b个字,第2轮轮密钥取接下来的N b个字•密钥扩展:——每一列的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表示轮数•轮密钥的选取W0W1W2W3W4W5W6W7。
W40W41W42W43。
轮密钥0轮密钥1轮密钥10•AES的解密变换•ByteSub的逆变换由代换表的逆表做字节代换•行移位运算的逆变换是循环右移,位移量与左移时相同•列混合运算的逆运算是类似的,即每列都用一个特定的多项式d(x)相乘d(x)=‘0B’x3+‘0D’x2+‘09’x+‘0E’.•密钥加运算的逆运算是其自身•AES算法的扩散第一轮第二轮总体• • 128比特明文128比特密文X i+3X i+2X i+1X i X i+3F 函数X 35X 34X 33X 32初始化赋值反序变换R32轮运算F ’函数rk i+3rk i+2rk i+1rk iCK irk i+4MKFK初始化赋值32轮运算•128比特明文分为4个32比特字,分别赋值给四个寄存器A 、B ,C ,D (D 为最高). (,,,,)()i i F D C B A rk A T B C D rk =⊕⊕⊕⊕()432(D,C,B,)2Z A ∈32i 2rk Z ∈进行32轮F 运算,设每轮输入为寄存器当前状态值 和轮密钥为 ,则轮函数F 为:3534333232333435()()R X X X X X X X X =35343332()X X X X 将寄存器最右边字A 的值移出,高三个字顺次右移32位,F 函数的输出赋值给最左边的寄存器字D.32轮的输出 进行反序变换R ,然后输出密文.•4123321(,,,;)()i i i i i i i i i i i F X X X X T rk rk X X X X X +++++++==⊕⊕⊕⊕轮函数F以字为单位进行运算,输入寄存器值和轮密钥合成置换T :是一个可逆变换,由非线性变换τ和线性变换L 复合而成, 即T(.)=L(τ(.)) 32103210(,,,)()((),(),(),())Y Sbox Sbox Sbox Sbox y y y y z z z z τ∈=非线性变换τ由4个并行的S 盒构成()(2)(10)(18)(24)W L Y Y Y Y Y Y ==⊕<<<⊕<<<⊕<<<⊕<<<线性变换L :•密钥编排算法• 0131()rk rk rk ,,......,加密密钥长度为128比特MK • 轮密钥表示为 ,•0131CK=(......)CK CK CK ,,,0123FK=()FK FK FK FK ,,, 为系统参数, 为固定参数,用于密钥扩展算法 • 密钥扩展算法:012301230123(,,,)=(,,,)FK FK FK FK K K K K MK MK MK MK ⊕⊕⊕⊕123(A3B1BAC6),(56AA3350),=(677D9197), (B27022DC) .FKFK FK FK ===T’变换与加密算法轮函数中的T 基本相同,只将其中的线性变换L 修改为()(13)(23)L Y Y Y Y '=⊕<<<⊕<<<固定参数CKi 的取值方法为:设为 的第j 字节(i=0,1,…,31;j=0,1,2,3,即则• 分组密码的运行模式 • 为了能在各种场合使用DES ,定义了4中DES 运行模式:ECB,CBC ,CFB,OFBAES 的另外一种运行模式:CTR• ECB 模式最简单的一种分组密码工作方式。