协议的基本概念
定义:两个或多个参与者完成某任务采取的一系列步骤
有序;至少两个参与者;必须完成任务
仲裁协议
需要有仲裁方 arbitrator, 公正第三方,其他方信赖
对协议参加者无偏向;信息正确;帮助互不信赖实体完成任务
特点:
- 计算机可能怀疑作为仲裁者的计算机
- 设立仲裁者需要承担开销
- 增加时延
- 仲裁者对对话处理。可能成为系统瓶颈
- 仲裁者会成为黑客攻击的目标
裁决协议
裁决人 adjudicator, 公正可信赖第三方,不直接参与协议。
参与者发生纠纷需要其裁决
- 无仲裁子协议, 双方协商好签署,没有第三方
- 裁决子协议 双方找第三方,双方提供者证据,第三方根据证据进行裁决
特点:
- 双方诚实
- 怀疑欺骗,则第三方根据证据裁定是否欺骗
- 裁决协议应确定欺骗者身份
- 只可检测欺骗,不可预防欺骗发生
自动执行协议:(self-enforcing)
- 保证公平性
- 无需仲裁者参与和解决争端
- 一方企图欺骗另一方,另一方立刻检测欺骗发生,停止协议
好协议特点
- 涉及各方须知协议细节
- 各方遵守协议
- 协议非模糊/清晰
- 协议完整 —— 对所有情况要做出反应
- 操作要么一方/多方计算, 要么各方之间传递
协议分类,密码协议
安全协议功能分类
- 认证协议 authentication protocol —— 给实体提供关于另一个实体身份的确信度
- 密钥建立协议 agreement/exchange/distribution protocol —— 两个通信实体之间建立共享密钥
- 认证密钥简历 authenticated key/agreement/exchange/distribution —— 另一实体身份被验证,两个实体之间共享密钥
ISO七层参考模型分类
- 高层
- 低层
根据算法分类
- 双钥/公钥 协议 public
- 单钥协议 secret
- 混合协议 hybrid
密钥建立协议
密钥建立协议可在实体之间共享秘密
- 共享秘密 通常作为 一次性会话密钥,可以扩展多方共享密钥建立 —— 如会议密钥建立
- 协议可用单钥、双钥体制实现,借助可信赖第三方
- 密钥建立协议
- 密钥传输 —— 密钥从实体传给另一个实体
- 密钥协商 —— 双方、多方共同信息建立共享密钥
会话密钥?
- 保密通信中,对每次会话用不同密钥加密,故交会话密钥。
- 密钥旨在持续范围内有效,结束会话后被清除
1. 单钥体制
- A向T请求得到与Bob的会话密钥
- T给A E K A ( K e y ) E K B ( K e y ) E_{K_A}(Key)\ E_{K_B}(Key) EKA(Key) EKB(Key)
- A解密 D K A ( E K A ( K e y ) ) = K e y D_{K_A}(E_{K_A}(Key)) = Key DKA(EKA(Key))=Key
- A给B $ E_{K_B}(Key)$
- B解密 D K B ( E K B ( K e y ) ) = K e y D_{K_B}(E_{K_B}(Key)) = Key DKB(EKB(Key))=Key
- AB之间用Key通信
2. 双密钥
- A拿到B的公钥
- A给B发送 E K B P ( K e y ) E_{K_{BP}}(Key) EKBP(Key)
- B解密 D K B S ( E K B P ( K e y ) ) = K e y D_{K_{BS}}(E_{K_{BP}}(Key)) = Key DKBS(EKBP(Key))=Key
- AB会话密钥key进行通信
协议未对公钥合法性验证,无法抵抗自己人攻击
3. 中间人攻击 MITM
- M截获A的公钥,然后发送M的公钥给B
- M截获B的公钥,然后发送M的公钥给A
- A和B采用的密钥都是M的公钥,加密信息可以被M破解
4. 联锁协议
- A和B发送公钥给对方
- . A用B的公钥加密,但只发送一半密文
- B用A公钥加密,但只发送一半密文
- A B 再将剩下的一半发给对方,组合后私钥解密
安全性讨论
中间人只获得一半密文的时候,数据对攻击者没有用处(攻击者无法解密)
如何实现?
- 分组加密算法
- 消息解密依赖初始化向量
- 发送的开始一半消息可以是加密消息的Hash函数,另一半消息可以是加密信息
5. 数字签名
- A从T得到B的公钥证书
- B从T得到A的公钥证书
- A B 采用CA公钥验证CA签名正确性,获得对方公钥
- 使用可信公钥通信
6. 密钥和消息传输
- A生成随机数作为密钥K,对M加密
- A得到B的公钥加密K
- 发送给对方B
- B先用私钥解密得到K
- 再用K对M进行解密
7. 密钥和消息广播
- A生成随机数K,对M加密
- A得到B,C,D的公钥
- A用B,C,D的公钥加密K,得到 E B P ( K ) E C P ( K ) E D P ( K ) E_{B_P}(K)\ E_{C_P}(K)\ E_{D_P}(K) EBP(K) ECP(K) EDP(K)
- A 广播加密消息与加密会话密钥
- B C D均可以用私钥得到K并解密得到M
8.DH密钥交换
AB都知道两个大素数n和g,g是群(0,…,n-1)的本原元,整数公开
- A选择大整数x,使得 X = g x m o d n X = g^x\ mod\ n X=gx mod n
- B选择大整数y,使得 Y = g y m o d n Y = g^y\ mod\ n Y=gy mod n
- A计算 K = Y x m o d n = g x y m o d n K = Y^x\ mod\ n = g^{xy}\ mod\ n K=Yx mod n=gxy mod n
- B计算 K = X y m o d n = g x y m o d n K = X^y\ mod\ n = g^{xy}\ mod\ n K=Xy mod n=gxy mod n
无法抵抗中间人攻击
认证建立协议
消息/数据源/实体认证 —— 欺骗、伪装攻击
传统方法:口令
- 容易被窃取,安全性弱
使用单项双向认证
单向函数
- A给Host发送Passwd
- Host得到 M D ′ = H ( P ) MD' = H(P) MD′=H(P)
- Host将MD’与MD比较
- 相同通过认证,反之拒绝
字典攻击,掺杂
单向函数加密口令文件容易遭受攻击。
- 可以使用常用口令获得密文,然后对比密文查看哪些内容重合 —— 字典攻击
使用掺杂应对
- 得到伪随机序列(可根据注册时间生成),与passwd级联后单向加密,削弱字典成功成功概率
Skey认证
一个认证程序
- A键入随机数R
- 计算 f ( R ) , f 2 ( R ) . . . , f 100 ( R ) f(R),f^2(R)...,f^{100}(R) f(R),f2(R)...,f100(R),得到的值分别为 x 1 , . . . , x 100 x_1,...,x_{100} x1,...,x100,将 x 101 x_{101} x101和A的姓名存入数据库中
- A登录的时候输入姓名和 x 100 x_{100} x100,计算机计算 x 101 x_{101} x101并比较
- 相等通过认证
- 计算机用 x 101 x_{101} x101取代 x 100 x_{100} x100,A保存 x 101 x_{101} x101清除 x 100 x_{100} x100
双钥
- H给A发送随机数R
- A给H发送 I D A 和 E A S ( R ) ID_A和E_{A_S}(R) IDA和EAS(R) (对R签名)
- H检索A公钥,解密(验证签名)得到 R ′ R' R′
- R == R’通过验证
H对A认证,但A没对H认证,单向认证
联锁协议
- A和B交换公钥
- A B 互相发送经过对方公钥加密的passwd
- A B分别解密得到对方的Passwd
Mallory可以对此实现中间人攻击
SKID身份识别
SKID2/3使用单钥体制
- A给B发送随机数 R A R_A RA,RIPE规定64b
- B给A发送随机数 R B R_B RB 和 H K ( R A , R B , B ) = M A C ( K , R A ∣ ∣ R B ∣ ∣ B ) H_K(R_A, R_B, B) = MAC(K, R_A||R_B||B) HK(RA,RB,B)=MAC(K,RA∣∣RB∣∣B)
- A计算 H K ′ ( R A , R B , B ) = M A C ′ ( K , R A ∣ ∣ R B ∣ ∣ B ) H_K^{'}(R_A, R_B, B) = MAC^{'}(K, R_A||R_B||B) HK′(RA,RB,B)=MAC′(K,RA∣∣RB∣∣B) ,与B发送的值比较,成功认证Bob
不能抵抗中间人攻击
SKID3 双向SKID身份识别
前三步和SKID2一样
- A给B发送 H K ( R B , A ) = M A C ( K , R B ∣ ∣ A ) H_K(R_B,A) = MAC(K,R_B||A) HK(RB,A)=MAC(K,RB∣∣A)
- B算 H K ′ ( R B , A ) H_K'(R_B,A) HK′(RB,A)并比较,相等则认证
也无法抵抗中间人攻击
消息认证
- A对M签名,并将签名发给B(可行
- A用单钥对M加密,把密文发给B(不可行
- A计算M的MAC值,把MAC发给B(不可行
密钥建立协议
- 隐式密钥认证, A确定B的身份,只需要确认密钥
- 密钥确认,A确信未身份识别的B确实有某个密钥
- 显示密钥:A确信已身份识别的参与者有密钥
大嘴青蛙
- A给T 发送 A , E A ( T A , B , K ) A,E_A(T_A,B,K) A,EA(TA,B,K)
- T给B 发送 E B ( T B , A , K ) E_B(T_B,A,K) EB(TB,A,K)
- A和B得到K进行童话
关键: A可以生成好的会话密钥
Yahalom
- A给B发送 A , R A A, R_A A,RA
- B给T发送 B , E B ( A , R A , R B ) B, E_B(A, R_A, R_B) B,EB(A,RA,RB)
- T给A发送 E A ( B , K , R A , R B ) , E B ( A , K ) E_A(B,K,R_A,R_B), E_B(A,K) EA(B,K,RA,RB),EB(A,K)
- A解密第一条消息,提取 K K K,验证 R A R_A RA和第一步发送的 R A R_A RA相同,然后发送给B : E B ( A , K ) E K ( R B ) E_B(A,K) E_K(R_B) EB(A,K)EK(RB)
- B用共享密钥对第一条消息解密,得到K,再用K得到 R B R_B RB,验证是否与2中的 R B R_B RB相同
Needham-Schoroeder
- A给T发送 A , B , R A A,B,R_A A,B,RA
- T给A 发 E A [ R A , B , K , E B ( A , K ) ] E_A[R_A,B,K,E_B(A,K)] EA[RA,B,K,EB(A,K)]
- A解密得出K,验证 R A R_A RA是否与1的相等,给B发 E B ( A , K ) E_B(A,K) EB(A,K)
- B对消息解密得到K,生成随机数 R B R_B RB,给A发送 E K ( R B ) E_K(R_B) EK(RB)
- A对消息解密得到 R B R_B RB,生成 R B − I R_B-I RB−I (I是索引号码),给B发送 E K ( R B − I ) E_K(R_B-I) EK(RB−I)
- B用K对消息解密,验证得到明文为 R B − 1 I R_B-1I RB−1I
防止重放攻击
安全漏洞:旧的会话密钥仍有价值
Otway-Rees协议
- A给B发 I , A , B , E A ( R A , I , A , B ) I,A,B,E_A(R_A,I,A,B) I,A,B,EA(RA,I,A,B)
- B给T发 I , A , B , E A ( R A , I , A , B ) , E B ( R B , I , A , B ) I,A,B,E_A(R_A,I,A,B),E_B(R_B,I,A,B) I,A,B,EA(RA,I,A,B),EB(RB,I,A,B)
- T给B发 I , E A ( R A , K ) , E B ( R B , K ) I,E_A(R_A,K), E_B(R_B,K) I,EA(RA,K),EB(RB,K)
- B对收到的消息解密求出K,将属于A发的消息发给A E A ( R A , K ) E_A(R_A,K) EA(RA,K)
- A解密得到K和 R A R_A RA并验证
Kerberos
- A给T发送 A , B A,B A,B
- T给A发送 E A ( T , L , K , B ) E B ( T , L , K , A ) E_A(T,L,K,B) E_B(T,L,K,A) EA(T,L,K,B)EB(T,L,K,A)
- A对第一条消息解密求出K,给B发送消息 E K ( A , T ) , E B ( T , L , K , A ) E_K(A,T), E_B(T,L,K,A) EK(A,T),EB(T,L,K,A)
- B对收到消息解密得到K,然后把 T + I T+I T+I,K加密后发给A : E K ( T + I ) E_K(T+I) EK(T+I)
- A对收到消息解密得到 T + I T+I T+I验证正确性
协议可行,但要求时钟域T的始终同步。
这个结果是把始终同步到安全的帝国是服务器的几分钟内,并在这个时间间隔内重放获得
EKE协议
- A给 B发 A , E P ( K ′ ) A, E_P(K') A,EP(K′)
- B给A发 E P [ E K ′ ( K ) ] E_P[E_{K'}(K)] EP[EK′(K)]
- A给B发 E K ( R A ) E_K(R_A) EK(RA)
- B给A发 E K ( R A , R B ) E_K(R_A,R_B) EK(RA,RB)
- A给B发 E K ( R B ) E_K(R_B) EK(RB)
- B 用K对消息解密得到 R B R_B RB认证
3-6是双向认证
秘密分拆协议
- T生成随机串R, 长度等同M
- S = M ⊕ R S = M\oplus R S=M⊕R
- T把R分给A,把S给B
- A和B将各自的比特串异或 M = S ⊕ R M = S\oplus R M=S⊕R
技术相对安全,每一部分本身没有价值
拆给四方
- T生成 E,F,G
- 异或得到 U = M ⊕ E ⊕ F ⊕ G U = M\oplus E\oplus F\oplus G U=M⊕E⊕F⊕G
- E给A F给B G给C U给D
但是如果任何一部分丢失了,且T不再,相当于该信息丢失了
秘密广播协议,会议密钥分配
密码协议安全性
缺陷存在原因
- 设计者误解密码技术
- 照搬了协议的某些特性
- 对某一特定环境盒安全需求研究不足
对协议的攻击
- 已知明文攻击
- 选择密文攻击
- 预言者会话攻击
- 并行会话攻击
分析
- 攻击检验发
- 逐个对协议攻击,检验是否能抵抗。主要使用语言描述形式
- 形式语言逻辑分析
- 用非专门语言盒验证工具对协议进行模型建立然后验证
- 开发专家系统
- 分析只是,新人逻辑
- 密码系统的代数特点进行验证