私钥加密协议中的密钥如何交换?


12

Windows NT使用点对点协议,在该协议中,客户端可以使用流密码对带有某些密钥的消息数组进行加密,从而与服务器“安全”地通信。服务器还使用相同的密钥加密其响应。但是,它如何知道此键?kk

更笼统:如果Alice和Bob使用在同一私钥上运行的某种加密/解密算法,那么交换此密钥的安全方法是什么?(不使用其他课程重点)k

在研究私钥密码学时,我总是问自己这个问题。


Answers:


6

在当前的计算基础架构下,大多数私钥算法都依赖于某些计算的不可行性,例如将数字分解为主要因子。

同时,它们中的大多数在用于加密和解密时也需要大量计算,因此,整个消息流都不会使用私钥进行加密。而是,使用某些其他(强度较低的)算法对消息进行加密,并且使用私钥对用于加密的密钥进行加密。

当然,正如您所指出的那样,密钥的安全交换仍然是一个问题,可以在某种程度上通过以下方式解决:

  • Diffie-Hellman密钥交换:使用模块化技术来安全地交换密钥。
  • 单/多密钥分发中心(KDC):使用基于信任的第三方的票务系统。
  • Kerberos身份验证协议:基于KDC的相对复杂的协议。

7

每当Alice和Bob希望就同一私钥达成一致时,最流行的方法是使用Diffie-Hellman。其工作方式如下:

  1. 首先选择两个公共值,假设和。(这些通常是非常大的素数,使用该协议的每个人都知道)。= 17n=13g=17

  2. 爱丽丝(Alice)选择一个私人价值,鲍勃(Bob)选择一个私人价值。这些是他们自己的私密。b = 7a=3b=7

  3. 爱丽丝计算:,鲍勃计算:,在这种情况下,和,它们彼此交换值(可能是通过聊天),即每个人都知道 和的值。A=gamodnB=gbmodnA=12B=4AB

  4. 爱丽丝计算:,鲍勃计算:,在这种情况下,。K=BamodnK=AbmodnK=12

现在,爱丽丝和鲍勃都同意将值作为其键。请注意,由于值和以及非常大的质数,窃听者几乎不可能分解它们并自己计算密钥。Kng

私钥密码学中的一个问题是中间人攻击,这是选择公钥密码学而不是私钥密码学的主要原因之一。


5

首先,一个术语要点:您所描述的是对称加密,参与者之间共享的密钥通常称为秘密密钥;“私钥”通常是指只有一个参与者知道的公钥加密中的一部分密钥。

分发密钥的方式有两种:可以以某种物理上安全的方式进行传输,也可以使用其他形式的加密(通常为公钥加密)进行传输。

有一些交换密钥的方法,这些方法不需要秘密的通信通道。最受欢迎的是Diffie-Hellman密钥交换协议。Diffie-Hellman的原理是,每个参与者都生成自己的密钥对,并且存在一种数学运算,该运算从一个公共密钥和一个私有密钥构造出大量数字。这种数学运算具有一个非常有趣的属性:大量数字可以由Alice的私钥和Bob的公钥构造而成,也可以由Bob的私钥和Alice的公钥构造而成。无论哪种方式,您都会得到相同的数字。因此,爱丽丝(Alice)和鲍勃(Bob)交换了他们的公钥,并且双方都知道了大数字,然后可以将其用作秘密密钥。窃听者可以找出两个公钥,但是不可能仅从公钥中找到大量公钥。

Diffie-Hellman密钥交换允许两方交换秘密,而不管是谁在听。但是,它不会向Bob验证Alice的身份,反之亦然。因此,它很容易受到中间人攻击:Mallory与Alice(认为她正在与Bob交谈)执行密钥交换,并分别与Bob(认为他正在与Alice进行交谈)交换密钥,因此可以决定或最不知道秘密。

当攻击者可以拦截和注入消息时,参与者需要更多的密码来相互认证。(被动攻击者实际上意味着基础传输协议提供了身份验证。)一种简单的方法是让每个参与者都已经知道彼此的公钥。如果爱丽丝知道鲍勃的公钥:

  • 爱丽丝可以通过向鲍勃发送挑战来对鲍勃进行身份验证:使用鲍勃的公钥加密的随机值(随机数)。如果Bob可以解密该值并将其发回,则Alice知道她确实在与Bob交谈。
  • 鲍勃可以通​​过向她发送用他的公共密钥签名的消息来向爱丽丝进行身份验证。爱丽丝验证签名以检查她是否真的在和鲍勃说话。

有许多变体在一个方向上使用这些方法中的一种(或另一种变体),而在另一方向上使用相同或不同的方法,或者仅在一个方向上进行身份验证。例如,SSL / TLS(许多-s协议(例如HTTPS,SMTPS,IMAPS等)的加密层)可以使用几种不同的密码组合,通常对客户端进行服务器身份验证,但也可以选择对客户端进行身份验证。对于这个应用程序,Diffie-Hellman既缓慢又麻烦;具有公钥分发的最广泛的算法是RSA

当然,Alice和Bob可能事先不知道彼此的公钥。因此,他们而是依靠信任链:Bob向Alice发送他的公钥,以及第三方的签名声明,确认该密钥确实是Bob的公钥。此签名的语句称为证书,而第三方是证书颁发机构。Bob可能知道第三方,或者第三方可以确认其身份,依此类推。最终,这种信任链(……为Dominique担保为Bob担保的Dominique担保)必须到达Bob已经信任的Ron,这意味着Bob拥有Ron的公钥,并且信任Ron仅签署有效证书。

有些协议不依赖于公钥加密。尤其是,Kerberos协议在基于unix的网络和基于Windows的网络中均用于在客户端和服务器之间建立连接。Kerberos使用称为密钥分发中心(KDC)的中央身份验证服务器。KDC必须将用户的密码存储在数据库中,并且客户端通常会提示用户输入密码。为了避免暴露密码,该协议不直接使用密码,而是使用密码哈希或更普遍的方式将密码应用于密钥

使用此共享机密,客户端和KDC建立安全通道,KDC向客户端发送“票证”。该票证包含一个会话密钥(即,新生成的秘密密钥),以及该密钥的副本,该副本已用在KDC和客户端要联系的服务器之间共享的另一个对称密钥进行了加密。然后,客户端将此加密的副本转发到服务器。服务器解密该消息以获取会话密钥,并生成一个随机数,该随机数将使用会话密钥进行加密并发送回客户端。然后,客户端启动与服务器的安全通道,并使用会话密钥对其进行加密,并首先显示它可以解密随机数:这将向服务器验证客户端的身份。Kerberos会话建立是Needham-Schroeder协议的一种变体。

¹ 从某种意义上讲,密码学家已经尽了很大努力,但是他们找到的最佳方法需要无法实现的计算能力。



3

总有一个简单的解决方案:用户会面并交换密钥。在许多情况下,这不是很实际,但有可能。

除了Diffie-Hellman(DH)密钥交换协议外,还存在量子密钥分发协议。Bennett-Brassard协议BB84是最著名的QKD协议之一。

BB84优于DH的优点在于,只有在离散对数无法有效完成的情况下,DH才是安全的(请参阅离散对数假设以及相关的DDH假设)。但是,BB84 从理论上讲是安全的。也就是说,即使,BB84仍将是安全的(但DH不会)。P=NP

另一方面,对于BB84来说,MITM攻击也是一个问题,必须假设用户使用经过身份验证的渠道来克服此问题(但这通常要求他们预共享身份验证密钥,我们回到第一个问题中)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.