《应用密码学 协议、算法与C源程序》学习笔记(二)

第一部分 密码协议

第2章 协议结构模块16

2.1 协议概述16

协议的特点:

  1. “协议是一系列的步骤”意味着协议是从开始到结束的一个序列,每一步必须依次执行;
  2. “包括两方或多方”意味着至少需要两个人;
  3. “设计它的目的是要完成一些任务”意味着协议必须做一些事情。

其他特点:

  1. 协议中的每个人都必须了解协议,并且预先知道所要完成的所有步骤。
  2. 协议中的每个人都必须同意并遵循它。
  3. 协议必须是清楚的,每一步必须明确定义,并且不会引起误解。
  4. 协议必须是完整的,对每种可能的情况必须规定具体的动作。

**密码协议(cryptographic protocol)**是使用密码学的协议。参与该协议的各方可能是朋友和完全信任的人,或者也可能是敌人和互相完全不信任的人。

协议和算法的异同点:

同:

  1. 完成某项任务
  2. 高效

异:

  1. 协议提供算法的实现方案
  2. 协议需要通过一些算法来实现
2.1.2 协议中的角色17

安全协议中的角色
《应用密码学 协议、算法与C源程序》学习笔记(二)

协议参与者

  • 认证协议:发起者、响应者
  • 签名协议:签名申请者、签署人、验证人
  • 零知识证明:证明者、验证者
  • 电子商务协议:商家、银行、用户

攻击者(或称敌手)

  • 内部攻击者/外部攻击者
  • 被动攻击者/主动攻击者

可信第三方

2.1.3 仲裁协议17

仲裁者是在完成协议的过程中,值得信任的公正的第三方,“公正”意味着仲裁者在协议中没有既得利益,对参与协议的任何人也没有特别的利害关系。仲裁者能帮助互不信 任的双方完成协议。

存在问题:

  1. 怀疑并不露面的仲裁者
  2. 谁负担网络仲裁者费用
  3. 任何仲裁协议都有延迟特性(可能会有延迟攻击)
  4. 在大范围执行时,仲裁协议是潜在的瓶颈
  5. 对试图破坏网络的人来说,仲裁者是一个易受攻击的弱点

区块链的去中心化,避免了第三方仲裁。

《应用密码学 协议、算法与C源程序》学习笔记(二)

2.1.4 裁决协议19

仲裁协议可以分成两个低级的子协议:一个是非仲裁子协议, 执行协议的各方每次想要完成的。另外一个是仲裁子协议,仅在例外的情况下,即有争议的时候才执行,这种特殊的仲裁者叫做裁决人。

裁决协议是为了发现欺骗,而不是为了阻止欺骗,发现欺骗起了防止和阻碍欺骗的作用。

《应用密码学 协议、算法与C源程序》学习笔记(二)

2.1.5 自动执行协议20

自动执行协议本身就保证了公平性,协议的构成本身是不可能发生争端的。不幸的是对于所有情形,都没有一个自动执行协议。

《应用密码学 协议、算法与C源程序》学习笔记(二)

2.2 使用对称密码系统通信20
  1. Alice和Bob协商使用同一个密码系统
  2. Alice和Bob协商同一个**
  3. Alice用加密算法和选取的**加密它的明文消息,得到了密文消息
  4. Alice发送密文消息给Bob
  5. Bob用同样的算法和**解密密文,然后读它

存在的问题:

  • **必须秘密地分配。
  • 如果**被泄露了(被偷窃、猜出来、被逼迫交出来等),攻击者就能解密所有消息,并可以假装是其中一方。
  • 假设网络中每对用户使用不同的**,那么**总数随着用户的增加而迅速增加。n个用户需要的**总数=n(n-1)/2个**,10个用户需要45个不同的**,100个用户需要4950个不同的**。这个问题可以通过将用户数量控制在较小数目来减轻,但这并不总是可能的。
2.3 单向函数21

单项函数是公开**密码的中心,计算起来相对容易,但求逆却非常难。打碎盘子

陷门单项函数,是有一个秘密陷门的一类特殊的单向函数,如果你知道秘密,就很容易求逆。比如md4、md5、sha1等等。

2.4 单向散列函数22

单向散列函数有很多名称:压缩函数、收缩函数、消息摘要、指纹、密码校验和、信息完整性检验等。

散列函数是将可变长度输入串(叫做预映射,pre-image)转换成固定长度(经常更短)输出串(叫做散列值)的一种函数。

好的散列函数是无冲突的,又称碰撞*的,不同的输入可能会有相同的输出,输出不依赖于输入,散列函数是公开的,处理过程不需要保密。

单向散列函数的应用:

  • 可以看作是一个指纹(构成指纹文件的一种方法),如果散列值相同,那么源数据肯定没有被修改。
  • 消息鉴别码:带有**的单向散列函数,只有拥有**的某些人才能验证散列值。
2.5 使用公开**密码系统通信23

使用公开**密码通信:

  1. Alice和Bob选用一个公开**密码系统;
  2. Bob将他的公开**传送给Alice;
  3. Alice用Bob的公开**加密她的消息,然后传送给Bob;
  4. Bob用他的私人**解密Alice的消息。
2.5.1 混合密码系统24

在现实世界中,公开**算法不用来加密消息,而用来加***。这样做有两个理由:

  1. 公开**算法比对称算法慢1000倍。
  2. 公开**密码系统对选择明文攻击是脆弱的。公开**密码系统对选择明文攻击是脆弱的。

公开**密码用来保护和分发会话**,用在对称算法中,对通信消息进行保密,成为混合密码系统。

使用混合密码系统通信:

  1. Bob将他的公开**发送给Alice;
  2. Alice缠身个随机会话**K,用Bob的公开**加密,并将加密的**EB(K)送给Bob;
  3. Bob用他的私人**解密Alice的消息,恢复出会话**:DB(EB(K)) = K;
  4. 他们两人用同一个会话**对他们的通信消息进行加密。
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
  1. Alice将她的口令传送给计算机
  2. 计算机完成口令的单向函数计算
  3. 计算机把单向函数运算的结果和它以前存储的值进行比较

减少了某些人入侵计算机并偷取加密的口令表的威胁

3.2.2 字典式攻击和salt37

存在字典式攻击,偷出加密的口令表和可能的口令表进行比较匹配?

UNIX使用了salt,即随机数与口令一起进行单向函数计算

3.2.3 SKEY38

使用hash链进行鉴别

3.3 鉴别和**交换40
3.3.5 Kerberos协议43

3.6 秘密分割49

《应用密码学 协议、算法与C源程序》学习笔记(二)

《应用密码学 协议、算法与C源程序》学习笔记(二)

优点:保密性好;

缺陷:过于依赖秘密分割者,可靠性太低。

3.7 秘密共享50

(m,n)门限方案

第4章 中级协议53

4.1 时间标记服务53

数字时间标记协议具有的三个性质:

  1. 数据本身具有时间标记,而不用考虑它所用的物理媒介;
  2. 改变文件的一个位,而文件却没有明显变化是不可能的;
  3. 不可能用不同于当前日期和时间的日期和时间来标记文件。
4.1.1 仲裁解决方法53

协议需要Alice和Trent,Trent提供可信的时间标记服务,Alice希望对文件加上时间标记:

  1. Alice将文件的副本传送给Trent;
  2. Trent将他收到文件的日期和时间记录下来,并妥善保管文件的副本。

存在的问题:

  • 没有保密性
  • 数据库本身将是巨大的
  • 存在潜在的错误
  • 执行时间标记业务的人并不像Trent那样诚实。
4.1.2 改进的仲裁解决方法53
  1. Alice产生文件的单向散列值;
  2. Alice将文件的散列值传送给Trent;
  3. Trent将他收到散列值的日期和时间附在散列值后,并对结果进行数字签名。
  4. Trent将签名的散列值和时间标记送给Alice。

存在的问题:Alice和Trent仍然可以合谋产生他们想要的任何时间标记。

4.2 阈下信道55

4.2.1 阈下信道的应用56
4.2.2 杜绝阈下的签名56