第13章密码协议导论
13.1角色
- 一般交互双方定为Alice和Bob,攻击者为Eve
- 单个实体可充当协议中的任意一方角色
13.2信任
- 信任来源:使得某一方不去进行欺骗行为的动机,而其他方知道这个动机存在,从而觉得可以在一定程度上相信与他交互的另外一方
- 伦理道德
- 名誉
- 法律
- 人身威胁
- 共同毁灭原则
- 网络上建立信任,来源:伦理道德
- 网络上建立商务信任:名誉&伦理道德
- 信任选项:有多么信任?
- 风险是信任的对立,在协议上我们讨论信任,商业上讨论风险
13.3动机
- 研究者会估计赞助的收益动向,而存在压力
- 评估者会考虑报告是否"好看",让客户满意,而存在压力
- 期权持有者会尝试赌博赚快钱,而存在压力
- 离婚律师会为赚钱而催发离婚
- 诉讼使出错者能够隐瞒、否认或者逃脱责罚。法律责任和伤害赔偿极大阻碍人们归因避错
- 密码协议:
- 密码协议依赖于动机机制。协议无法组织欺骗但可留存证据
- 密码协议改变了动机机制。协议使得一些事情不再可能发生,从而从需要考虑的动机机制里面消失了。
13.4密码协议中的信任
- 最小化:最小化彼此信任人数&信任程度
- 默认模型--偏执狂模型:假设其他参与者合谋欺骗用户
- 在模型上所作的信任修改需要被记录列出,对应需要解决的风险
13.5消息和步骤
- 高层的(抽象的)协议描述能提高效率但也会产生危险:没有详尽的行为规范说明
- 解决方法:模块化,只有在最顶层的协议文档是高度差异化的
13.5.1传输层
密码学含义:让人们能够互相通信的底层通信系统
- 应能传输可变长度并不修改字符串
- 一些协议中的类魔数能提前检测同步是否正确
- 传输层可能在已加密信道上运行密码协议,此时还提供了消息保密性、认证、重放保护
13.5.2协议标识符和消息标识符
当你收到一条消息时。你会想知道这个消息属于哪个协议,以及这个协议都包含哪些消息
- 协议标识符:
- 版本信息:为未来升级提供空间
- 协议(号):属于哪个密码协议
- 消息标识符:对应协议哪部分
- 引入目的:区分主动攻击和配置、版本问题导致的意外错误
- 霍顿原则:当我们在一个协议中使用认证(或者数字签名)时,我们一般是针对数条消息和数据字段进行认证
13.5.3消息编码和解析
一条消息中每一个数据元素都需要被转化成一个字节序列。
-
接收者必须要能够解析看起来像一个字节序列的消息,将这个序列解析成其组成字段。这个解析不能被上下文信息影响
-
认证函数认证了一个字节串,并且通常在传输层对消息进行认证是最简单的。
-
可选编码:
-
TLV(Tag-Length-Value)编码
每个字段被编码成了标签(tag)、长度(length)和值(Value)三个数据元素,标签用来识别字段,长度表示这个字段的值经过编码之后的长度,值则是被编码的实际数据内容
-
XML编码
只要使用一个固定的文档类型定义(Document Type Definition,DTD)时,这个解析就不依赖于上下文
-
13.5.4协议执行状态
单个计算机有可能同时参加到几个协议执行中
- 协议状态包含了一个状态机,用于说明下一个消息的预期类型
13.5.5错误
-
最安全处理:不给错误发送任何回复,并且马上删除协议状态
问题:导致一个不友好的系统,因为这个系统没有任何错误提示
解决方法:只在系统安全日志上添加错误信息
-
新问题:错误可能和时间攻击(timing attack)联系起来
例:智能卡按PIN码位数次序检测PIN码是否正确,提供了时间信息供攻击者"避错"
13.5.6重放和重试
-
重放攻击:是攻击者录下来一段消息,然后将这段消息重新发送出去。
-
重试攻击:攻击者发送重放和重试信息
-
使用时要确定收到信息和应受到信息的时间关系
-
三种旧消息情况:
-
你收到的消息和之前你已经响应过的消息有一样的消息标识符,并且内容也相同。
反应:回复与之前回复消息完全相同的内容
-
当你收到一个和你最后响应过的消息有相同消息标识符,但是消息的内容不一样。
反应:两条信息有一条是伪造的,应视为协议错误
-
你收到一条甚至比你之前回复过的消息更"老"的消息。
反应:忽略消息
-
第14章密钥协商
14.1初始设置
Alice和Bob通过密钥协商协议设置会话密钥k
密钥协商需要提供可识别性,可用RSA签名或密钥+MAC的形式
讨论:为何有共享密钥后还需设置会话密钥k?
- 将短期会话密钥和长期共享密钥分离开,增加系统健壮性
- 会话密钥泄露,共享密钥安全
- 共享密钥泄露,过去会话信息安全
- 共享密钥安全性弱:用户喜欢简单口令
14.2初次尝试
Alice和Bob通过最初的两个消息来执行 DH协议。Alice随后对会话密钥k计算认证并发送给 Bob,Bob检查了认证信息。同样的,Bob 也发送了关于k的认证信息并发送给 Alice。
14.3协议会一直存在下去
版本回滚攻击:协议的版本转换带来的安全性变化会让攻击者强迫用户进行版本转换
解决方法:多版本协议,单成本较高
14.4一个认证的惯例
每次某一方发送一个认证,这个认证数据里包括了所有之前已经交换过的数据:所有之前的消息和所有已经认证的消息中包括的数据字段,如身份识别符。
14.5第二次尝试
思想:Alice选择DH参数、DH分布(Alice结果)与认证集合并发送给 Bob,Bob需要检验是否合适然后发送自己的分布和认证
具体过程:Alice首先选择了DH参数和她的 DH分布,经过认证发送给 Bob。Bob必须检查这些 DH参数是否合适,以及X是否有效。协议剩下的内容和之前的版本相似,Alice 收到Y和Auth,进行检查,然后计算 DH的结果。
14.6第三次尝试
思想:与其让 Alice选择 DH协议的参数,不如让她简单地发送她的最低要求给 Bob,然后让Bob来选择这些参数
具体过程:Alice首先选择一个s,这是她想要选择的素数p的最小长度。她同样选择了一个随机的256 位字符串作为随机数N。并将两个参数发送给 Bob。Bob 选择一个合适的 DH参数集合和他的随机指数,然后将这些参数、他的DH分布和他的认证器发送给 Alice。Alice 和之前一样利用添加的认证器来完成DH协议。
14.7最终的协议
Alice和Bob应分别限制p大小,但也不可以定长
具体过程
14.8关于协议的一些不同观点
14.8.1Alice的观点
抗重放:含Alice的随机数
检验DH参数: Alice保留y,发送Y时,她 Alice保留y,发送Y时,她清楚知道只有使得g-X成立的x的人能够计算出最后的结果,密钥k。
14.8.2Bob的观点
第一条信息只包含选定值sa和随机位Na
第二条信息是Alice已认定的信息
他清楚只有知道满足g=Y的y值的人能够计算出最终的密钥k。
14.8.3攻击者的观点
因为认证性而无法改变数据
因为随机数X而无法重放攻击
增大Sa可实现但无法算作攻击
其他方法容易暴露攻击者信息
14.8.4密钥泄露
丢失认证密钥:不能运行协议,可用会话密钥
丢失会话密钥:需要再运行密钥协商协议
泄露认证密钥:攻击者可伪装成用户,但无法找到从前的会话密钥
泄露会话密钥:攻击者没有获得其他信息
14.9协议的计算复杂性
无须计算:DH参数的选择和验证:已事先缓存
必须计算:
- DH协议子集里的三个指数运算。
- 生成一个认证器。
- 对一个认证器的验证。
- 若干个相对有效的操作,例如随机数生成、比较、散列函数等。
主要运行时间由DH参数中的指数决定
在模数比较大的时候,RSA签名比 DH计算慢一些。在模数比较小的时候RSA签名又相对快一些。这个平衡点(break-even point)在3000 位左右。这是因为 DH通常使用256 位的指数,而对于RSA来说这个指数取决于模数的长度。
优化技巧
使用加法链启发式算法或加法序列启发式算法减少乘法计算
14.10协议复杂性
14.11一个小警告
14.12基于口令的密钥协商
很多情况下没有认证系统可用,而只有一个口令
用MAC函数的问题:给定这个协议的一段上下文(通过窃听双方的通信得到)可测试任何一段口令。
理想状态:一个窃听者也无法进行线下字典攻击的密钥协商协议,如SRP协议