复习篇——密码学与安全协议(上)
1 扩散与混淆(S盒和P盒,SP网络)
SP网络就是由多重代替和置换组成的变换网络,即迭代密码,它是一个乘积密码(乘积密码是指使用两个或两个以上基本密码,所得密码强度将强于单个密码的强度,参考https://zhuanlan.zhihu.com/p/76783690)
P盒——扩散:明文的统计特性在密文中消散(不是消失),即一个密文受多个明文字符的影响,主要是用来使得明文密文的关系变得尽可能复杂。使得攻击者从具有某些统计特性的密文中推导是十分困难的
P盒加速,使其分布到不同的S盒
实现:重复使用置换操作
S盒——混淆:使密文和**的统计关系变得复杂,即一个密文字符受多个**的影响(**与密文之间是一个非线性的关系),阻断攻击者根据密文发现**
S盒本质是代替算法
实现:采用复杂的代替算法
扩散和混淆的核心就是代替,单独的置换不能完成扩散和混淆。
2 DES和Feistel结构
DES总共有两个输入——明文和**,明文长度为64位,**长度为56位,其中有8位是奇偶校验位
除了初始和末尾的置换,DES的结构与Feistel密码结构完全相同。(图源网络,侵删)Feistel密码结构是一种分组密码的对称结构,它建议使用乘积密码的概念逼近理想的分组密码,现代分组密码都称乘积密码。可以分为两个类型——同时使用可逆和不可逆的基本变换组件,称为Feistel密码(DES),第二类只使用了可逆的基本变换部件,称为非Feistle密码(AES)
Feistel密码交替使用代替和置换
代替:每个明文元素或元素组被唯一的替换为相应的密文元素或元素组
置换:明文元素的序列被替换为该序列的一个置换。没有添加、删除或替换元素,但序列里的元素出现顺序变了。
加密:
解密:
参数和特征:
(Feistel密码强度来源于后三个)
1.分组长度:分组越长,安全性越高(其他数据不变的情况下),但会降低加解密的速度,这种安全性的增加来源于很好的扩散性
2.**长度:**较长意味着安全性越高,但会降低加解密的速度,这种安全性的增加来源于更好的抗穷举攻击和更好的混淆性
3.迭代轮数:本质是单轮不能提供足够的安全性,而多轮加密可以取得很高的安全性,典型数值是16
4.子**产生算法:子**产生越复杂,密码分析就越困难
5.轮函数:轮函数越复杂,抗攻击能力越强
轮函数F不一定可逆,它是一个压缩函数。把不可逆的在F中通过异或来抵消掉。
F函数的设计准则:非线性、雪崩效应、比特独立性
雪崩效应:当输入一个比特位i的时候,S盒的输出比特位j应该有50%的改变率,且对所有的i,j都适用。输入(明文或**)即使只有很小的变化,也会导致输出发生巨大变化的现象,本质上就是由S盒引起P盒起到快速扩散的效应。
即输出K与j是互相独立的,i的变化影响了K与j,但是K的变化与j无关。
3 密码分析和设计(公开算法保***)
密码体制的设计应该遵循的准则:
a.密码算法安全强度高,攻击者根据截获的密文或某些已知明文密文对,要确定**或任意明文在计算上不可行
b.密码体制的安全性不应该依赖加密算法的保密性,而应该取决于可随时改变的**,算法可以是公开的,即使密码分析者知道所用的加密体制,也无助于用来推导明文或**、
(柯克霍夫准则)如果密码体制的安全强度依赖于攻击者都不知道的密码算法,那么这个密码体制最终必然会失败。密码算法的公开不仅有利于增加密码算法的安全性,还有利于密码技术的推广应用,有利于增加用户使用的信心,也利于密码技术的发展。
c.**空间应足够大,使得试图通过穷举**空间进行搜索的方式在计算上不可行
d.既易于实现又便于使用,加密函数和解密函数都可以高效的计算
4 几种密码攻击方式(安全算法要抵御多少种个攻击)
唯密文攻击——密文、加密算法
已知明文攻击——加密算法、密文、用与待解密文使用同一**加密的一个或多个明密文对
选择明文攻击——加密算法、密文、分析者选择的明文,及对应的密文(与待解的密文使用同一**解密)
选择密文攻击——加密算法、密文、分析者选择的一些密文,及对应的明文(与待解的密文使用同一**解密)
选择文本攻击——结合3、4
一个较安全的算法至少要抵御前三种攻击
5 单/多表加密
a.单表加密(单表字符的重排序)
(1)凯撒密码
对字母表中的每个字母,用它之后的第k个字母来代替
单表代替容易被攻破,因为它带有原始字母使用频率的一些统计特性,很容易收到频率分析的攻击,切且单表的**量较小,不能抵抗穷举攻击。
(2)playfair密码(课本56页)
多字母代替密码
多个字母当作一个单元进行加密(字母矩阵)
虽然只有26个字母,但是有26*26个字母对,因此识别出单个字母对要困难得多。而且各个字母组的频率要比单字母呈现出大得多的范围,这样利用频率分析就变得更加困难
b.多表加密
对简单的单表代替的改进,在明文消息中采用不同的单表代替
(1)Hill密码
多表多字母代替,足以抵抗唯密文攻击,但无法抵御已知明文攻击和选择明文攻击
(2)vigenere密码(课本60页)
单字母多表代替,可用表有25个,代替规则由26个凯撒密码的代替表组成,其中每一个代替表是对明文字母移动0~25次后得到的代替单表
(3)vernam密码(流密码)
6 Diffie-Hellman**交换基本原理、攻击
首先要知道DH算法的目的是使两个用户能安全的交换**,以便在后续的通信中用该**对消息加密,算法本身只局限于进行**交换,最终产生的秘密值K被用于对称密码的**
DH算法的有效性是建立在离散对数求解的困难性的基础上(课本215),但其关于素数的模素数幂求解很容易,对于大素数,求离散对数被认为是不可能的.
可以理解为,借助公钥体制传输对称密码的秘钥,我们知道实际上公钥密码很费时间的,所以对称密码有其存在的价值,公钥密码安全性高,就借助它的安全性传输对称密码的**,然后用对称密码的**进行对称加密,保证传输速率.
公开参数:素数q和本元根a
私有**:XA和XB
瞬时公钥:YA和YB
长期会话**K
A与B进行**交换:
A选择一个随机整数XA<q,计算YA=a^XA(mod q)
B选择一个随机整数XB<q,计算YB=a^XB(mod q)
A计算K=(YB)^XA
B计算K=(YA)^XB
根据模算数的运算规律,得出两者K的计算结果是相同的
攻击:穷举攻击(课本216页)
只有在较小的数的情况下才会存在,对于较大的数,这个方法实际是不行的;中间人攻击,**交换协议不能抵抗中间人攻击,因为他没有对通信的参与方进行认证,这些缺陷可以通过使用数字签名和公钥证书来克服。