S02-对称密钥加密
lingli
对称密钥加密
6
58
● RC4加密算法(四步操作)
设密钥K的长度为lB,0<l≤256,输入明文为M,输出密文为C
⑪状态向量初始化
算法 初始化 阶段
设:状态向量S={S[0], S[1], S[2],…, S[255]} 令S[i]=i,i=0,1,…,255,即状态相邻的256个元素依次赋值0~255 设:临时向量T={T[0], T[1], T[2],…, T[255]} 将密钥K循环赋值给T,即T[i]=K[i mod l],i=0,1,…,255,弃用K 用向量T产生S的初始置换,弃用T 根据T[i]的值,将S[i]与S中指定元素进行置换(即换位swap) j = 0; 根据密钥的值,改变原来S for (i = 0 to 255) do { 中呈升序排列的数值,使 j = ( j + S[i] + T[i] ) mod 256; 之成为比较随机的分布 swap( S[i], S[j] ); } 对于输入明文M,若长度为nB,其字节流为M[k],0≤k<n 输出密文C字节流为C[k],0≤k<n i = j = 0; RC4加密循环往复地使用状态向量S, for (k = 0 to n) do { 每个明文字节与S生成的数值进行异 i = ( i + 1 ) mod 256; 或操作,得到密文字节,同时S中的 j = ( j + S[i] ) mod 256; 元素不断换位。长度值n实际上不起 swap( S[i], S[j] ); 作用,加密可以不断进行下去 t = ( S[i] + S[j] ) mod 256; C[k] = M[k]⊕S[t]; }
一种特定的 映射关系对 应的变换表
4b分组加密,变换表共有24!张 nb分组加密,变换表共有2n!张 4b分组加密的每一种变换关系需要一个4×24=64b的密钥 nb分组加密的密钥长度为n×2nb 常用的64b分组,其密钥长度将达到约1021b
对称密钥加密
58
密钥 过长
lingli
12
● 解决理想分组加密密钥过长问题的方法
● 加密采用的i轮次运算又称为迭代(iteration)
● 分组长度和密钥长度越长,安全性能越好
lingli
对称密钥加密
18
58
● 微型加密算法 Tiny Encryption Algorithm,TEA
一种轻量级的对称密钥分组加密算法,由剑桥大学的David Wheeler和Roger Needam提出,符合Feistel加密模型 TEA不是通过算法的复杂性来保证安全,而是依赖加密迭代的轮 次数(可选16、32或64轮) 算法执行速度快,简单易实现,并具有较强的抗差分攻击能力, 适合信息保密强度要求不高,但通信效率要求较高的应用,如即 时通信系统 TEA算法使用了一个神秘常数δ,以保证每一轮加密有所差异。而 δ来源于黄金比率φ:
近似理想 分组加密 是可行的
nb分组加密密钥长度缩短为n2b
原n×2nb
lingli
对称密钥加密
13
58
● 香农加密理论
使用信息编码的混淆和扩散方法,从而有效抵抗基于统计方法的 密码分析(破解)
混淆 confusion 扩散 diffusion
一种扩散方法的例子
mj为明文字母,cn为密文字母
通过混淆, 尽可能使密 文和密钥间 的统计关系 复杂化,阻 止破译者发 现密钥
lingli
对称密钥加密
22
58
⑪ 密钥准备(密钥扩展)部分
算法使用大量的子密钥(subkey) 在加密或解密过程开始前,先将密钥K转换为各迭代轮次所需的子 密钥,总长度为4168B 子密钥的生成分为4步,其中需要使用Blowfish加密算法 子密钥生成循环共需进行521轮 数据加密过程采用16轮Feistel迭代结构 解密过程与加密完全相同,只是逆序使用p-array[1..18]
密钥
明文 明文分组 明文分组 明文分组 ……
加密 加密 加密 加密 加密 加密
密文 密文分组 密文分组 密文分组 ……
明文分组
明文分组
密文分组
密文分组
lingli
对称密钥加密
9
58
● 设分组加密的分组大小为nB ● 明文数据交付加密前,首先进行数据填充(填充数据可为任意 数值),使总长度为nB的整数倍 ● 最后分组的最后4B为长度字段,表示有效数据(原始数据)的 长度(分为两种情况)
混淆 confusion
扩散 diffusion
代换 substitution
置换 swap
函数 运算
交叉 换位
lingli
对称密钥加密
15
58
lingli
对称密钥加密
16
58
● Feistel解密过程与加密完全一致(非逆向), 但逆序使用各轮子密钥。证明——
○不失一般性,设加密算法执行16轮。并设:加密 时,明文为LE0|RE0,输出密文为RE16|LE16;解密 时,密文为LD0|RD0,输出密文为RD16|LD16 ①显然有:LD0=RE16;RD0=LE16 ②对于加密:LE16=RE15;RE16=LE15⊕f (RE15, K16) ③对于解密第1轮,输入为LD0|RD0 ,有: LD0=RE16;RD0=LE16;LD1=RD0=LE16=RE15; RD1=LD0⊕f (RD0, K16)=RE16⊕f (RE15, K16) =[LE15⊕f (RE15, K16)]⊕f (RE15, K16)= LE15 解密第1轮输出LE15|RE15,正是加密第16轮输入 左右互换的值 依此类推,解密第16轮:LD16=RE0;RD16= LE0; 最终换位输出为LE0|RE0,正是原始明文。证毕。
取不同映射关系的一个子集 以减少映射关系数为代价,换取密钥长度的缩短,具有实用性
例:4b分组加密,设:明文为(p1,p2,p3,p4),密文为(C1,C2,C3,C4),定义方程组:
(类似Hill密码)
以(k11, k12,…, k44)为密钥,4b分组加密成立,且支持逆变换(可解密) 密钥长度缩短为42=16b
思考:如果原始数据恰好是nB的整数倍应如何处理?
lingli
对称密钥加密
10
58
● 分组加密映射关系解析
对nB的分组,有2n个不同的明文分组、2n个不同的密文分组,相 互间共有2n!个非奇异的对应(变换)关系
例:对于4b明文分组 M=(M3M2M1M0)共有24=16 种编码组合,编码器的16 个输出分别为X0~Xf。对 于一种特定的对应转换关 系,可一对一地映射为 Y0~Yf,进而可解码为4b, 输出C=(C3C2C1C0),C即 为明文M加密后的密文
消散明文统 计特征,让 每个明文编 码单元尽可 能多地影响 多个密文编 码单元
每个mj都会影响 到k个密文字母
lingli
对称密钥加密
14
58
● Feistel加密算法结构
设:明文和密文为2wb,密钥为K 模型由i轮加密运算组成,每轮具有相似 的运算方法,分别使用由密钥K生成的 该轮次的子密钥Ki 每轮的输入被分为wb的左半部分和右半 部分,进行代换运算,在输出前左、右 部分进行置换运算 算法结束前再进行一次左右置换运算, 最终合并成2wb的密文
t[0]
t[1]
l58
● Blowfish算法
1993年由布鲁斯•施 奈尔开发,属于对称 密钥分组加密算法, 符合Feistel加密模型 分组长度64b,密钥 长度从1至448b可变 具有非常紧凑、易于 实现、处理速度快、 无须授权即可使用等 特点,用于SSH、文 件加密软件等应用
lingli
对称密钥加密
17
58
● Feistel加密模型是对称密钥加密算法的指导性 技术框架
TEA、Blowfish、DES等算法均符合这一模型
迭代轮数越多,密文信息的混淆和扩散越彻底,保密性就越 强,但加解密速度变慢,因此通常选择16轮迭代 较长的分组和密钥同样存在拖慢运算速度的问题,常见的分 组长度选择64b或128b 密钥长度则根据算法指标、密级要求来确定
lingli
对称密钥加密
5
58
● RC4概述
一种流式对称加密方法,由RonRivest于1987年设计,以随机置换 原理为基础,计算方法简便、高效 密钥长度可在1~256B(8~2048b)之间随意选取,且与被加密的 信息长度无关,当密钥长度达到16B(128b)以上时,具有较强的 抗攻击能力 可对任意长度的明文(如按字节)实施加密和解密,满足流媒体 业务的需要 已应用于SSL/TLS、802.11/WEP等
凌力
● 对称密钥加密原理 ● 流式加密原理
RC4
● 分组加密原理 ● Feistel加密模型 ● 典型分组加密算法
TEA,Blowfish,SMS4,DES,AES,IDEA
lingli
对称密钥加密
2
58
● 对称密钥加密Symmetric Key Cryptography
又称为私钥加密(Private Key Cryptography)、 单钥加密(One-Key Cryptography) 现代加密技术之一,同一个密钥既用于加密又用于解密 特点:
⑫ 数据加密(或解密)部分
lingli
对称密钥加密
23
58
定义P数组为p-array[1..18],S盒为二维数组s-box[1..4] [0..255], 数组元素均为32b类型,用于存放子密钥 ⑪ 用固定的值初始化p-array和s-box数组