https协议握手总结



     https利用了对称加密能加密大量数据,非对称加密能加密短小数据的长处,属于混合加密,不知道这样的称呼是否合适。核心在于,使用了非对称加密如RSA算法对对称加密的算法秘钥进行加密,以达到增强非对称加密算法的目的。为了便于描述我们定义几个函数:

    y=sha1(x)   对数据x取摘要,hash算法是sha1

    y=des(key,x)   对数据x进行加密,加密秘钥是key

    y=rdes(key, x)  对数据进行解密,解密秘钥是key

    y=rsa(key, x) 非对称加密,对数据x进行加密,加密秘钥是公钥key

    y=rrsa(key,x) 非对称解密,对数据进行解密,揭秘迷药是key

    y=rand() 返回一个随机密码,用于对称加密的秘钥


   y是以上算法的返回结果。


  我们约定客户端C,和服务端S进行数据的交互,可以是握手,下面描述一下数据的交互方式。


  1.首先客户端C把自己支持的对称加密算法(如RSA) ,非对称加密算法(如DES),摘要算法(如SHA1) 发送给服务器S

  2.服务器S拿到这些信息后,开始初始化自己的加密算法配置,生成非对称加密密钥对儿pub-key1,pri-key1,

        并把如  下数据返回给客户端C:

        数据可能包括:服务器S的身份信息,网站的地址,和加密算法集合(如RSA pub-key1, DES,SHA1),这些信息可

        能以证书的形势返回给客户端C。

 3.客户端C拿到这些信息后开始校验证书的合法性,完成这些校验后开始准备握手消息msg1,msg1是明文的。

     然后生成一个随机密码 sec1=rand() ,对消息进行摘要 hash1=sha1(msg1),加密握手消息     msg2=des(sec1,msg1),  对随机密码sec1进行加密 sec2=rsa(pub-key,sec1).  最后将hash1,sec2,msg2发送给服务器S。由此可见随机密码使用了非对称加密进行了加密,msg2是对称加密的结果,hash1用来保证传输过程中消息没有被篡改。


 4.服务端S 拿到hash1,sec2,msg2后开始解密, 首先使用自己的私钥pri-key解密随机密码 sec3=rrsa(pri-key, sec2), 解密消息msg3=rdes(sec3,msg2), 对解密后的消息做摘要hash2=sha1(msg3). 不出意外的话,解密后的sec3应该等于sec1,msg3应该等于msg1, hash2应该等于hash1。 如果两个hash相同,说明解密成功。

 2.服务端S收到握手消息后应该回给客户端。这个过程和客户端唯一的区别就是这次服务端使用pri-key对返回的数据进行加密,而客户端C使用pub-key进行解密。

   




    总结一下:这是一个混合加密算法,hash用于数据完整性校验, 非对称加密算法rsa用于加密对称加密算法des的秘钥,这样从逻辑上说des的key在rsa的保护下变成了非对称加密算法。因为key是非对称加密,间接来说数据就是非对称加密了。

   


猜你喜欢

转载自blog.csdn.net/mtaxot/article/details/53760784