0-密码学目标
0.1安全服务的种类
认证:向接收方保证消息来自所声称的发送方
访问控制:防止未经授权使用资源,每个试图获得访问控制的实体必须被识别或认证之后才能获得相应的访问权限
数据保密性:防止传输的数据遭到被动攻击。
数据完整性:用于处理消息流,面向连接的完整性服务保证收到的消息和发出的消息一致,没有复制、插入、修改、更改顺序或重播。
不可否认性:防止发送方或接收方否认传输或接收过某条消息
可用性服务: 当用户请求服务时,若系统能够提供符合系统设计的这些服务,则系统是可用的。
0.2被动攻击与主动攻击
被动攻击
- 对传输进行窃听和检测,攻击者的目标是获得传输的信息
主动攻击
- 对数据流进行修改或伪造数据流,分为四类:伪装、重放、消息修改、拒绝服务。
0.3 无条件安全与计算上安全
无条件安全:
- 如果一个密码体制满足:无论有多少可使用的密文,都不足以唯一地确定密文所对应的明文,则称该加密体制是无条件安全的
计算上安全:
如果一个密码体制满足以下标准中任意一条,则它是计算上安全的
1.破译密码的代价超过密文信息的价值。
2.破译密码的时间超过密文信息的有效生命周期。
1-传统密码学
1.0 引入-古典加密技术
早期加密基于两个基本模块:代替和置换。如将明文字母换成其他字母、数字或者符号,或者将明文的字母进行”换位”处理.
那时候代表密码有:Caesar密码、单表代替密码、Playfair密码(棋盘密码)、多表代替密码(如Hill密码)等等。
出现的弊端是:密钥和明文具有相同频率的分布特征,攻击者可以利用统计学方法对其进行破译。
最终的反破译措施也许只有选择一个和明文毫无统计关系且和它一样长的密钥。于是Venam密码出现了!但该密码本质上是使用了周期很大的循环密钥,尽管周期很长对于密码分析增添了很大难度,但是如果有足够的密文使用已知的明文序列,该方案还是可以破解的!
一次一密的提出:
引入
- 陆军请报官Mauborgne提出了针对Venam密码的改进方案,他建议使用与消息一样长且无重复的随机密钥来加密消息,另外只对一个消息进行加解密,之后丢弃不用。每个消息都需要一个与其等长的新密钥。这就是著名的一次一密。
特点
不可攻破
- 产生的随机输出和明文无任何统计关系,密文不包含明文的任何内容,所以无法攻破
理论上,我们不许再寻找密码了,一次一密提供了完全的安全性。但是,实际中
一次一密有两个基本难点
产生大规模随机密钥有实际困难
密钥的分配和保护。对于每条发送的信息,需要提供给发送方和接收方等长度的密钥,而庞大密钥的分配存在问题(先生鸡还是先生蛋的问题….)
1.1 现代对称密码
流密码(双方共享一个对称加密密钥)
- 每次加密数据流中的一位或一个字节。如(Vernam密码)
分组密码(双方共享一个对称加密密钥)
将明文分组作为整体加密,并且通常得到与明文等长的密文分组。
- P.S. 使用某种工作模式,分组密码可以获得与流密码相同的效果
分析流密码和分组密码,提炼出Feistel结构,现在使用的大部分对称分组加密算法都是基于Feistel结构
Feistel建议使用这种密码:该种密码交替使用了代替和置换技术,同时使用乘积密码的概念,而实际上这正是shannon理论的实际应用(交替使用混淆和扩散的乘积密码)
即
总结:
Feistel密码应用于分组密码
使用置换和替代形成乘积密码
重复n轮
每轮明文分左右、上轮输出下轮输入,n轮处理左右合并为密文
每轮结构相同
主密钥生成每轮密钥
轮函数F每轮相同
加密解密相同,使用子密钥顺序相反
常见应用:
- 大部分对称分组加密算法均是基于Feistel结构(如DES)
1.2 扩散与混淆
扩散(明文&密文)
- 将明文的统计特征消散到密文中,让明文的每个数字尽可能影响多个密文数字的取值,亦即每个密文数字被许多明文数字影响。以挫败推导出密钥的企图
混淆(密文&密钥)
- 明文分组到密文分组的变换依赖于密钥,使得密文与加密密钥间的统计关系尽量复杂,使得即使攻击者掌握了密文的某些统计特性,由于密钥产生密文的方式是如此复杂以至于攻击者难于从中推测出密钥
1.3 雪崩效应
1.4 中间相遇攻击
对双重加密算法中使用的攻击,要求已知(明文、密文)对,在本质上
1.5 代替置换、乘积密码
乘积密码
- 依次使用两个或两个以上基本密码,所得密码强度将强于所有单个密码的强度
代替
- 每个明文元素或元素组被唯一地代替为相应的密文元素或元素组
置换
- 明文元素的序列被替换为该序列的一个置换。即序列里元素的出现顺序发生了改变,但序列里元素并没有被删除、替换或者修改
2-传统密码学与现代密码学分水岭
Kerckhoff原则
系统的保密性不依赖于对加密体制或算法的保密,而依赖于密钥。
经典回顾
扩展
即:公开的算法经过大众考验之后仍安全,那我们就认为这个算法是相对安全的(与遮遮掩掩保密算法+密钥比起来)
意义
现代密码学最大的进步就是承认不完美,所以kerckhoff原则是经典密码学和现代密码学最本质的区别,它改变了密码学研究的方向【密码学史上重大改变之一】

扩展思考点:
若已知大量的明文和密文对 ,重复加密多次,或者混用多种不同的加密算法,会更安全吗?不一定:
密钥长度越长越安全?不一定
同一个加密算法,选择两个相同 长度的密钥 X 和 Y,它们加密出来的结果一样安全吗?不一定
3-现代密码学
既然只保存密钥,那么怎样的设计才能实现这个加密过程呢?即:
- 可以公开加密算法,但是只要攻击者不知道密钥就无法通过某种逆向破解手段破解加密后的密文得到明文
3.0 公钥密码体制基本思想
将传统密码的密钥一分为二,加密密钥Ke和解密密钥Kd
由加密密钥推出解密密钥是不可行的
加密密钥公开,解密密钥保密
主要应用:
数字签名
保护传统密码的密钥
基本不用于数据加密:公钥密码算法低。
3.1 计时攻击
通过观察算法的一个既定实现对多种密文解密所需的时间,来获取关于密钥或明文的信息。计时攻击所利用的事实是加密或解密算法对于不同的输入所花时间有着些微差别。
3.2 中间人攻击
(英语:Man-in-the-middle attack,缩写:MITM)是指攻击者与通讯的两端分别建立独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制
3.3 生日悖论与生日攻击
生日悖论的本质就是,随着元素增多,出现重复元素的概率会以惊人速度增长,而我们低估了它的速度。这个问题不容忽视,因为它意味着,在密码学中,我们低估了散列值出现碰撞的概率。这一结论应用于对散列函数的攻击中,称为”生日攻击(Birthday Attack)”。
3.4 密码学Hash函数及其安全性需求
Hash函数
如SHA,MD5。散列函数,具有单向性。散列函数对消息进行摘要,并经过迭代,得到固定长度的输出。消息的一个字节的变化对Hash函数的输出都会有很大的影响
安全需求
输入长度可变
输出长度固定
效率
- 对任一给定X,计算H(x)容易,用软件硬件均可实现
抗原像攻击(单向性)
- 对任意给定H(x),逆向计算出x在计算上是不可行的
抗第二原像攻击(抗弱碰撞性)
- 对任何给定分块x,找到满足y≠x且H(x)=H(y)的y在计算上是不可行的
抗碰撞攻击(抗强碰撞性)
- 找到任何满足H(x)=H(y)的偶对(x,y)计算上不可行
伪随机性
- H的输出满足伪随机性测试标准
3.5 消息认证码Mac
术语解释
消息认证码,由Hash函数对消息进行摘要得到,由于Hash函数的特性,可以提供对消息完整性的验证,一般随消息一起发出
3.6 Kerberos解决了什么问题
Kerberos有一个保存所有客户及其共享密钥的数据库,能产生消息向实体证实另一个实体的身份,产生会话密钥,加密双方之间的通信。
3.7 认证作用
确保报文发送者和接收者的真实性和报文的完整性
3.8 重放攻击
重放攻击(Replay Attacks)又称重播攻击、回放攻击或新鲜性攻击(FreshnessAttacks),这种攻击会欺诈性地重复一个有效的数据传输加密可以有效防止会话劫持,但是却防止不了重放攻击
防御:
时间戳
序列号
提问与应答

3.9 数字签名体制
施加签名、验证签名
不对数据直接进行签名,而是对数据的hash值进行签名
先签名再加密
P.S 验证签名是否有效,通常是先算摘要,再以摘要和公钥作为输入,调用验证算法验证。因此,数字签名的安全性基于
Hash算法的抗碰撞性
伪造数字签名的难度


