使用公开密钥机制进行会话密钥

当我们在进行通信的时候,常常需要在C/S两端分配一个会话密钥,然后利用对称密码算法对通信的数据加密,当然了,也可以使用非对称加密算法,但是非对称加密会使加密速度降低了一个数量级,因此并不适用。那么如何安全的在不安全的信道中分发会话密钥呢?
有两种方式,一种使用共享密钥机制,这样的协议很多,比如D-H密钥分配协议、kerberos认证协议等等。但是使用共享密钥进行会话密钥的分发很麻烦,而且还有各种漏洞。作为工程人员,我们当然不希望进行复杂的多次协商才能完成认证的工作。

那么使用公开密钥机制就可以完成这个工作了。
1、首先A获取B的公钥Eb,然后A随机选择一个随机数Ra,然后将Eb(A,Ra)发送给B。
2、B获取到数据之后,利用自己的私钥解密出结果为A,Ra,然后B获取A的公钥Ea,然后B选择一个会话密钥Ks和一个随机数Rb并将数据Ea(Ra,Ks,Rb)发送给A。
3、A在收到数据之后,使用自己私钥后发现有Ra,这个数据是刚刚发给B的,Ra除了B不可能有任何知道,因为只有B才能解密。所以A确定他对面肯定是B,但是这时候B并不确定对面是不是A,还是H,因为H可以宣称自己是A,所以最好的验证方法是B确定A肯定能够解密发送给A的数据。
4、于是A 在上面收到数据之后,解密之后发现有Rb,和Ks,此时将数据Ks(Rb)发送给B。当然了,此时,B肯定知道它对面通信的是A了,于是这样就完成了相互认证,并分发共享密钥的操作。

那么为什么最后一步不是Eb(Rb),而要Ks(Rb)呢?我个人认为主要有两点:1、Eb是公开的,前者的随机性相当于只有Rb来保证,而后者Ks和Rb只有A才会知道,所以随机性更大;2、还是一样,对称密码算法速度会更快。

你可能感兴趣的:(想到哪写到哪)