《应用密码学 协议、算法与C源程序》学习笔记(二)
第一部分 密码协议
第2章 协议结构模块16
2.1 协议概述16
协议的特点:
- “协议是一系列的步骤”意味着协议是从开始到结束的一个序列,每一步必须依次执行;
- “包括两方或多方”意味着至少需要两个人;
- “设计它的目的是要完成一些任务”意味着协议必须做一些事情。
其他特点:
- 协议中的每个人都必须了解协议,并且预先知道所要完成的所有步骤。
- 协议中的每个人都必须同意并遵循它。
- 协议必须是清楚的,每一步必须明确定义,并且不会引起误解。
- 协议必须是完整的,对每种可能的情况必须规定具体的动作。
**密码协议(cryptographic protocol)**是使用密码学的协议。参与该协议的各方可能是朋友和完全信任的人,或者也可能是敌人和互相完全不信任的人。
协议和算法的异同点:
同:
- 完成某项任务
- 高效
异:
- 协议提供算法的实现方案
- 协议需要通过一些算法来实现
2.1.2 协议中的角色17
安全协议中的角色
协议参与者
- 认证协议:发起者、响应者
- 签名协议:签名申请者、签署人、验证人
- 零知识证明:证明者、验证者
- 电子商务协议:商家、银行、用户
攻击者(或称敌手)
- 内部攻击者/外部攻击者
- 被动攻击者/主动攻击者
可信第三方
2.1.3 仲裁协议17
仲裁者是在完成协议的过程中,值得信任的公正的第三方,“公正”意味着仲裁者在协议中没有既得利益,对参与协议的任何人也没有特别的利害关系。仲裁者能帮助互不信 任的双方完成协议。
存在问题:
- 怀疑并不露面的仲裁者
- 谁负担网络仲裁者费用
- 任何仲裁协议都有延迟特性(可能会有延迟攻击)
- 在大范围执行时,仲裁协议是潜在的瓶颈
- 对试图破坏网络的人来说,仲裁者是一个易受攻击的弱点
区块链的去中心化,避免了第三方仲裁。
2.1.4 裁决协议19
仲裁协议可以分成两个低级的子协议:一个是非仲裁子协议, 执行协议的各方每次想要完成的。另外一个是仲裁子协议,仅在例外的情况下,即有争议的时候才执行,这种特殊的仲裁者叫做裁决人。
裁决协议是为了发现欺骗,而不是为了阻止欺骗,发现欺骗起了防止和阻碍欺骗的作用。
2.1.5 自动执行协议20
自动执行协议本身就保证了公平性,协议的构成本身是不可能发生争端的。不幸的是对于所有情形,都没有一个自动执行协议。
2.2 使用对称密码系统通信20
- Alice和Bob协商使用同一个密码系统
- Alice和Bob协商同一个**
- Alice用加密算法和选取的**加密它的明文消息,得到了密文消息
- Alice发送密文消息给Bob
- Bob用同样的算法和**解密密文,然后读它
存在的问题:
- **必须秘密地分配。
- 如果**被泄露了(被偷窃、猜出来、被逼迫交出来等),攻击者就能解密所有消息,并可以假装是其中一方。
- 假设网络中每对用户使用不同的**,那么**总数随着用户的增加而迅速增加。n个用户需要的**总数=n(n-1)/2个**,10个用户需要45个不同的**,100个用户需要4950个不同的**。这个问题可以通过将用户数量控制在较小数目来减轻,但这并不总是可能的。
2.3 单向函数21
单项函数是公开**密码的中心,计算起来相对容易,但求逆却非常难。打碎盘子
陷门单项函数,是有一个秘密陷门的一类特殊的单向函数,如果你知道秘密,就很容易求逆。比如md4、md5、sha1等等。
2.4 单向散列函数22
单向散列函数有很多名称:压缩函数、收缩函数、消息摘要、指纹、密码校验和、信息完整性检验等。
散列函数是将可变长度输入串(叫做预映射,pre-image)转换成固定长度(经常更短)输出串(叫做散列值)的一种函数。
好的散列函数是无冲突的,又称碰撞自由的,不同的输入可能会有相同的输出,输出不依赖于输入,散列函数是公开的,处理过程不需要保密。
单向散列函数的应用:
- 可以看作是一个指纹(构成指纹文件的一种方法),如果散列值相同,那么源数据肯定没有被修改。
- 消息鉴别码:带有**的单向散列函数,只有拥有**的某些人才能验证散列值。
2.5 使用公开**密码系统通信23
使用公开**密码通信:
- Alice和Bob选用一个公开**密码系统;
- Bob将他的公开**传送给Alice;
- Alice用Bob的公开**加密她的消息,然后传送给Bob;
- Bob用他的私人**解密Alice的消息。
2.5.1 混合密码系统24
在现实世界中,公开**算法不用来加密消息,而用来加***。这样做有两个理由:
- 公开**算法比对称算法慢1000倍。
- 公开**密码系统对选择明文攻击是脆弱的。公开**密码系统对选择明文攻击是脆弱的。
公开**密码用来保护和分发会话**,用在对称算法中,对通信消息进行保密,成为混合密码系统。
使用混合密码系统通信:
- Bob将他的公开**发送给Alice;
- Alice缠身个随机会话**K,用Bob的公开**加密,并将加密的**EB(K)送给Bob;
- Bob用他的私人**解密Alice的消息,恢复出会话**:DB(EB(K)) = K;
- 他们两人用同一个会话**对他们的通信消息进行加密。
2.6 数字签名25
2.8 随机和伪随机序列的产生32
2.8.1 伪随机序列32
最好的计算机能产生伪随机序列发生器。三个性质:
- 零一均衡性 010出现的几率大于0110出现的几率
- 游程特性
- 关联特性 第一个位置出现1和低五个位置出现1是没有关联的
2.8.2 密码学意义上安全的伪随机序列33
不可预测的,不可压缩的(除非知道**)
第3章 基本协议34
3.1 **交换34
3.1.5 使用数字签名的**交换36
在会话**交换协期间,采用数学签名能防止中间人Mallory攻击,Trent,Alice和Bob的公开**签名。即Alice和Bob收到签名的所有权证书,均能验证Trent的签名,知道公开**是哪个人的,公钥的可信性条件满足,会话**交换就能进行了。
Trent的私钥保密的重要性
3.2 鉴别37
3.2.1 使用单向函数鉴别37
- Alice将她的口令传送给计算机
- 计算机完成口令的单向函数计算
- 计算机把单向函数运算的结果和它以前存储的值进行比较
减少了某些人入侵计算机并偷取加密的口令表的威胁
3.2.2 字典式攻击和salt37
存在字典式攻击,偷出加密的口令表和可能的口令表进行比较匹配?
UNIX使用了salt,即随机数与口令一起进行单向函数计算
3.2.3 SKEY38
使用hash链进行鉴别
3.3 鉴别和**交换40
3.3.5 Kerberos协议43
3.6 秘密分割49
优点:保密性好;
缺陷:过于依赖秘密分割者,可靠性太低。
3.7 秘密共享50
(m,n)门限方案
第4章 中级协议53
4.1 时间标记服务53
数字时间标记协议具有的三个性质:
- 数据本身具有时间标记,而不用考虑它所用的物理媒介;
- 改变文件的一个位,而文件却没有明显变化是不可能的;
- 不可能用不同于当前日期和时间的日期和时间来标记文件。
4.1.1 仲裁解决方法53
协议需要Alice和Trent,Trent提供可信的时间标记服务,Alice希望对文件加上时间标记:
- Alice将文件的副本传送给Trent;
- Trent将他收到文件的日期和时间记录下来,并妥善保管文件的副本。
存在的问题:
- 没有保密性
- 数据库本身将是巨大的
- 存在潜在的错误
- 执行时间标记业务的人并不像Trent那样诚实。
4.1.2 改进的仲裁解决方法53
- Alice产生文件的单向散列值;
- Alice将文件的散列值传送给Trent;
- Trent将他收到散列值的日期和时间附在散列值后,并对结果进行数字签名。
- Trent将签名的散列值和时间标记送给Alice。
存在的问题:Alice和Trent仍然可以合谋产生他们想要的任何时间标记。
4.2 阈下信道55
4.2.1 阈下信道的应用56
4.2.2 杜绝阈下的签名56