关于密钥交换

密钥交换就是通信的双方能够协商用于加密的密钥,并且不会遭到中间人攻击,昨天看了看SSH和https的原理然后想起了中间人攻击,于是看了看关于密钥交换的内容,这里我要说的都是既有对称密钥也有非对称密钥的,一般情况下都是利用非对称密钥来交换密钥,之后,用协定好的密钥使用对称密钥加解密,原因很好理解,因为对称密钥的加解密速度快而非对称密钥的安全性好。

在密码学里一般都是用Alice,Bob,Eve来举例的,Alice和Bob是通信的双方,Eve是不怀好意的中间者。

如果Alice和Bob要通信,那么Alice生成一对共私密钥对a,a’然后将a传给Bob告诉Bob以后用这个加密数据,这个a可以公开传送,因为即使Eve知道a也不能解密,这就是非对称密钥技术的好处,同样Bob也生成一对b,b’吧b传给Alice这样双方就建立起一个加密通道了,不过这个可以中间人攻击的。Eve也生成一对e,e’并把Alice发给Bob的a和Bob发给Alice的b都拦截住,然后分别把e发给Alice和Bob,这样在双方毫不知情的情况下,Eve就可以完全窃听双方的信息了。被攻击的主要原因是无法确认对方的身份,就是说Alice给Bob自己公钥a时,Bob并不能确定Alice是否真的是Alice,或许可能是Eve假扮的,所以相对而言为了确定身份,双方需要知道一个只要双方才知道的秘密(就像暗号一样),然后就有下面的讨论。

有非对称密钥而发展出的数字签名技术就是https的交换密钥的方法,比如你要https访问一个网站,那么这个网站一般会向第三方的权威机构申请一个数字证书,来证明自己的身份。就是说第三方的权威机构是大家都承认的,比如现实中的政府和身份证,身份证我们都相信因为是政府颁发的,而第三方的权威机构就是一个大家都相信并且可以轻易验证的第三方。这样网站有了这么一个数字证书我们就可以完全相信他是我们要访问的网站,而不是其他人。这样用这个证书里的公钥将密钥进行加密传输就起到了交换密钥的作用。

而SSH的方法其实很简单,SSH需要服务器验证你的身份,而不是你去验证服务器,实现你生成好公私密钥对,然后将公钥放到服务器上就好了,当然这个过程可以通过https来协助完成,这样就不会有问题了,这样你发起访问的时候,服务器用这个公钥就可以和你交换密钥之类的。

前面说过了,如果没有什么其他人不知道的信息的话,就很难确定对方的身份,相反,如果双方有个暗号的话,那么就可以利用EKE协议来进行密钥交换。假设Alice和Bob都知道暗号p,Alice生成公私密钥对a,a’然后将公钥a用p加密后传输给Bob,Bob生成一个对称密钥b,然后因为知道p所以可以解密a,然后用a和公钥加密技术加密b得到b’,然后再用p用对称密钥加密技术加密b’得到b”,将b”传给Alice,这样Alice就得到了密钥b,这样就完成了密钥交换,然后Alice和Bob生成随机数Ra,Rb,Alice将用b加密后的Ra传给Bob,Bob加密Ra和Rb传给Alice,Alice再将Rb加密传给Bob,Alice和Bob验证传回的Ra和Rb是否正确,若正确则验证结束,可以信任对方,能够用b进行数据的加解密了。注意到这样一个事实如果加密的东西也就是原文是无法辨认的,那么破译密码的人永远不知道他破译的密码是否正确。所以即使p很坏(比如只有一位),那么中间者无法验证他的猜测是否正确,因为得到的是公钥,依旧无法用它得到有用信息,这样如果中间人攻击的话,很容易就会在后面的验证环节露出马脚,所以EVE协议还是很不错的。

大概就这些吧,各位如果对密码学感兴趣的话可以看一看公钥密钥加密的内容,以及相关的一些数论内容,都是挺有趣的呢~

您可能喜欢:
我猜您可能还喜欢:
, ,

有 6 条《关于密钥交换》的回复

  1. map4567 | #1

    和md5有关系吗?

  2. leaveskyi | #2

    你好,请问密钥交换就是交换两者的私钥信息对吗?就是意味着传输的是两者的私钥,和密钥分发是不一样 概念对吧?初学者,嘻嘻~希望指教噢

    • isnowfy

      @leaveskyi: 概念应该差不多吧,不过交换的是公钥信息,密钥始终是自己保留任何时候都不会给别人的

      只有交换了公钥,别人才能用你的公钥加密信息然后你用自己的私钥解密别人发你的内容

  3. somebody | #3

    假设Alice和Bob都知道暗号p

    这么暗号怎么知道的。通信前大家都不知道对方。

发表回复