第13章 密码协议导论
- 建立安全密码协议最主要的挑战:设计者或实现者不能控制协议的过程
- 设计密码协议的假设:在和攻击者打交道
13.1 角色
-
单个实体可以充当协议中的任意一方角色
(尤其是在分析协议安全性时)
13.2 信任
-
信任的来源:
1.伦理道德
2.名誉
3.法律
4.人身威胁
5.MAD(共同毁灭原则):一种对于你自身和其他各方都会造成伤害的威胁
-
信任不是非黑即白,存在不同的信任等级
-
风险
风险可看作是信任的对立,是商业交易的通常表现
13.3 动机
-
动机机制是协议分析的一个基础部分
-
保持开放的心态,试图去理解什么在驱使人们的行为,再对应地调整协议
13.4 密码协议中的信任
-
密码协议的作用:最小化所需的信任的量(指最小化彼此信任的人数以及最小化人们需要信任其他人的程度)
有利工具:偏执狂模型
-
协议中每一点需要的信任都对应着一个需要解决的风险
13.5 消息和步骤
-
一个典型的协议描述包括在协议参与者之间发送的消息数量以及每个参与者需要做的计算
-
将注意力放在协议核心功能上的危险性:
如果不对每个参与者应当进行的行为进行小心的规范说明,那么这会使得协议的安全实现变得非常难
-
解决方案:进行模块化(modularization)
13.5.1 传输层
-
传输层指让人们能够互相通信的底层通信系统
-
在已经经过加密的信道上运行一个密码协议,传输层还提供了消息保密性、认证以及重放保护
13.5.2 协议标识符和消息标识符
-
协议标识符一般包括两个部分:
1.版本信息
2.指定这个消息属于哪个密码协议
-
消息标识符则是指出该标识符对应着协议的哪个消息
-
作用:协议和消息标识符同样使得消息能够更加独立,从而使得大多数的维护和调试工作变得简单
(引人消息标识符,我们可以避免一个消息认证时被解读到错误的上下文里)
13.5.3 消息编码和解析
-
收者必须要能够解析看起来像一个字节序列的消息,将这个序列解析成其组成字段。这个解析不能被上下文信息影响。
-
给字段编码的方法:使用TLV(Tag-Length-value)编码(或者XML)
13.5.4 协议执行状态
- 为了记录协议的动向,需要某个形式来记录协议执行的状态,并需要包括完成协议所必需的所有信息
13.5.5 错误
-最安全的处理过程:不给这个错误发送任何回复,并且马上删除协议状态
弊端:会导致一个不友好的系统,因为这个系统没有任何错误提示
13.5.6 重放和重试
-
重放攻击(replay attack):攻击者录下来一段消息,然后将这段消息重新发送出去
特点:难以检测,类似于合法消息
-
重试攻击(retry attack)
第14章 密钥协商
- 目的:得到一个可以在安全信道里使用的共享密钥。
14.1 初始设置
-
存在共享密钥的情况下进行密钥协商的原因:
1.密钥协商可以将会话密钥和已经存在的(长期的)共享密钥分离开来
2.共享密钥相对来说安全性比较弱(一些密码协商协议可以让一个很弱的密码变成一个很强的密钥)
14.2 初次尝试
14.3 协议会一直存在下去
成功的协议几乎会一直存在下去(不关心那些不成功的协议)
- 不能给密钥协商协议指定一个固定的DH参数集合的原因:
即使选择了很大的一个集合,未来可能会出现密码学方面的改进强迫去改变
14.4 一个认证的惯例
-
一些协议会中断是因为它们忽略了特定数据字段的认证
-
认证函数只会认证一个字节串。每个要认证的字节串必须从一个独特的识别符开始,这个识别符能够识别协议中这个认证器被使用的具体位置
14.5 第二次尝试
-
不再使用固定的DH参数,只使用两条消息,不在任何地方直接使用认证密钥,并且认证惯例确保了被认证的字节串不相同
-
问题:缺少了“活跃度”
解决方法:随机选择一个元素让认证器进行计算
14.6 第三次尝试
-
尽可能避免代数结构的使用
原因:攻击者可能会找到某些办法来利用这个结构
-
一个明显的解决方案是将最终的密钥进行散列,这样可以将它归约到一个固定的长度,并且也销毁了所有剩下的代数结构。
14.7 最终的协议
-
优化:双方都使用合适的DH参数的缓存
优点:节约了每次都要生成新的DH参数的时间,也节约了每次检查的时间
-
优化过多可能会损坏原本的协议(但没有什么硬性的规则去判断)
14.8 关于协议的一些不同观点
14.8.1 Alice的观点
- Alice相信她的确在和Bob对话,并且这个她产生的密钥只有她和Bob知道
14.8.2 Bob的观点
- Bob确信Alice是唯一能够计算出k的人
14.8.3 攻击者的观点
14.8.4 密钥泄露
1.如果Alice仅仅丢失了她的认证密钥,但是密钥还没有被攻击者知道,那么她只是失去了继续运行胁议的能力
2.如果Alice失去了会话密钥但是还没有被攻击者得到,她就需要和Bob再运行一次密钥办商协议,再确定一个新的会话密钥
3.如果Alice的认证密钥泄露了,攻击者就可以从那个时间开始,到Bob被通知并停止接受Alice的认证为止,一直模仿Alice 的身份
- 我们的协议总是能够针对密钥泄露的情况提供可能的最好的保护措施
14.9 协议的计算复杂性
-
对于公钥长度来说,DH协议的计算成本几乎和一个RSA签名的计算成本相同。DH运算仍然是办议计算里的主体部分
优化技巧:
1.使用加法链启发式算法(addition chain heuristics),指数运算可以使用更少的乘法计算完成
2.使用加法序列启发式算法(addition sequence heuristics)来同时计算,可以节约大约250次乘法计算
14.10 协议的复杂性
-
协议太过复杂,很难记住。一旦没有完全理解这些协议,就几乎不可避免地会导致安全缺陷出现
-
现实世界的系统里通常有很大的协议规范
-
主要问题:协议没有什么好的模块化表示方法
14.11 一个小警告
- 用批判性、怀疑性的眼光去看待所有协议,甚至用专业的偏执眼光来看待
14.12 基于口令的密钥协商
-
目前的假设:存在一个认证系统使得密钥协商可以基于这个系统建立
-
口令存在的问题使人们不会从一个很大的集合中选择,理想状态下我们想要一个窃听者也无法进行线下字典攻击的密钥协商协议