密钥传输是指在协议中一个成员选择会话密钥并安全地传输给其他的一个或多个成员。有时,很难将协议分类成密钥传输协议还是密钥协商协议。有些协议允许两个成员都可以选择并传输自己的密钥,并不确定是两者组合形成一个协商的密钥还是分别各自产生密钥。
1.ISO/IEC 11770-3协议
本节我们分析国际标准ISO/IEC 11770-3中的一些协议。标准假设如果使用带附件签名,则被签名的消息和签名将一起被发送,所以标准并不区分消息恢复签名和带附件签名。
图4.28显示了标准中最简单的机制1。A选择会话密钥并用B的公钥加密后发送给B,加密的消息中还包括A的标识和时间戳TA(或用计数器代替)。在这个协议中以及在标准的所有协议中,使用的公钥加密方法能提供不可延展性和语义安全性。如果加密方法不具有这两个性质的话,攻击者就可以更改包含会话密钥的加密消息中的A和TA。
图4.28 ISO/IEC 11770-3密钥传输机制1
从A的角度来看,机制1提供了一个好的密钥,由于A可以选择新鲜的密钥并且加密方法保证仅A和B知道密钥。但是,A不能得到密钥确认也不能保证B是有效的。由于没有对密钥起源的认证,B不能确保是和谁共享这个密钥。但是,没有对消息起源的认证,B也不能推断KAB是否是新鲜的。
机制2如图4.29所示,它对机制1进行了扩展,添加了A对整个消息的签名。同样可以用计数器代替时间戳TA。和前一个机制一样,为A提供了好的密钥但是得不到B的密钥确认。但是,与机制1相反,A的签名可以使B得到密钥确认。只要B相信A诚实地生成密钥,B也可以获得好的密钥性质。机制2类似于4.2节给出的实体认证协议(图4.3)。事实上,可以通过使用协议的可选择文本域使机制2既符合9798-3标准,又符合11770-3标准。
图4.29 ISO/IEC 11770-3密钥传输机制2
机制3如图4.30所示,它交换了机制2中签名和加密的顺序。机制2和机制3中每个域都是一样的,只要B信任A生成好的密钥,则两个机制达到相同的目标。是否包含时间戳TA(或计数器)也是可选的。但是没有TA的话,B不能得到密钥的新鲜性和密钥确认。
图4.30 ISO/IEC 11770-3密钥传输机制3
图4.31是Denning和Sacco提出的一个相近的协议,它与机制3唯一的区别是省略了B的标识。
图4.31 Denning-Sacco公钥协议
Abadi和Needham给出了攻击(图4.32):恶意的B可以参与A作为发起者的协议运行,再把消息1用C的公钥加密后发送给C,结果C相信是与A共享密钥且B知道密钥。
图4.32 对Denning-Sacco公钥协议的攻击
机制4如图4.33所示,它是一个类似于机制2的两次传输协议。与机制2的主要区别是,A使用随机数NA来获得B的密钥新鲜性和实体认证。只要A信任B生成密钥,他能获得好的密钥和密钥确认性质。B可以获得好的密钥性质但得不到A的认证。
图4.33 ISO/IEC 11770-3密钥传输机制4
在标准中随机数NB是可选的。
机制5如图4.34所示,它是机制4的双向版本,A和B分别选择会话密钥KAB和KBA。标准建议使用单向Hash函数对这两个会话密钥进行组合,这样协议就是严格的密钥协商协议而不是密钥传输协议。标准还建议可以省略消息3中的EB(A,KAB)使KBA成为会话密钥,或者省略消息2中的EA(B,KBA)使KAB成为会话密钥。如果KAB是会话密钥,只有B能获取密钥确认。
图4.34 ISO/IEC 11770-3密钥传输机制5
机制6是ISO/IEC 11770-3标准中最后一个密钥传输协议,如图4.35所示。与所有其他标准协议相反,它仅使用加密而不使用签名。很显然,它要求加密方法是不可延展的,否则所有用于认证的域都可以被攻击者替换。
图4.35 ISO/IEC 11770-3密钥传输机制6
标准说明可以使用单向Hash函数把KAB和KBA组合成一个会话密钥。标准还说明A可以用KAB加密B的消息并认证来自B的消息,B也可以同样地使用KBA。这个协议达到了双向实体认证和双向密钥确认的目标。
在ISO/IEC 11770-3的早期草案中,图4.35中协议的替代者是图4.36中的协议,它就是著名的Helsinki协议。它与图4.35中协议的唯一区别是在消息2中省略了B的标识域。
图4.36 Helsinki协议
Horng和Hsu于1998年提出了对Helsinki协议的攻击,如图4.37所示,它与4.3.2节中所述的Lowe对Needham-Schroeder公钥协议的攻击非常类似。攻击者C诱导A与其开始协议运行,并假冒成A开始与B之间的协议运行。
图4.37 对Helsinki协议的攻击
A和B都认为他们成功地完成了协议运行。但是,如果会话密钥是f(KAB,KBA)(f是单向函数),则A“相信”他与C共享这个密钥,B“相信”他与A共享f(KAB,KBA)。注意,这个攻击并不妨碍隐含密钥认证的目标,因为C并不知道KBA,从而不能计算A和B接收会话密钥。然而,B误认了他的对等实体,从而实体认证目标被破坏了。(www.daowen.com)
2.Needham-Schroeder公钥协议
Needham-Schroeder公钥协议是最早提出的密钥建立协议之一。消息交换如图4.38所示,它与Helsinki协议非常相似,用来提供双向实体认证,但选择性地使用交换随机数NA和NB,NA和NB作为密钥建立的共享秘密。
图4.38 Needham-Schroeder公钥协议
Lowe发现图4.39所示的攻击可以使B不能确认最后一条消息是否来自A。注意,A从未详细地声明他欲与B对话,因此B不能得到任何保证A知道B是他的对等实体。
图4.39 Lowe对Needham-Schroeder公钥协议的攻击
图4.39中的攻击类似于图4.37中的攻击。为了改进Needham-Schroeder公钥协议防止这个攻击,Lowe提出了图4.40所示的协议,它简单地在第2条消息中包含了B的标识。
图4.40 Lowe对Needham-Schroeder公钥协议的改进
3.X.509标准协议
ITU(以前的CCITT)和ISO一起标准化了X.500系列建议来提供目录服务(Directory Service)。目录用来存储公钥证书,标准的第8部分使用这些公钥作为认证框架的基础。这个框架包括一些认证和密钥建立的协议。
X.509标准共有3个具体的协议,分别有1个、2个和3个消息流。后两个协议都是在其之前的协议上增加一条消息而来的。每个协议的目标都是从A到B传输会话密钥,后两个协议还从B到A传输会话密钥。
其中最简单的协议只有A到B的一条消息。标准允许简化协议,省略会话密钥仅提供实体认证。图4.41所示的这个一次传输协议用加密数据形成会话密钥KAB,也是标准唯一的建议。
图4.41 X.509一次传输认证协议
图4.42所示的是两次传输的X.509协议,第2条消息是B对A的应答。消息2除了在签名中包含了A和B的随机数外,与消息1基本上是对称的。
图4.42 X.509两次传输认证协议
图4.43是最终的X.509协议,它包含第3条消息——A对消息2的确认。
图4.43 X.509三次传输认证协议
在这个协议和两次传输协议中,都无须同时包含TB和NA,因为只要TB和NA中的一个就可使A获得KBA的新鲜性。事实上标准说明TB可以清零,正如Burrows等人指出的那样,TB完全是冗余的。标准还说明在消息1中不必对TA进行检验。
4.TLS协议
互联网工程任务组织(Internet Engineering Task Force,IETF)标准化了传输层安全(Transport Layer Security,TLS)协议,为运行于可靠通信的基础设施上的应用提供完全安全的服务,如TCP/IP通信协议簇。TLS协议是“现实世界”中的协议,它包含大量的实际细节并广泛地实施了。
TLS协议描述如何在记录协议(Record Protocol)中保证应用数据的安全性,也详述了在握手协议(Handshake Protocol)中密钥建立的过程。
TLS的握手协议在建立密钥时,有多种不同的选择,可以认为是几种不同的协议。图4.44是其中一种协议的简化版本,它从客户端A传送一个“预先掌握的密钥”(Pre-Master Secret,PMK)给服务器B。TLS标准在这个协议中具体使用了RSA公钥加密算法,其他的算法也是可用的。数字签名算法可以是RSA或DSS。
图4.44 简化的TLS密钥传输协议
会话密钥KAB=MACPMK(NA,NB)。注意,虽然A传送PMK给B,但是计算KAB的方法可以将此协议看成是密钥协商协议。事实上,TLS协议说明4个不同的会话密钥必须从PMK派生而来:在各自的消息方向上,一个用于加密,一个用于数据完整性(MAC计算)。
消息序列Mess_Seq1、Mess_Seq2和Mess_Seq3是到达这个实体的所有之前的交换消息的Hash值,例如:Mess_Seq1=H(NA,NB,EB(PMK)),H是Hash函数。
图4.45是一个改变的TLS密钥协商协议,它基于由g生成的合适群里的有证书的Diffie-Hellman密钥。
图4.45 简化的TLS密钥协商协议
这时PMK=gab,a和b是Diffie-Hellman私钥,ga和gb是相关的公钥。和前面一样,KAB=MACPMK(NA,NB)。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。