原理
步骤一
- 客户端
- 行为操作:
- 生成随机数randoms
- 加密算法清单
- 传输:randoms,加密算法清单
- 已有数据:randoms
- 行为操作:
步骤二
- 服务端
-
行为操作:
- 生成随机数randomc
- 从客户端提交的加密算法清单选择加密算法
- 传输:randomc,算法,ca证书(公钥,服务器地址,ca颁布机构)
-
已有数据:randoms,randomc,ca的秘钥
-
步骤三
- 客户端
- 行为操作:
- ca证书合法性认证:ca证书颁发,服务器地址与证书是否一致
- pre-master(c):客户端生成随机数
- enc-pre-master:利用ca证书的公钥加密
- enc-key(c)协商密钥:fun(randoms+randomc+pre-master)
- hash值(c):随机的文本信息通过hash算法进行压缩加密,获得hash值
- 握手消息(c):hash值(c)被enc-key加密获得握手消息
- 传输:enc-premaster(c),握手消息(c),hash(c)
- 已有数据:randoms,randomc,公钥
- 行为操作:
步骤四
- 服务端
- 行为操作:
- pre-master(s):客户端传递的enc-pre-master使用ca证书密钥解密,获得pre-master(s)
- enc-key(s):计算服务端的协商密钥func(randoms,randomc, pre-master(s))
- hash(s):客户端传递的握手信息(c)用enc-key(s)解密,获得hash(s)
- hash值比较:hash(c) == hash(s)
- 握手信息(s):截取一段hash值为hash1(s),利用enc-key(s)加密计算的握手信息(s)
- 传递信息:hash1(s),握手信息(s)
- 已有数据:randoms,randomc,密钥,hash(s),握手信息(c)
- 行为操作:
步骤五
- 客户端
- 行为操作:
- hash1(c):服务端返回的握手信息(s)使用enc-key(c)解密,获得hash1(s)
- hash比较:hash1(1) == hash(2),若相等表明握手成功,后面的数据传输都使用enc-key来加密数据
- 行为操作:
整理:
客户端
- 随机生成:randomc,pre-master,
- 加密:enc-pre-master=fun(pre-master,公钥)
- 计算enc-key =fun(randomc,randoms,pre-master)
- 握手信息=fun(hash值,enc-key)
服务端
- 随机生成:randoms
- 计算pre-master:pre-master = fun(enc-pre-master,密钥)
- 计算enc-key = fun(random,randoms,pre-master)
- 握手信息=fun(hash值,enc-key)
其中pre-master只有一份,且是对非对称算法加密后从客户端传递给服务端,然后通过随机生成的randomc,randoms计算得到enc-key,接着通过enc-key对hash算法处理后的文本进行加密及解密来比较,完成验证工作。
31031f564bf3d4585a26629740fe6524.jpg
网友评论