对称密码 加密与解密的密钥相同
共钥密码 加密与解密密钥不同
单向散列函数 hash 保证完整性
消息认证码 不仅能够保证完整性,提供认证消息是否来自期待的对象
数字签名 还能够防止否认
DES 64比特明文加密成64比特密文的对称密码算法 密钥的64bit,每7比特有一比特用于错误检测,实质上密钥长度56比特,这个64比特的单位成为分组,以分组为单位处理的密码算法叫做分组密码。
DES的结构称为feistel网络,加密的步骤称为轮,DES是一种16轮循环的feistel网络
一轮步骤:输入数据等分,右侧发送到输出右侧,右侧发送到轮函数,轮函数根据右侧数据和子密钥,计算出比特序列,再与左侧数据异或,结果发送到输出左侧。
并且使用不同子密钥对一轮的数据处理若干次,并且在两轮之间对调
特点:加密无论使用任何函数作为轮函数都可解密,加密和解密可以使用相同的结构实现。feistel网络实际上从加密算法中抽取“密码的本质部分”,并将其封装在一个轮函数中。设计算法的人只需设计复杂算法即可。
攻击方法:差分分析,线性分析 前提 由可选择任意明文得到密文, 称为选择明文攻击
三重DES,密钥长度56*3 当三个密钥相同,相当于普通DES
AES 即rijndael 分组长度128bit,密钥长度128,192,256bit
使用spn结构,每一轮为:subbytes shiftrows mixcolumns addroundkey
解密,即逆运算
分组密码只能加密固定长度的明文,如果需要加密任意长度,就需要迭代,迭代方法称为模式
分组密码的模式:
ECB模式 分组加密直接成为密文分组 无需破译就可以操纵明文
CBC模式 密文分组链接模式,明文与前一个密文进行xor,再加密 特点:第一个明文分组需要初始化向量 无法单独加密,一个密文损坏,解密影响两个分组。 攻击:初始化向量比特反转,填充提示攻击,初始化向量攻击
CFB模式 前一个密文分组送回到输入端,明文分组与密文分组之间只有xor (类似于一次性密码本) 攻击: 重放攻击
OFB模式 输出反馈模式,明文分组和密码算法的输出进行XOR产生密文分组,与CFB相似 生成密钥流与xor可并行
CTR模式 每次加密都生成一个不同的值(nonce)作为初始值,计数器前半部分为nonce,后半部分为分组序号。优势:与OFB对比,CTR支持任意顺序处理分组,可以并行。
总结:
公钥密码(非对称密码): 解决密钥配送问题
解决密钥配送问题:
- 事先共享 量大不方便,安全性差
- 密钥分配中心解决 密钥数量大引起分配中心负载增大,中心故障则无法通信
- 公钥密码
密钥分为加密密钥(公钥),解密密钥(私钥)两种,一对公钥和私钥称为密钥对(key pair)。
公钥密码 无法解决公钥认证问题
时钟运算: 时钟运算中对数称为离散对数,快速求出离散对数对算法还未发现
RSA:
加密: 密文=明文的E次方mod N 公钥是(E,N)
解密: 明文=密文的D次方mod N 私钥是(D,N)
生成密钥对:
求N N=p * q (p,q为质数)
求L L=lcm (p-1,q-1) lcm最小公倍数
求E 1<E<L gcd(E,L) =1 (E,L最大公约数为1,即E,L互质)
求D 1<D<L E * D mod L =1
公钥密码存在的问题: 算法本身无法防御中间人攻击,处理速度低
强度大保证: 质因数分解
混合密码: 会话密钥是对称密码的密钥,同时也是公钥密码的明文
伪随机数生成器生成会话密钥,对称密码加密消息,公钥密码加密会话密钥
举例:
数字签名,由单向散列函数和公钥密码组合而成。
证书,由公钥和数字签名构成
消息认证码,由单向散列函数和密钥组合(对称密码也可)
伪随机数生成器也可
单向散列函数:
散列值:抗碰撞性
盐,(salt,通过伪随机数生成器产生的随机的值)
弱抗碰撞性:找到和该消息具有相同散列值的另一消息是很困难的
强抗碰撞性:找到散列值相同的两条不同的消息是很困难的
SHA-3之前的单向散列函数都是通过循环执行压缩函数的方式来生成散列值,称为MD结构
SHA-3采用海绵结构
攻击: 暴力破解 破解“弱碰撞性”
生日攻击 破解“强碰撞性”
由于单向散列函数能够辨别出“篡改”,但不能辨别“伪装” ,认证技术包括消息认证码和数字签名