基于N-H协议的安全通信协议设计
安全通信协议的一次尝试
摘要
当前网络通信安全已经成为小到影响人们生产生活,达到影响社会经济发展的重要因素,而网络通信协议的安全性也就至关重要。本文中作者简要描述了几个经典的密钥交换和认证协议,并对这些协议的可能被攻击的方式和原因进行了描述,总结出了设计安全协议的一般原则。之后作者从这些原则出发,设计出了一个能够抵抗大多数协议攻击方式的密钥交换及认证协议。
一、协议描述
1. Needham-Schroeder协议
协议目的 基于认证服务器实现双向认证和密钥交换。
变量表
变量 | 含义 |
---|---|
$T$ | Trent |
$R_i$ | i生成的随机数 |
$E_i$ | 使用i的密钥进行加密 |
$K$ | 会话密钥 |
$M$ | 消息 |
$A\ and\ B$ | 通信双方(Alice,Bob) |
协议流程
$(A\rightarrow T):A,B,R_A$
$(T\rightarrow A):E_A(R_A,B,K,E_B(K,A))$
$(A\rightarrow B):E_B(K,A)$
$(B\rightarrow A):E_k(R_B)$
$(A\rightarrow B):E_K(R_B-1)$
$(A\leftrightarrow B):E_k(M={\dots})$
协议描述
- Alice想要与Bob进行通信,向认证服务器Trent发送通信双方$A,B$,与一个自己生成的随机数$R_A$。
- Trent在收到Alice的消息后使用其与Alice的共享密钥$E_A$加密前一消息中的随机数,$B$,其为Alice和Bob分配的会话密钥$K$和由Trent与Bob的共享密钥所加密的$(K,A)$。
- Alice收到消息后进行解密,确认随机数和通信方正确后保存会话密钥$K$,并将消息的最后一部分发送给Bob,使得Bob可以知道与其进行通信的对象和会话密钥。
- Bob对消息进行解密后向Alice发送使用会话密钥加密的随机数。
- Alice收到后进行解密并将此随机数减一后再使用会话密钥加密后发回给Bob。
- 此时,Alice和Bob的认证和密钥交换已经完成,双方可以在会话密钥下进行保密通信。
攻击方式
消息重放攻击
由于在上述流程中消息(4)不具有新鲜性,所以如果攻击者获知以前的一个工作密钥,则可以通过重放消息(4)于Bob建立会话。
攻击原因
攻击者利用消息的再生能力生成诚实用户所期望的消息格式,并重新发送,
2. Needham-Schroeder公钥认证协议
协议目的 通信双方在可信第三方的条件下使用公钥系统建立行的共享密钥并实现认证。
变量表
变量 | 描述 |
---|---|
$A\ and\ B$ | 通信双方Alice与Bob |
$T$ | 可信第三方 |
$K_{ij}$ | i与j的公共密钥 |
$T_i$ | 由i生成的时间戳 |
$M_i,N_i$ | 由i生成的随机数 |
$K_i^{-1}$ | $i$的私钥 |
协议流程
- $(A\rightarrow T): A,B$
- $(T\rightarrow A):{K_b,B}_{K_t^{-1}}$
- $(A\rightarrow B): {N_a,A}_{K_b}$
- $(B\rightarrow T):A,B$
- $(T\rightarrow B):{K_a,A}_{K_t^{-1}}$
- $(B\rightarrow A): {N_a,N_b}_{K_a}$
- $(A\rightarrow B): {N_b}{K{b}}$
协议描述
- Alice想要与Bob进行通信,首先向Trent表明两人的身份。
- Trent返回使用自己私钥签名的Bob 的公钥。
- Alice使用Bob的公钥加密一个随机数并表明自己的身份。
- Bob使用私钥解密后向Trent确认,发送Alice和自己的身份。
- 同样的,Trent返回自己签名的Alice的公钥。至此,Alice和Bob双方已经获得了对方的公钥。
- Bob使用Alice的公钥加密先前受到的随机数和自己产生的另一个随机数。
- Alice使用Bob的公钥回复Bob产生的随机数。
攻击方式
中间人攻击:中间人Malice冒充Alice与Bob建立了共享秘密。同时也是预言机攻击,因为Alice与Malice建立通信后Malice就可以获得由Alice无意中解密的Bob的随机数。
- $(A\rightarrow M): {N_a,A}_{K_m}$
- $(M\rightarrow B):{N_a,A}{K{b}}$
- $(B\rightarrow M):{N_a,N_b}_{K_a}$
攻击原因
传递的消息由公钥加密,而公钥是公开的,无法确定消息来源。同时在步骤6,7中Alice无意中将Bob生成的随机数解密,使得攻击者能够利用此解密结果通过Bob最后的验证。
3. Neuman-Stubblebine协议
协议目的 通信双方在可信第三方的条件下实现认证及密钥交换。
变量表 同上。
协议流程
$(A\rightarrow B):A,N_a$
$(B\rightarrow T):B,{A,N_a,T_b}{K{bt}},N_b$
$(T\rightarrow A):{B,N_a,K_{ab},T_b}{k{at}},(A,K_{ab},T_b),N_b$
$(A\rightarrow B):{A,K_{ab},T_b}{K{bt}},{N_b}{K{ab}}$
$(A\rightarrow B):M_a,{A,K_{ab},T_b}{K{bt}}$
$(B\rightarrow A):M_b,{M_a}{K{ab}}$
$(A\rightarrow B):{M_b}{K{ab}}$
协议描述
- Alice告知Bob想要与其进行安全通信。将其身份与一随机数发送给Bob。
- Bob收到消息后生成自己的随机数与一个时间戳,并使用自己与Trent的共有密钥加密后发送给Trent。
- Trent收到消息后生成一个会话密钥,还将此会话密钥使用与Bob的共有密钥加密后发送给Alice。
- Alice将消息后半部分转发给Bob,同时验证$N_a$是否为开始时的值。而Bob则会验证$T_b$和$N_b$与开始时一致。
- Alice向Bob发送先前从Trent处收到的信息,并附加一个新的随机数。
- Bob也发送一个新的随机数并将Alice的随机数用会话密钥加密后一并发回。
- Alice将Bob 的随机数使用会话密钥加密后发回,Bob验证无误后,此时通信已经成功建立。
攻击方式
- 归因于类型缺陷攻击:由于协议中未定义变量的类型,所以攻击者Malice可以使用一次性的Nonce代替共享密钥,而Malice只需要将此Nonce设置为一个对于当前加解密算法有效的密钥即可。又因为Trent返回的票据与Bob向Trent发送的请求信息有着相似的结构,所以只需要截获Bob所发送的信息,就可以将此信息作为虚假票据发给Bob,而Bob则无法判断其正确性。
攻击原因
协议中的消息部分的类型信息不明确。消息(2)与消息(4)的加密部分有着非常相似的结构,区别仅仅是第二部分是Nonce还是会话密钥,又因为Nonce是公开的,Alice就可以反射这条消息,而Bob无法确认此消息是否来自Trent,但确实可以使用其与Trent的共享密钥解密,则Bob相信Nonce为共享密钥。则Alice不通过Trent的认证就与Bob建立了共享密钥。
4. Otway-Rees协议
协议目的 使得通信双方通过可信第三方交换会话密钥。
变量表 同上。
协议流程
$(A\rightarrow B):M,A,B,{N_a,M,A,B}{K{at}}$
$(B\rightarrow T):M,A,B,{N_a,M,A,B}{K{at}},{N_b,M,A,B}{K{bt}}$
$(T\rightarrow B):M,{N_a,K_{ab}}{K{at}},{N_b.K_{ab}}{K{bt}}$
$(B\rightarrow A):M,{N_a,K_{ab}}{K{at}}$
协议描述
- Alice想要与Bob建立通信,向其发送通信双方名称和一Nonce,还有Alice与可信服务器Trent的共享密钥加密的随机数和通信方。
- Bob收到消息后向Trent转发消息的加密部分,并添加使用自己与Trent共享密钥加密的通信双方和自己生成的一个随机数。
- Trent返回用于Alice和Bob分别的共享密钥加密的会话密钥。
- Bob收到消息解密后检查$N_b$是否正确,并把Alice的部分转发给Alice。
- Alice解密后确认$N_a$是否正确,此时双方密钥交换已经完成。
攻击方式
- 归因于类型缺陷攻击:由于Alice在第一条消息中的随机数是以明文形式发送,而且在最后一条消息Alice获取密钥的消息格式与第一条相似,都包含相同而一个随机数,所以攻击者Malice就可以冒充Bob,将Alice发送给其的第一条消息发回给Alice,由于无法判定变量类型,Alice会将随机数外的数据$M||A||B$当作会话密钥,此时Malice就在未经可信第三方Trent的允许下与Alice建立了通信。
攻击原因
通信主体无法确认消息中变量的类型。在消息(4)中读取到Nonce后Alice就会将之后的任何内容都当作为会话密钥,而且此消息与消息(1)类似,攻击者就利用这一点,又因为M是明文,就可以发回第一条消息,而Alice无法确认消息来源,只能相信消息从Trent来。
二、安全协议的要点
协议的安全性主要包括时效性,机密性、完整性、认证性和不可抵赖性。在通信协议中如果没有将这些因素全部考虑在内就会存在可能的安全隐患。
1. 协议缺陷的类型
- 基本协议缺陷:在安全协议的设计中没有或者很少防范攻击者的攻击。
- 口令/密钥猜测缺陷:用户从常用词或简单的组合中选取口令,从而使攻击者能够进行口令猜测攻击;或者选取了不安全的伪随机数生成算法构造密钥,使得攻击者可以恢复该密钥。
- 陈旧消息攻击(重放攻击):在通信过程中没有保证消息的新鲜性,从而使得攻击者可以通过重放消息进行攻击。
- 中间人攻击:攻击者将自己伪装于通信双方之间进行通信。
- 预言机攻击:通信主体无意间为攻击者执行了一个密码运算,此主体被认为用作了预言机,就会可能被诱导执行某个协议的一些步骤从而帮助攻击者得到某些原本无法得到的信息。
- 交错攻击:攻击者将某个协议的两个或多个运行实例安排为以交错的方式运行,
- 平行会话攻击:在攻击者的安排下一个协议的两个或多个运行并发执行,从而从一个会话中得到其他会话中困难性问题的答案。
- 反射攻击:当一个诚实的主体给某个意定的通信方发送消息时,攻击者截获该消息,并将该消息返回给消息的发送者。目的是欺骗消费者提供“预言服务”。
- 归因于类型缺陷攻击:由于协议中消息中变量类型不明确导致攻击者可以把其他类型信息当作密钥从而导致协议安全性被破环。
- 密码服务滥用攻击:l协议中的密码算法没有提供正确的保护,从而在协议中缺少所需要的密码保护。
- 前向保密失败:过去泄露的影响到后来的消息安全。
2. 安全协议
通过以上描述,我们可以总结出安全通信协议所需要的要素:
- 需要有随机数或挑战值来确保消息的新鲜性。由于单纯靠时间戳会受到允许时间之内的重放消息,单纯使用挑战值又会因为存储的挑战值越来越多影响性能,故两者将配合使用。
- 尽量提供机制认证消息来源,如签名机制。
- 不能随意发送所收到加密消息的解密结果,不能充当预言机。
- 协议中的各个消息不应能被修改、合成为另外消息的应答。
- 协议的两个实例之间不应有任何相关性,且一个实例中的任何消息不应成为其他实例的回应。
- 协议应该提供机制确认消息中的变量类型,以此预防归因于类型缺陷的攻击。
- 提供机制确保消息完整性。
- 过去泄漏的信息不应该影响到后来的消息。
三、安全协议设计
基于上述原则,本文将设计一种安全的密钥交换和认证协议,并可以抵抗上述所有的攻击方式。首先需要作出一些必要的假设
协议假设
- 存在可信第三方Trent。
- Trent与任意通信主体都有共享密钥,此密钥可以通过公钥系统进行分发。
- 攻击者不能破解任何自己不能解密的内容。
- 消息在传播中不会丢失或改变。
- 消息的各个部分间需要加上特定填充(padding),而且此填充与消息内容不会碰撞。通信主体在接收到消息后先要进行填充搜索,如在消息$M,A,B,{M,A,B,N_a}{K{at}}$中接收方可以区分共有四个部分,即使可能不知道这四个部分分别是什么消息类型,同时Trent在解密第四部分后同样可以判断出共有四个部分。
协议流程
$(A\rightarrow B):M,A,B,{N_A,M,A,B}{K{AT}}$
$(B\rightarrow T):M,A,B,{N_A,M,A,B}{K{AT}},{N_B,M,A,B}{K{BT}}$
$(T\rightarrow B):M,{N_A,M,A,B,K_{AB}}{K{AT}},{N_B,M,A,B,K_{AB}}{K{BT}}$
$(B\rightarrow A):M,A,B,{N_A,M,A,B,K_{AB}}{K{AT}}$
$(A\rightarrow B):M,A,B,{M,N_{A2},A,B}{K{AB}}$
$(B\rightarrow A): M,A,B,{M,N_{A2}-1,A,B}{K{AB}}$
协议描述
- Alice想要和Bob交换密钥并建立通信,首先确定一个会话序列号$M$用来标记整个协议流程,表明通信双方,再发送一个由Alice与Trent共享密钥加密的Nonce、会话序列号和双方身份。
- Bob收到Alice的通信请求后,将会话序列号、通信双方、转发Alice的加密内容再加上一个由Bob与Trent共享密钥加密的Nonce、会话序列号和双方身份。
- Trent收到消息后分别解密两块加密内容,确认两块密文中的序列号与通信双方是否与明文中相等,若相等则返回给Bob信息:会话序列号、分别由Trent和Alice、Bob共享密钥加密的包含对应Nonce、会话序列号、同通信双方和会话密钥。
- Bob收到消息后解密自己的部分,并确认Nonce和会话序列号的正确性后,将会话序列号、通信双方和Alice和Trent的加密部分发送给Alice。
- Alice收到消息后解密自己的部分,验证序列号,通信双方和Nonce的正确性,若正确则给Bob发送消息:会话序列号、通信双方和由会话密钥加密的会话序列号、通信双方和一个新的Nonce。
- Bob收到消息并使用会话密钥解密后验证会话序列号的正确性,若正确,使用会话密钥加密会话序列号、Alice的新Nonce-1和通信双方发回给Alice。
- Alice收到并解密认证后,协议结束,双方已完成密钥交换和认证。
协议分析
- 所有通信方在接受消息后首先要判断会话序列号$M$,如果之后的加密内容中的序列号值不匹配则拒收消息。因为此序列号始终需要匹配,攻击者就不能进行替换,从而保证了协议不会受到重放攻击。
- 每一个加密消息中都有会话序列号和要共享密钥的通信双方,防止中间人冒充其中一方。
- 前两个Nonce$N_A,N_B$只对Trent可见,而对对方不可见,使得只要可以确认此Nonce,就可以确认它来自Trent。
- 假设5确保了接收方不会将消息中的某几个部分当成一个部分,也不会将一个部分分成几个部分,有效地避免了归因于类型缺陷的攻击。
- 此协议中的明文部分始终只会有序列号和通信双方,所以反射攻击或平行会话攻击不会使得某一方充当预言机。
- 为了更高程度地保证安全性,协议中包含了很多的冗余,而这些冗余也可能会使协议的效率有所降低。
四、总结
本文探讨了安全通信协议的重要性,对一些具有代表性的密钥交换和认证协议进行了分析梳理,找到了其易受攻击的方法和原因。由此总结了针对协议攻击的若干类型,进而得出设计安全协议的一般原则。最后,作者通过结合这些原则设计出了一套能够抵抗已知攻击的密钥交换和认证协议,并对其进行了详细的描述和分析。
通过本次作业,我对通信协议的了解程度得到了很大程度的加深,并且对协议的分析也有了一定的实践经验,作为计算机专业的学生这些知识和技能都会在以后的学习工作中派上用场。更加重要的是这种全面考虑的设计思维将对以后各种各样的任务都有积极影响。