一种区块链安全获取服务器可信数据的方法及系统与流程

文档序号:14748487发布日期:2018-06-22 08:44阅读:237来源:国知局

本发明涉及安全通信领域,尤其涉及一种区块链安全获取服务器可信数据的方法及系统。



背景技术:

区块链智能合约端是运行在区块链上的分布式应用程序,现有技术中,运行在区块链之上的智能合约端通过外部网络获取外部的服务器数据时,智能合约端与服务器之间通过HTTP(超文本传输协议,英文全称为HyperText Transfer Protocol)传输明文数据,传输过程中明文数据容易外泄或者被篡改,导致数据不安全;另外,基于区块链以及区块链智能合约端的分布式特性,区块链智能合约端访问外部服务器时,由于与服务器的传输距离不完全一样,访问服务器时存在时间上的延时,经常出现不同的区块因时间延时获取到服务器的数据不一致的现象,与区块链记录数据一致性的要求不符,存在区块链无法获取可信的一致性数据的缺陷。



技术实现要素:

本发明为解决上述技术问题公开了一种区块链安全获取服务器可信数据的方法及系统。

本发明提供的一种区块链安全获取服务器可信数据的方法,应用于包括客户端、服务器、审计端和区块链智能合约端的系统,包括以下步骤:

步骤S1:所述区块链智能合约端向所述客户端发送第一请求数据;

步骤S2:所述客户端根据所述第一请求数据与所述服务器执行握手操作,握手操作成功则执行步骤S3,握手操作失败则结束;

步骤S3:所述客户端、所述服务器和所述审计端执行协商通讯密钥的操作;在执行协商通讯密钥的操作过程中,所述客户端生成第一客户端MAC加密密钥、第一客户端加密密钥、第一服务器加密密钥和服务器第一MAC加密子密钥,所述服务器生成第二客户端MAC加密密钥、第二客户端加密密钥、第二服务器加密密钥和第二服务器MAC加密密钥,所述审计端生成服务器第二MAC加密子密钥;

步骤S4:所述客户端根据所述第一请求数据组织第二请求数据,使用所述第一客户端加密密钥和所述第一客户端MAC加密密钥对所述第二请求数据进行加密生成加密的第二请求数据,向所述服务器发送所述加密的第二请求数据;

步骤S5:所述服务器使用所述第二客户端加密密钥和所述第二客户端MAC 加密密钥对所述加密的第二请求数据进行验证,当验证通过时,根据验证时得到的第二请求数据组织响应数据,使用所述第二服务器加密密钥和所述第二服务器MAC加密密钥对所述响应数据进行加密得到加密的响应数据,将所述加密的响应数据发送给所述客户端;

步骤S6:所述客户端对所述加密的响应数据进行哈希运算得到第一哈希运算结果,将所述第一哈希运算结果发送给所述审计端;所述审计端将所述服务器第二MAC加密子密钥发送给所述客户端;

步骤S7:所述客户端根据所述服务器第二MAC加密子密钥和所述服务器第一MAC加密子密钥生成第一服务器MAC加密密钥,使用所述第一服务器加密密钥和所述第一服务器MAC加密密钥对所述加密的响应数据进行验证,验证通过则将验证时得到的响应数据发送给所述区块链智能合约端,验证未通过则结束;

步骤S8:所述区块链智能合约端接收到来自所述客户端的所述响应数据时,将所述响应数据写入区块链的区块中。

本发明提供的一种区块链安全获取服务器可信数据的系统包括:区块链智能合约端、客户端、服务器和审计端;

所述区块链智能合约端,包括:

第一发送模块,用于向所述客户端发送第一请求数据;

第一接收模块,用于接收来自所述客户端的响应数据;

写入模块,用于将所述第一接收模块接收的所述响应数据写入区块链的区块中;

所述客户端包括:

第二接收模块,用于接收来自所述区块链智能合约端的第一请求数据;

第一握手模块,用于根据所述第二接收模块接收的所述第一请求数据与所述服务器执行握手操作;

第一协商模块,用于所述第一握手模块完成与所述服务器的握手操作后,执行与所述服务器和所述审计端协商通讯密钥的操作,生成第一客户端MAC加密密钥、第一客户端加密密钥、第一服务器加密密钥和服务器第一MAC加密子密钥;

第一组织模块,用于所述第一协商模块完成与所述服务器和所述审计端协商通讯密钥的操作之后,根据所述第一请求数据组织第二请求数据;

第一加密模块,用于使用所述第一协商模块生成的所述第一客户端加密密钥和所述第一客户端MAC加密密钥对所述第一组织模块组织的所述第二请求数据进行加密生成加密的第二请求数据;

第二发送模块,用于将所述第一加密模块生成的所述第二请求数据发送给所述服务器;

所述第二接收模块,还用于接收来自所述服务器的加密的响应数据;

第一哈希运算模块,用于对所述第二接收模块接收的所述加密的响应数据进行哈希运算得到第一哈希运算结果;

所述第二发送模块,还用于将所述第一哈希运算模块得到的所述第一哈希运算结果发送给所述审计端;

所述第二接收模块,还用于接收来自所述审计端的所述服务器第二MAC加密子密钥;

所述第一协商模块,还用于根据所述第二接收模块接收的所述服务器第二MAC加密子密钥和所述服务器第一MAC加密子密钥生成第一服务器MAC加密密钥;

第一验证模块,用于使用所述第一协商模块生成的所述第一服务器加密密钥和所述第一服务器MAC加密密钥对所述第二接收模块接收的所述加密的响应数据进行验证;

第二发送模块,还用于当所述第一验证模块验证通过时,将所述第一验证模块在验证时得到的响应数据发送给所述区块链智能合约端;

所述审计端包括:

第二协商模块,用于执行与所述服务器和所述客户端协商通讯密钥的操作,生成服务器第二MAC加密子密钥;

第三接收模块,用于接收来自所述客户端的第一哈希运算结果;

第三发送模块,用于当所述第三接收模块接收到所述第一哈希运算结果时,将所述第二协商模块生成的所述服务器第二MAC加密子密钥发送给所述客户端;

所述服务器包括:

第二握手模块,用于与所述客户端的执行握手操作;

第三协商模块,用于执行与所述审计端和所述客户端协商通讯密钥的操作,生成第二客户端MAC加密密钥、第二客户端加密密钥、第二服务器加密密钥和第二服务器MAC加密密钥;

第四接收模块,用于接收来自所述客户端的所述加密的第二请求数据;

第二验证模块,用于使用所述第三协商模块生成的所述第二客户端加密密钥和所述第二客户端MAC加密密钥对所述第四接收模块接收的所述加密的第二请求数据进行验证;

第二组织模块,用于当所述第二验证模块验证结果为通过时,根据所述第二验证模块验证时得到的第二请求数据组织响应数据;

第二加密模块,用于使用所述第三协商模块生成的所述第二服务器加密密钥和所述第二服务器MAC加密密钥对所述第二组织模块组织的所述响应数据进行加密得到加密的响应数据;

第四发送模块,用于将所述第二加密模块得到的所述加密的响应数据发送给所述客户端。

本发明的有益效果是:区块链智能合约端通过客户端获取服务器的响应数据,保证区块链智能合约端写入区块链中每个区块的数据是可信的一致性数据;客户端向服务器发送的第二请求数据、以及客户端从服务器接收的响应数据都是加密的,使客户端与服务器之间传输的数据不会外泄或者被篡改,保证传输数据的安全。

附图说明

图1所示为本发明实施例1中一种区块链安全获取服务器可信数据的方法流程图。

图2-图4所示为本发明实施例2中一种区块链安全获取服务器可信数据的方法流程图。

图5所示为本发明实施例3中一种区块链安全获取服务器可信数据的系统模块组成框图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

本发明中,客户端可以是浏览器、审计端可以是审计服务器。

实施例1

本实施例提供一种区块链安全获取服务器可信数据的方法,应用于包括客户端、服务器、审计端和区块链智能合约端的系统,如图1所示,包括以下步骤:

步骤S1:区块链智能合约端向客户端发送第一请求数据;

步骤S2:客户端根据第一请求数据与服务器执行握手操作,握手操作成功则执行步骤S3,握手操作失败则结束;

步骤S3:客户端、服务器和审计端执行协商通讯密钥的操作;在执行协商通讯密钥的操作过程中,客户端生成第一客户端MAC加密密钥、第一客户端加密密钥、第一服务器加密密钥和服务器第一MAC加密子密钥,服务器生成第二客户端MAC加密密钥、第二客户端加密密钥、第二服务器加密密钥和第二服务器MAC加密密钥,审计端生成服务器第二MAC加密子密钥;

步骤S4:客户端根据第一请求数据组织第二请求数据,使用第一客户端加密密钥和第一客户端MAC加密密钥对第二请求数据进行加密生成加密的第二请求数据,向服务器发送加密的第二请求数据;

步骤S5:服务器使用第二客户端加密密钥和第二客户端MAC加密密钥对加密的第二请求数据进行验证,当验证通过时,根据验证时得到的第二请求数据组织响应数据,使用第二服务器加密密钥和第二服务器MAC加密密钥对响应数据进行加密得到加密的响应数据,将加密的响应数据发送给客户端;

步骤S6:客户端对加密的响应数据进行哈希运算得到第一哈希运算结果,将第一哈希运算结果发送给审计端;审计端将服务器第二MAC加密子密钥发送给客户端;

步骤S7:客户端根据服务器第二MAC加密子密钥和服务器第一MAC加密子密钥生成第一服务器MAC加密密钥,使用第一服务器加密密钥和第一服务器MAC 加密密钥对加密的响应数据进行验证,验证通过则将验证时得到的响应数据发送给区块链智能合约端,验证未通过则结束;

步骤S8:区块链智能合约端接收到来自客户端的响应数据时,将响应数据写入区块链的区块中。

可选地,上述步骤S8之前,还包括:

步骤A1:区块链智能合约端从审计端获取第一哈希运算结果,从客户端获取加密的响应数据;

步骤A2:区块链智能合约端对加密的响应数据进行哈希运算得到第二哈希运算结果,判断第二哈希运算结果是否与第一哈希运算结果一致,是则执行步骤S8,否则结束。

本实施例中,区块链智能合约端判断第二哈希运算结果与第一哈希运算结果一致时则可以确保响应数据是从客户端获取。

可选地,上述步骤A1中还包括:区块链智能合约端从客户端获取第一服务器加密密钥和第一服务器MAC加密密钥;

上述步骤A2中还包括:区块链智能合约端使用第一服务器加密密钥和第一服务器MAC加密密钥对来自客户端的响应数据进行验证,如果验证通过并且判断第二哈希运算结果与第一哈希运算结果一致时执行步骤S8,否则结束。

本实施例中,区块链智能合约端使用第一服务器加密密钥和第一服务器MAC 加密密钥对来自客户端的响应数据进行验证,可以确保响应数据是来自客户端和服务器。

进一步地,上述步骤S5中,服务器使用第二服务器加密密钥和第二服务器 MAC加密密钥对响应数据进行加密得到加密的响应数据,具体为:服务器使用第二客户端MAC加密密钥对响应数据进行加密得到第七MAC值,使用第二客户端加密密钥对响应数据和第七MAC值进行加密生成加密的响应数据;

相应地,上述区块链智能合约端使用第一服务器加密密钥和第一服务器MAC 加密密钥对来自客户端的响应数据进行验证,具体为:

区块链智能合约端使用第一服务器加密密钥对加密的响应数据进行解密得到解密的响应数据和第七MAC值,根据服务器第一MAC加密子密钥对解密的响应数据进行加密得到第九MAC值,判断第九MAC值是否与第七MAC值相等,并判断解密的响应数据是否与来自客户端的响应数据一致,判断结果均为是时则验证通过,否则验证未通过。

具体地,上述步骤S5中,服务器使用第二服务器加密密钥和第二服务器MAC 加密密钥对响应数据进行加密得到加密的响应数据,具体为:服务器使用第二客户端MAC加密密钥按照握手操作时选择的MAC加密算法对响应数据进行加密得到第七MAC值,使用第二客户端加密密钥按照握手操作时选择的对称加密算法对响应数据和第七MAC值进行加密生成加密的响应数据;

相应地,上述步骤A2中还包括:区块链智能合约端从客户端获取客户端选择的算法信息,根据算法信息选择对称加密算法和MAC算法;

上述区块链智能合约端使用第一服务器加密密钥和第一服务器MAC加密密钥对来自客户端的响应数据进行验证,具体为:

区块链智能合约端使用第一服务器加密密钥按照选择的对称加密算法对加密的响应数据进行解密得到解密的响应数据和第七MAC值,根据服务器第一MAC 加密子密钥按照选择MAC算法对解密的响应数据进行加密得到第九MAC值,判断第九MAC值是否与第七MAC值相等,并判断解密的响应数据是否与来自客户端的响应数据一致,判断结果均为是时则验证通过,否则验证未通过。

进一步地,上述步骤S5中,服务器使用第二服务器加密密钥和第二服务器 MAC加密密钥对响应数据进行加密得到加密的响应数据,具体为:服务器按照握手操作时选择的压缩算法对响应数据进行压缩得到第七压缩数据,使用第二客户端MAC加密密钥按照握手操作时选择的MAC加密算法对第七压缩数据进行加密得到第七MAC值,使用第二客户端加密密钥按照握手操作时选择的对称加密算法对第七压缩数据和第七MAC值进行加密生成加密的响应数据;

相应地,上述步骤A2中还包括:区块链智能合约端从客户端获取客户端选择的压缩算法信息,根据压缩算法信息选择压缩算法;

上述区块链智能合约端使用第一服务器加密密钥和第一服务器MAC加密密钥对来自客户端的响应数据进行验证,具体为:

区块链智能合约端使用第一服务器加密密钥按照选择的对称加密算法对加密的响应数据进行解密得到解密的响应数据和第七MAC值,根据选择的压缩算法对来自客户端的响应数据进行压缩得到第八压缩数据,根据服务器第一MAC 加密子密钥按照选择MAC算法对解密的响应数据进行加密得到第九MAC值,判断第九MAC值是否与第七MAC值相等,并判断解密的响应数据是否与第八压缩数据一致,判断结果均为是时则验证通过,否则验证未通过。

可选地,上述步骤S2具体包括:

步骤S21:客户端生成第一随机数,根据第一随机数组织握手请求,将握手请求发送给服务器;

步骤S22:服务器生成第二随机数,根据第二随机数组织握手响应数据,将握手响应数据发送给客户端;

步骤S23:服务器将包括服务器证书的服务器证书链发送给客户端;

步骤S24:服务器向客户端发送握手结束消息;

步骤S25:客户端对接收的服务器证书链进行验证,验证通过则握手操作成功,否则握手操作失败。

进一步地,上述握手请求中还包括加密套件列表;

相应地,上述步骤S22中还包括:服务器根据加密套件列表选择对称加密算法和MAC算法;

上述服务器根据第二随机数组织握手响应数据,具体为:服务器根据第二随机数、选择的对称加密算法和MAC算法组织握手响应数据;

上述步骤S24之后,还包括:客户端根据服务器选择的对称加密算法和MAC 算法选择对称加密算法和MAC算法。

更进一步地,上述握手请求中还包括压缩算法列表;

相应地,上述步骤S22中还包括:服务器根据压缩算法列表选定压缩算法;

上述服务器根据第二随机数组织握手响应数据,具体为:服务器根据第二随机数、选择的压缩算法、选择的对称加密算法和MAC算法组织握手响应数据;

上述步骤S24之后,还包括:客户端根据服务器选择的压缩算法选定压缩算法。

可选地,上述步骤S3具体包括:

步骤S31:客户端与审计端协商,客户端生成第一客户端MAC加密密钥、第一客户端加密密钥、第一服务器加密密钥、服务器第一MAC加密子密钥,审计端生成服务器第二MAC加密子密钥;

步骤S32:客户端与服务器协商,服务器生成第二客户端MAC加密密钥、第二客户端加密密钥、第二服务器加密密钥和第二服务器MAC加密密钥。

进一步地,上述步骤S2中客户端根据第一请求数据与服务器执行握手操作过程中,客户端生成第一随机数,并将第一随机数发送给服务器,获取来自服务器的第二随机数和服务器证书;

相应地,上述步骤S31具体包括:

步骤S311:客户端生成第一预主密钥,根据第一预主密钥、第一随机数和第二随机数生成第一子运算数据和第二子运算数据,将第一随机数、第二随机数、第二子运算数和服务器证书发送给审计端;

步骤S312:审计端生成第二预主密钥,根据第二预主密钥、第一随机数和第二随机数生成第三子运算数据和第四子运算数据;

步骤S313:审计端根据第二子运算数据、第四子运算数据生成第二主密钥,根据第二主密钥、第一随机数和第二随机数生成服务器第二MAC加密子密钥、服务器第二加密子密钥、客户端第二MAC加密子密钥、客户端第二加密子密钥;

上述步骤S313之后,还包括:

步骤S314:审计端将第三子运算数据、服务器第二加密子密钥、客户端第二MAC加密子密钥、客户端第二加密子密钥发送给客户端;

步骤S315:客户端根据第一子运算数据和第三子运算数据生成第一主密钥,根据第一主密钥、第一随机数和第二随机数生成客户端第一MAC加密子密钥、客户端第一加密子密钥、服务器第一加密子密钥和服务器第一MAC加密子密钥;根据客户端第一MAC加密子密钥和客户端第二MAC加密子密钥生成第一客户端 MAC加密密钥,根据客户端第一加密子密钥和客户端第二加密子密钥生成第一客户端加密密钥,根据服务器第一加密子密钥和服务器第二加密子密钥生成第一服务器加密密钥;

上述步骤S32具体包括:

上述步骤S312中还包括:审计端根据第二预主密钥和服务器证书生成第二加密数据;上述步骤S314中,还包括:审计端将第二加密数据发送给客户端;

上述客户端接收到第二加密数据时执行:根据第一预主密钥和服务器证书生成第一加密数据,将第一加密数据和第二加密数据进行乘积运算,将乘积运算结果对服务器证书的公钥的模取余数得到取余数运算结果;

步骤S321:客户端根据第一随机数、第二随机数、服务器证书、取余数运算结果组织第三待加密数据,将第三待加密数据发送给审计端;

步骤S322:审计端根据第三待加密数据、第二主密钥生成第二验证数据,将第二验证数据发送给客户端;

上述步骤S321中,客户端组织第三待加密数据之后,还包括:客户端根据第三待加密数据、第一主密钥生成第一验证数据;

上述步骤S322之后还包括:

步骤S323:客户端根据第一验证数据和第二验证数据生成第三验证数据,使用第一客户端MAC加密密钥和第一客户端加密密钥对第三验证数据进行加密得到第三加密数据,将第三加密数据发送给服务器;

上述客户端得到取余数运算结果之后,还包括:客户端将取余数运算结果发送给服务器;服务器接收到取余数运算结果时执行:使用自身保存的服务器证书的私钥对取余数运算结果进行解密得到解密数据,从解密数据中获取第一预主密钥和第二预主密钥;

上述步骤S323之后还包括:

步骤S324:服务器根据第一预主密钥、第二预主密钥、第一随机数和第二随机生成第二客户端MAC加密密钥、第二客户端加密密钥、第二服务器加密密钥和第二服务器MAC加密密钥,使用第二客户端MAC加密密钥和第二客户端加密密钥对第三加密数据进行验证,验证通过则向客户端发送完成协商通讯密钥的通知,否则结束。

本实施例中,上述步骤S324中,验证通过时,还包括:

步骤S325:服务器根据第一随机数、第二随机数、取余数运算结果、第三加密数据生成第四加密数据,将第四加密数据发送给客户端;

步骤S326:客户端根据第一随机数、取余数运算结果、第二随机数和第三加密数据组织第六待加密数据,将第六待加密数据发送给审计端;

步骤S327:审计端根据第六待加密数据、第二主密钥生成第六验证数据,向客户端发送第六验证数据;

步骤S328:客户端根据第六待加密数据、第一主密钥生成第七验证数据,根据第七验证数据和第六验证数据生成第八验证数据;

步骤S329:客户端根据第八验证数据、第一服务器加密密钥对第四加密数据进行验证,验证通过则执行步骤S4,否则结束。

具体地,上述步骤S325中,服务器根据第一随机数、第二随机数、取余数运算结果、第三加密数据生成第四加密数据,具体为:服务器按照第四预设算法对第一随机数、第二随机数、取余数运算结果、第三加密数据进行运算得到第八运算结果,按照第五预设算法对第一随机数、第二随机数、取余数运算结果、第三加密数据进行运算得到第九运算结果,根据第八运算结果、第九运算结果和自身保存的第四预设数据生成第五验证数据,使用第二服务器MAC加密密钥对第五验证数据按照握手操作时选择的MAC算法进行加密得到第三MAC值, 使用第二服务器加密密钥对第五验证数据和第三MAC值按照握手操作时选择的对称加密算法进行加密生成第四加密数据;

上述步骤S326中,客户端根据第一随机数、取余数运算结果、第二随机数和第三加密数据组织第六待加密数据,具体为:客户端按照第四预设算法对第一随机数、取余数运算结果、第二随机数和第三加密数据进行运算得到第十运算结果,按照第五预设算法对对第一随机数、取余数运算结果、第二随机数和第三加密数据进行运算得到第十一运算结果,根据第十运算结果、第十一运算结果和自身保存的第四预设数据生成第六待加密数据;

上述步骤S327中,审计端根据第六待加密数据、第二主密钥生成第六验证数据,具体为:审计端对第六待加密数据和第二主密钥按照第二预设算法进行运算生成第六验证数据;

上述步骤S328中,客户端根据第六待加密数据、第一主密钥,根据第七验证数据和第六验证数据生成第八验证数据,具体为:客户端对第六待加密数据和第一主密钥按照第一预设算法进行运算得到第七验证数据,将第六验证数据与第七验证数据进行按位异或运算生成第八验证数据;

上述步骤S329具体为:客户端使用第一服务器加密密钥对第四加密数据进行解密得到第五验证数据和第三MAC值;判断第八验证数据是否与第五验证数据一致,是则验证通过,执行步骤S4;否则验证未通过,结束。

进一步具体地,上述步骤S325中还包括:服务器对第五验证数据按照握手操作时选择的压缩算法进行压缩运算得到第三压缩数据;

上述服务器使用第二服务器MAC加密密钥对第五验证数据按照握手操作时选择的MAC算法进行加密得到第三MAC值,使用第二服务器加密密钥对第五验证数据和第三MAC值按照握手操作时选择的对称加密算法进行加密生成第四加密数据,具体为:服务器对第五验证数据按照握手操作时选择的压缩算法进行压缩得到第三压缩数据,使用第二服务器MAC加密密钥对第三压缩数据按照握手操作时选择的MAC算法进行加密得到第三MAC值,使用第二服务器加密密钥对第三压缩数据和第三MAC值按照握手操作时选择的对称加密算法进行加密生成第四加密数据;

上述步骤S329具体为:客户端使用第一服务器加密密钥对第四加密数据进行解密得到第三压缩数据和第三MAC值;对第八验证数据按照握手操作时选择的压缩算法进行压缩运算得到第四压缩数据,判断第四压缩数据是否与第三压缩数据相等,是则验证通过,执行步骤S4;否则验证未通过,结束。

具体地,上述服务器对第五验证数据按照握手操作时选择的压缩算法进行压缩运算得到第三压缩数据,具体为:服务器对第五验证数据中预设字节上的数据按照握手操作时选择的压缩算法进行压缩运算得到第三压缩数据;

上述服务器对第八验证数据按照握手操作时选择的压缩算法进行压缩运算得到第四压缩数据,具体为:服务器对第八验证数据中预设字节上的数据按照握手操作时选择的压缩算法进行压缩运算得到第四压缩数据。

可选地,上述步骤S311中,客户端生成第一预主密钥,具体为:客户端按照预设格式根据预设的数据生成第一预主密钥;

上述步骤S312中,审计端生成第二预主密钥,具体为:客户端按照预设格式根据预设的数据生成第二预主密钥。

可选地,上述步骤S311中,客户端根据第一预主密钥、第一随机数和第二随机数生成第一子运算数据和第二子运算数据,具体为:客户端根据第一预主密钥、自身保存的第一预设数据、第一随机数和第二随机数生成第一运算数据,将第一运算数据进行分割生成第一子运算数据和第二子运算数据;

上述步骤S312中,审计端根据第二预主密钥、第一随机数和第二随机数生成第三子运算数据和第四子运算数据,具体为:审计端根据第二预主密钥、自身保存的第一预设数据、第一随机数和第二随机数生成第二运算数据,将第二运算数据进行分割生成第三子运算数据和第四子运算数据。

可选地,上述握手操作过程中客户端和服务器还选择对称加密算法和MAC 算法;

上述步骤S313具体为:审计端根据第二子运算数据、第四子运算数据生成第二主密钥,根据第二主密钥、自身保存的第二预设数据、第一随机数和第二随机数生成第二通讯密钥,根据握手操作时选择的MAC算法和对称加密算法将第二通讯密钥进行分割得到服务器第二MAC加密子密钥、服务器第二加密子密钥、客户端第二MAC加密子密钥、客户端第二加密子密钥;

上述步骤S315中,客户端根据第一子运算数据和第三子运算数据生成第一主密钥,根据第一主密钥、第一随机数和第二随机数生成客户端第一MAC加密子密钥、客户端第一加密子密钥、服务器第一加密子密钥和服务器第一MAC加密子密钥,具体为:客户端根据第一子运算数据和第三子运算数据生成第一主密钥,根据第一主密钥、自身保存的第二预设数据、第一随机数和第二随机数生成第一通讯密钥,根据握手操作时选择的MAC算法和对称加密算法将第一通讯密钥进行分割得到客户端第一MAC加密子密钥、客户端第一加密子密钥、服务器第一加密子密钥和服务器第一MAC加密子密钥;

上述步骤S324中,服务器根据第一预主密钥、第二预主密钥、第一随机数和第二随机生成第二客户端MAC加密密钥、第二客户端加密密钥、第二服务器加密密钥和第二服务器MAC加密密钥,具体为:服务器根据第一预主密钥、第二预主密钥、自身保存的第一预设数据、第一随机数和第二随机数生成第三主密钥,根据第三主密钥、自身保存的第二预设数据、第一随机数、第二随机数生成第三通讯密钥,根据握手操作时选择的MAC算法和对称加密算法将第三通讯密钥进行分割得到第二客户端MAC加密密钥、第二客户端加密密钥、第二服务器加密密钥和第二服务器MAC加密密钥。

具体地,上述步骤S313中,审计端根据第二子运算数据、第四子运算数据生成第二主密钥,具体为:审计端将第二子运算数据和第四子运算数据进行按位异或运算生成第二主密钥;

上述步骤S315中,客户端根据第一子运算数据和第三子运算数据生成第一主密钥,具体为:客户端将第一子运算数据和第三子运算数据进行按位异或运算生成第一主密钥;

上述步骤S315中,客户端根据客户端第一MAC加密子密钥和客户端第二MAC 加密子密钥生成第一客户端MAC加密密钥,根据客户端第一加密子密钥和客户端第二加密子密钥生成第一客户端加密密钥,根据服务器第一加密子密钥和服务器第二加密子密钥生成第一服务器加密密钥,具体为:客户端将客户端第一 MAC加密子密钥与客户端第二MAC加密子密钥进行按位异或运算生成第一客户端 MAC加密密钥,将客户端第一加密子密钥与客户端第二加密子密钥进行按位异或运算生成第一客户端加密密钥,将服务器第一加密子密钥与服务器第二加密子密钥进行按位异或运算生成第一服务器加密密钥;

上述步骤S324中,服务器根据第一预主密钥、第二预主密钥、自身保存的第一预设数据、第一随机数和第二随机数生成第三主密钥,具体为:服务器根据第一预主密钥、自身保存的第一预设数据、第一随机数和第二随机数按照第一预设算法进行运算得到第一运算数据,根据第二预主密钥、自身保存的第一预设数据、第一随机数和第二随机数按照第二预设算法进行运算得到第二运算数据,将第一运算数据与第二运算数据进行按位异或运算生成第三主密钥;

上述步骤S7中,客户端根据服务器第二MAC加密子密钥和服务器第一MAC 加密子密钥生成第一服务器MAC加密密钥,具体为:客户端将服务器第二MAC 加密子密钥与服务器第一MAC加密子密钥进行按位异或运算生成第一服务器MAC 加密密钥。

可选地,上述客户端根据第一预主密钥和服务器证书生成第一加密数据,具体为:客户端根据第一预主密钥生成第一待加密数据,使用服务器证书的公钥按照第三预设算法对第一待加密数据进行加密得到第一加密数据;

上述审计端根据第二预主密钥和服务器证书生成第二加密数据,具体为:审计端根据第二预主密钥生成第二待加密数据,使用服务器证书的公钥按照第三预设算法对第二待加密数据进行加密生成第二加密数据。

可选地,上述步骤S321中,客户端根据第一随机数、第二随机数、服务器证书、取余数运算结果组织第三待加密数据,具体为:客户端根据自身保存的第三预设数据、按照第四预设算法对第一随机数、第二随机数、服务器证书、取余数运算结果进行运算得到的第四运算结果,按照第五预设算法对第一随机数、第二随机数、服务器证书、取余数运算结果进行运算得到的第五运算结果组织第三待加密数据;

上述客户端根据第三待加密数据、第一主密钥生成第一验证数据,具体为:客户端对第三待加密数据和第一主密钥按照第一预设算法进行运算得到第一验证数据;

上述审计端根据第三待加密数据、第二主密钥生成第二验证数据,具体为:审计端对第三待加密数据和第二主密钥按照第二预设算法进行运算得到第二验证数据;

上述客户端根据第一验证数据和第二验证数据生成第三验证数据,具体为:客户端将第一验证数据与第二验证数据进行按位异或运算生成第三验证数据;

上述步骤S323中,客户端使用第一客户端MAC加密密钥和第一客户端加密密钥对第三验证数据进行加密得到第三加密数据,具体为:客户端对第三验证数据按照握手操作时选择的压缩算法进行压缩运算得到第一压缩数据,使用第一客户端MAC加密密钥对第一压缩数据按照握手操作时选择的MAC算法进行加密得到第一MAC值,使用第一客户端加密密钥对第一压缩数据和第一MAC值按照握手操作时选择的对称加密算法进行加密得到第三加密数据;

上述步骤S324中,服务器使用第二客户端MAC加密密钥和第二客户端加密密钥对第三加密数据进行验证,具体包括:

步骤c1:服务器按照第四预设算法对第一随机数、第二随机数、服务器证书、取余数运算结果进行运算得到第六运算结果,按照第五预设算法对第一随机数、第二随机数、服务器证书、取余数运算结果进行运算得到第七运算结果,根据自身保存的第三预设数据、第六运算结果和第七运算结果组织第四待加密数据;

步骤c2:服务器使用第二客户端加密密钥对第三加密数据进行解密得到第一压缩数据和第一MAC值;

步骤c3:服务器对第四验证数据按照选择的压缩算法进行压缩运算得到第二压缩数据,使用第二客户端MAC加密密钥对第二压缩数据按照选择的MAC算法进行加密得到第二MAC值,判断第二MAC值是否与第一MAC值相等,是则执行步骤c4,否则验证未通过,报错结束;

步骤c4:服务器判断第二压缩数据是否与第一压缩数据相同,是则验证通过;否则验证未通过。

可选地,上述步骤S4中,客户端使用第一客户端加密密钥和第一客户端MAC 加密密钥对第二请求数据进行加密生成加密的第二请求数据,具体为:客户端使用第一客户端MAC加密密钥按照握手操作时选择的MAC算法对第二请求数据进行加密得到第五MAC值,使用第一客户端加密密钥按照握手操作时选择的对称加密算法对第二请求数据和第五MAC值进行加密生成加密的第二请求数据;

上述步骤S5中,服务器使用第二客户端加密密钥和第二客户端MAC加密密钥对加密的第二请求数据进行验证,具体为:服务器使用第二客户端加密密钥按照握手操作时选择的对称算法对加密的第二请求数据进行解密得到第二请求数据和第五MAC值,使用第二客户端MAC加密密钥按照握手操作时选择的MAC 算法对第二请求数据进行加密得到第六MAC值,判断解密得到的第五MAC值是否与第六MAC值一致,是则验证通过,否则验证未通过。

具体地,上述步骤S5中,服务器使用第二服务器加密密钥和第二服务器MAC 加密密钥对响应数据进行加密得到加密的响应数据,具体为:服务器使用第二服务器MAC加密密钥按照握手操作时选择的MAC算法对响应数据进行加密得到第七MAC值,使用第二服务器加密密钥按照握手操作时选择的对称加密算法对响应数据和第七MAC值进行加密生成加密的响应数据;

上述步骤S7中,客户端使用第一服务器加密密钥和第一服务器MAC加密密钥对加密的响应数据进行验证,具体为:客户端使用第一服务器加密密钥按照握手操作时选择的对称算法对加密的响应数据进行解密得到响应数据和第七 MAC值,使用第一服务器MAC加密密钥按照选择的MAC算法对解密得到的响应数据进行加密得到第八MAC值,判断解密得到的第七MAC值是否与第八MAC值一致,是则验证通过,否则验证未通过。

实施例2

本实施例提供一种区块链安全获取服务器可信数据的方法,如图2-图4所示,应用于包括客户端、审计端、区块链智能合约端和服务器的系统,具体包括以下步骤:

步骤100:区块链智能合约端向客户端发送第一请求数据。

步骤101:客户端生成第一随机数,根据第一随机数和自身保存的安全传输协议版本号、加密套件列表、压缩算法列表组织握手请求,并对第一随机数进行保存;

本实施例中,安全传输协议版本号可以为TLS协议版本号,相应地,客户端为支持TLS协议的浏览器,服务器为支持TLS协议的服务器。

具体地,加密套件列表中包括一个或多个对称加密算法标识、一个或多个 MAC算法标识。例如,对称加密算法标识可以包括sha1算法标识、MD5算法标识。

具体地,压缩算法列表中包括一个或多个压缩算法的标识。

步骤102:客户端向服务器发送握手请求;

步骤103:服务器接收到握手请求,生成第二随机数,根据加密套件列表选定对称加密算法和MAC算法,根据压缩算法列表选定压缩算法,根据第二随机数、选择的压缩算法、以及选择的对称加密算法和MAC算法组织握手响应数据;

具体地,服务器根据加密套件列表选定对称加密算法和MAC算法,具体为:服务器选定与加密套件列表中的加密算法标识对应并且自身支持的对称加密算法,选定与加密套件列表中的MAC算法标识对应并且自身支持的MAC算法。

具体地,服务器根据压缩算法列表选定压缩算法,具体为:服务器选定与压缩算法列表中的压缩算法的标识对应并且自身支持的压缩算法。

具体地,服务器根据第二随机数、选择的压缩算法、以及选择的对称加密算法和MAC算法组织握手响应数据,具体为:服务器第二随机数、选择的压缩算法所对应的压缩算法标识、选择的对称加密算法对应的对称加密算法标识、选择的MAC算法对应的MAC算法标识组织握手响应数据。

步骤104:服务器向客户端发送握手响应数据;

本实施例中,步骤103中还包括:服务器生成会话标识;步骤104中还包括:服务器将会话标识发送给客户端。服务器生成的会话标识作为服务器与客户端通信的标识,后续服务器向客户端发送的数据中都包括会话标识,客户端向服务器发送的数据中都包括会话标识。

步骤105:客户端接收到握手响应数据,对握手响应数据进行保存;

步骤106:服务器向客户端发送自身保存的包括服务器证书的服务器证书链;

步骤107:客户端接收到服务器证书链,对服务器证书链进行保存;

步骤108:服务器向客户端发送握手结束消息;

本实施例中,上述服务器执行的步骤104、步骤106、步骤108是顺序执行,即服务器执行完步骤104之后执行步骤106,服务器执行完步骤106之后执行步骤108。

步骤109:客户端接收到握手结束消息,对握手结束消息进行保存;

进一步地,步骤109中还包括:客户端判断握手响应数据是否可接受、对接收的证书链进行验证,当握手响应数据可接受并且对证书链的验证通过时执行步骤110,否则结束。

具体地,客户端判断握手响应数据是否可接受,具体为:客户端判断是否支持服务器选择的对称加密算法、MAC算法和压缩算法,并判断握手响应数据中的第二随机数长度是否符合要求,如果判断结果均为是则可以接受,否则不可接受。

具体地,客户端对接收的证书链进行验证,具体为:客户端判断证书链的根证书是否可信,是则根据根证书验证证书链,如果对证书链中的每一个证书的验证都通过,则对证书链的验证结果为通过,否则对证书链的验证结果为未通过。

本实施例中,服务器的证书链中不包括服务器的根证书,通常在与服务器进行数据交互之前,客户端已经安装好服务器的根证书。如果安装了根证书则客户端认为服务器的根证书是可信的,如果没有安装根证书客户端认为服务器的根证书不可信。

步骤110:客户端生成第一预主密钥,根据第一预主密钥、自身保存的第一预设数据、第一随机数和握手响应数据中的第二随机数生成第一运算数据,将第一运算数据分割为第一子运算数据和第二子运算数据;

具体地,客户端生成第一预主密钥,具体为:客户端按照预设格式生成第一预主密钥;进一步具体地,客户端按照预设格式根据预设的数据生成第一预主密钥;

例如,客户端按照第一字节为03、第二字节为01、第三至第十四字节为12 字节的随机数、第十五字节至第二十四字节为10个字节0的格式生成的第一预主密钥为:S1=03||01||rand[12]||0[10],其中rand[12]为12个字节的随机数,0[10]为10个字节的0;当十二个字节的随机数rand[12]中每个字节的数据都取11时,生成的第一预主密钥为S1=03 01 11 11 11 11 11 11 11 11 11 11 11 11 00 00 00 00 00 00 00 00 00 00。

具体地,客户端根据第一预主密钥、自身保存的第一预设数据、第一随机数和握手响应数据中的第二随机数生成第一运算数据,具体为:客户端根据第一预主密钥、自身保存的第一预设数据、第一随机数和握手响应数据中的第二随机数按照第一预设算法运算生成第一运算数据;

例如,客户端根据第一预主密钥S1、第一预设数据\"master secret\"、保存的第一随机数ClientHello.random和握手响应数据中的第二随机数 ServerHello.random按照第一预设算法P_MD5运算生成的第一运算数据H1具体为:H1=P_MD5(S1,\"master secret\"+ClientHello.random+ ServerHello.random);

具体地,客户端将第一运算数据分割为第一子运算数据和第二子运算数据,具体为:客户端将第一运算数据等分成两部分,将前半部分的数据作为第一子运算数据,将后半部分的数据作为第二子运算数据。

例如,H1=P_MD5(S1,\"master secret\"+ClientHello.random+ ServerHello.random)=H11||H12,其中,H11为第一子运算数据、H12为第二子运算数据。

例如,本实施例中,上述第一运算数据H1为48字节的数据,上述第一子运算数据H11为第一运算数据H1的前24字节的数据,上述第二子运算数据H12 为第一运算数据H1的后24字节的数据。

步骤111:客户端向审计端发送服务器证书链、第一随机数、第二随机数和第二子运算数据、握手响应数据中对称加密算法标识和MAC算法标识;

本实施例中,客户端可以一次向审计端发送服务器证书链、第一随机数、第二随机数和第二子运算数据、握手响应数据中对称加密算法标识和MAC算法标识;也可以分多次发送。分多次发送时,发送的顺序可以但不限于先发送服务器证书链,再发送第一随机数和第二随机数,最后发送第二子运算数据、握手响应数据中对称加密算法标识和MAC算法标识,例如,还可以先发送第二子运算数据,再发送服务器证书链、第一随机数和第二随机数、握手响应数据中对称加密算法标识和MAC算法标识。

步骤112:审计端收到服务器证书链、第一随机数、第二随机数和第二子运算数据,生成第二预主密钥,根据第二预主密钥、自身保存的第一预设数据、第一随机数和第二随机数生成第二运算数据,将第二运算数据分割为第三子运算数据和第四子运算数据;

可选地,步骤112中,审计端收到服务器证书链之后、生成第二预主密钥之前,还包括:审计端对服务器证书链进行验证,验证通过时生成第二预主密钥,验证未通过报错结束。审计端对服务器证书链进行验证与步骤109中客户端对服务器证书链进行验证相同,在此不再赘述。

可选地,步骤112中还包括:客户端判断是否支持对称加密算法标识对应的对称加密算法、判断是否支持MAC算法标识对应的MAC算法,如果判断结果均为是则继续执行后续操作;否则向客户端返回错误信息,结束。

具体地,客户端生成第二预主密钥,具体为:客户端按照预设格式生成第二预主密钥;进一步具体地:客户端按照预设格式根据预设的数据生成第二预主密钥;

例如,客户端按照第一字节至第九字节为9个字节的随机数、第十字节至第二十三字节为14个字节的0、第二十四字节的数据为01的格式生成的第二预主密钥为:S2=rand[9]||0[14]||01,其中rand[9]为9个字节的随机数, 0[14]为14个字节的0;当第一字节至第九字节的随机数rand[9]中每个字节的数据都取22时,生成的第二预主密钥为S2=22 22 22 22 22 22 22 22 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01。

具体地,客户端根据第二预主密钥、自身保存的第一预设数据、第一随机数和第二随机数生成第二运算数据,具体为:客户端根据第二预主密钥、自身保存的第一预设数据、第一随机数和第二随机数按照第二预设算法生成第二运算数据;

例如,客户端根据第二预主密钥S2、第一预设数据\"master secret\"、第一随机数ClientHello.random和第二随机数ServerHello.random按照第二预设算法P_SHA1生成的第二运算数据H2,具体为:H2=P_SHA1(S2,\"master secret\" +ClientHello.random+ServerHello.random);

具体地,客户端将第二运算数据分割为第三子运算数据和第四子运算数据,具体为:客户端将第二运算数据等分成两部分,将前半部分的数据作为第三子运算数据,将后半部分的数据作为第四子运算数据。

例如,H2=P_SHA1(S2,\"master secret\"+ClientHello.random+ ServerHello.random)=H21||H22,其中,H21为第三子运算数据、H22为第四子运算数据。

例如,本实施例中,上述第二运算数据H2为48字节的数据,上述第三子运算数据H21为第二运算数据H2的前24字节的数据,上述第四子运算数据H22 为第二运算数据H2的后24字节的数据。

在本实施例中,步骤110中的第一子运算数据H11还可以为第一运算数据的后24字节的数据,第二子运算数据H12为第一运算数据的前24字节的数据;相应地,步骤112中,第三子运算数据H21还可以为第二运算数据的后24字节的数据,第四子运算数据H22为第二运算数据的前24字节的数据。

步骤113:审计端根据第二子运算数据和第四子运算数据生成第二主密钥,根据第二主密钥、自身保存的第二预设数据、第一随机数、第二随机数生成第二通讯密钥,根据MAC算法标识选择MAC算法,根据对称加密算法标识选择对称加密算法,根据选择的MAC算法和对称加密算法将第二通讯密钥进行分割得到客户端第二MAC加密子密钥、服务器第二MAC加密子密钥、客户端第二加密子密钥和服务器第二加密子密钥,根据第二预主密钥和服务器证书的公钥生成第二加密数据。

具体地,审计端根据第二子运算数据和第四子运算数据生成第二主密钥,具体为:审计端将第二子运算数据和第四子运算数据进行按位异或运算生成第二主密钥;

例如,审计端将第二子运算数据H12和第四子运算数据H22进行按位异或运算生成第二主密钥,具体为:M2=H12⊕H22,其中⊕为异或运算符。本实施例中,审计端将第二子运算数据和第四子运算数据进行按位异或运算,具体为:审计端将第二子运算数据与第四子运算数据的每一个对应位上的数据都进行异或运算得到每一位的运算结果。

具体地,审计端根据第二主密钥、自身保存的第二预设数据、第一随机数、第二随机数生成第二通讯密钥,具体为:审计端根据第二主密钥、自身保存的第二预设数据、第一随机数、第二随机数按照第二预设算法生成第二通讯密钥;

例如,审计端根据第二主密钥M2、自身保存的第二预设数据\"key expansion \"、第一随机数ClientHello.random、第二随机数ServerHello.random按照第二预设算法P_SHA1生成第二通讯密钥,具体为:Y=P_SHA1(M2,\"key expansion\" +ClientHello.random+ServerHello.random),本实施例中,第二通讯密钥Y 的数据长度为140字节。

本实施例中,审计端根据选择的MAC算法和对称加密算法将第二通讯密钥进行分割得到客户端第二MAC加密子密钥、服务器第二MAC加密子密钥、客户端第二加密子密钥和服务器第二加密子密钥,具体如下:Y =client_write_MAC_secret2||server_write_MAC_secret2|| client_write_key2||server_write_key2;其中,client_write_MAC_secret 2为客户端第二MAC加密子密钥、server_write_MAC_secret2为服务器第二MAC 加密子密钥、client_write_key2为客户端第二加密子密钥、server_write_key2 为服务器第二加密子密钥。其中,服务器第二MAC加密子密钥 server_write_MAC_secret2的数据长度为20字节,客户端第二MAC加密子密钥 client_write_MAC_secret2、客户端第二加密子密钥client_write_key2、服务器第二加密子密钥server_write_key2的数据总长度为120字节。

进一步地,本实施例中,审计端根据选择的MAC算法和对称加密算法将第二通讯密钥进行分割得的数据中还包括客户端第二初始向量子密钥和服务器第二初始向量子密钥;

例如,审计端根据选择的MAC算法和对称加密算法将第二通讯密钥进行分割得到的数据具体为:

Y=client_write_MAC_secret2||server_write_MAC_secret2|| client_write_key2||server_write_key2||client_write_IV2 ||server_write_IV2;其中,client_write_MAC_secret2为客户端第二MAC 加密子密钥、server_write_MAC_secret2为服务器第二MAC加密子密钥、 client_write_key2为客户端第二加密子密钥、server_write_key2为服务器第二加密子密钥、client_write_IV2为客户端第二初始向量子密钥、 server_write_IV2为服务器第二初始向量子密钥。

本实施例中,第二通讯密钥的长度,以及由通讯密钥分割出的子密钥的长度根据选择的MAC算法和对称算法来确定。

具体地,审计端根据第二预主密钥和服务器证书的公钥生成第二加密数据,具体为:审计端根据第二预主密钥生成第二待加密数据,使用服务器证书的公钥按照第三预设算法对第二待加密数据进行加密生成第二加密数据。

具体地,审计端根据第二预主密钥生成第二待加密数据,具体为:审计端按照预设格式根据第二预主密钥生成第二待加密数据。

例如,审计端按照第1字节的数据为01、第2字节至第104字节的数据均为01、第105字节至129字节上的数据为15个字节的非零随机数、第130字节至第154字节上的数据均为0、第155字节至178字节上的数据为第二预主密钥 S2的格式生成的第二待加密数据为:P2=01||01[103]||rand[15]||0[25] ||S2=01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 84 ec b3 98 dd 7e 7b af cf 15 ae 29 e6 db 6d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 22 22 22 22 22 22 22 22 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01。

例如,审计端使用服务器证书的公钥按照第三预设算法RSA算法对第二待加密数据P2进行加密生成的第二加密数据为E2=RSA_public(P2)。

步骤114:审计端向客户端发送第三子运算数据、客户端第二MAC加密子密钥、客户端第二加密子密钥、服务器第二加密子密钥和第二加密数据;

本实施例中,审计端可以一次向客户端发送第三子运算数据、客户端第二 MAC加密子密钥、客户端第二加密子密钥、服务器第二加密子密钥和第二加密数据;也可以多次发送。多次发送时,发送的顺序可以但不限于先发送第三子运算结果,然后发送客户端第二MAC加密子密钥、客户端第二加密子密钥、服务器第二加密子密钥,最后发送第二加密数据,还可以先发送客户端第二MAC加密子密钥、客户端第二加密子密钥、服务器第二加密子密钥和第二加密数据,然后发送第三子运算结果。

可选地,当审计端根据选择的MAC算法和对称加密算法将第二通讯密钥进行分割得的数据中包括客户端第二初始向量子密钥和服务器第二初始向量子密钥时,步骤114中还包括:向客户端发送客户端第二初始向量子密钥和服务器第二初始向量子密钥。

步骤115:客户端根据第一子运算数据和第三子运算数据生成第一主密钥,根据第一主密钥、自身保存的第二预设数据、第一随机数、第二随机数生成第一通讯密钥,根据选择的MAC算法和对称加密算法将第一通讯密钥进行分割得到客户端第一MAC加密子密钥、服务器第一MAC加密子密钥、客户端第一加密子密钥和服务器第一加密子密钥,根据第一预主密钥和服务器证书的公钥生成第一加密数据。

具体地,客户端根据第一子运算数据和第三子运算数据生成第一主密钥,具体为:客户端将第一子运算数据和第三子运算数据进行按位异或运算生成第一主密钥;

例如,客户端将第一子运算数据H11和第三子运算数据H21进行按位异或运算生成的第一主密钥,具体为:M1=H11⊕H21,其中⊕为异或运算符。本实施例中,客户端将第一子运算数据和第三子运算数据进行按位异或运算,具体为:客户端将第一子运算数据与第三子运算数据的每一个对应位上的数据都进行异或运算得到每一位的运算结果。

需要说明的是,本实施例中,两个相同的数据进行异或运算得到的运算结果为0,两个不同的数据进行异或运算得到的运算结果为1;当按位异或运算的两个数据的长度不一致时,以长度较短的数据为准,长度较长的数据与长度较短的对应位以外的数据摒弃掉。

具体地,客户端根据第一主密钥、自身保存的第二预设数据、第一随机数、第二随机数生成第一通讯密钥,具体为:客户端根据第一主密钥、自身保存的第二预设数据、第一随机数、第二随机数按照第一预设算法生成第一通讯密钥;

例如,客户端根据第一主密钥M1、自身保存的第二预设数据\"key expansion\"、第一随机数ClientHello.random、第二随机数ServerHello.random 按照第一预设算法P_MD5生成的第一通讯密钥为:X=P_MD5(M1,\"key expansion\"+ClientHello.random+ServerHello.random),本实施例中,第一通讯密钥X的数据长度为140字节。

本实施例中,客户端根据选择的MAC算法和对称加密算法将第一通讯密钥X 进行分割得到客户端第一MAC加密子密钥、服务器第一MAC加密子密钥、客户端第一加密子密钥和服务器第一加密子密钥,具体如下:

X=client_write_MAC_secret1||server_write_MAC_secret1|| client_write_key1||server_write_key1,其中,client_write_MAC_secret1 为第一客户端MAC加密子密钥、server_write_MAC_secret1为第一服务器MAC 加密子密钥、client_write_key1为第一客户端加密子密钥、 server_write_key1为第一服务器加密子密钥。当第一通讯密钥的长度为140字节时,第一服务器MAC加密子密钥server_write_MAC_secret1的数据长度为20 字节,第一客户端MAC加密子密钥client_write_MAC_secret1、第一客户端加密子密钥client_write_key1、第一服务器加密子密钥server_write_key1的数据总长度为120字节。

进一步地,本实施例中,客户端根据选择的MAC算法和对称加密算法将第一通讯密钥进行分割得的数据中还包括客户端第一初始向量子密钥和服务器第一初始向量子密钥;

例如,客户端根据选择的MAC算法和对称加密算法将第一通讯密钥进行分割得到的数据具体为:

X=client_write_MAC_secret1||server_write_MAC_secret1|| client_write_key1||server_write_key1|| client_write_IV1||server_write_IV1;其中,client_write_MAC_secret1为第一客户端MAC加密子密钥、server_write_MAC_secret1为第一服务器MAC加密子密钥、client_write_key1为第一客户端加密子密钥、server_write_key1 为第一服务器加密子密钥、client_write_IV1为第一客户端初始向量子密钥、 server_write_IV1为第一服务器初始向量子密钥。

本实施例中,第一通讯密钥的长度,以及由第一通讯密钥分割出的子密钥的长度根据选择的MAC算法和对称算法来确定。

具体地,客户端根据第一预主密钥和服务器证书的公钥生成第一加密数据,具体为:客户端根据第一预主密钥生成第一待加密数据,使用服务器证书的公钥按照第三预设算法对第一待加密数据进行加密得到第一加密数据。

例如,客户端按照第一字节的数据为02、第2字节至第24字节上的数据均为01、第25字节至第39字节上的数据为15个字节的非零随机数、第40字节上的数据为00、第41至第64字节上的数据为第一预主密钥S1、第65字节至 87字节上的数据均为0的格式生成的第一待加密数据为:P1=02||01[23]|| rand[15]||00||S1||0[23]||01=02 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 dc 91 fe 0c 22 1b ef 0f 48 92 e7 aa 8f 9c d6 00 03 01 11 11 11 11 11 11 11 11 11 11 11 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01。

例如,客户端使用服务器证书的公钥按照第三预设算法RSA算法对第一待加密数据P1进行加密生成的第一加密数据为:E1=RSA_public(P1)。

步骤116:客户端将第一加密数据和第二加密数据进行乘积运算,将乘积运算结果对服务器证书的公钥的模取余数得到取余数运算结果。

例如,客户端将第一加密数据E1和第二加密数据E2进行乘积运算,将乘积运算结果(E1*E2)对服务器证书的公钥的模N取余数得到的取余数运算结果为(E1*E2)mod N。

本实施例中,第三预设算法为RSA算法,RSA算法具有以下基本特性:(E1* E2)mod N=(RSA_public(P1)*RSA_public(P2))mod N=RSA_public(P1* P2)。

步骤117:客户端向服务器发送取余数运算结果;

步骤118:服务器使用自身保存的服务器证书的私钥对接收到的取余数运算结果进行解密,得到解密数据,从解密数据中获取第一预主密钥和第二预主密钥。

例如,解密数据为P=00||02||rand[205]||00||S1||S2=00 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 f6 88 86 92 b4 d0 bf cf 17 aa 92 3c cc 69 3f 3f 42 43 54 65 76 87 98 a9 ba cb dc ed ff 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 12 19 6c e6 63 84 a3 1a fd eb 46 8c 30 d3 a2 a0 32 31 30 2f 2e 2d 2c 2b 9b 4e 80 e9 30 e0 86 bc 5d 0a d5 ce e9 b6 ff d2 4f 22 d8 0a ca 4d f8 64 09 e8 d8 84 33 aa d6 00 25 07 e1 2b c5 8e e2 21 d0 67 e1 28 10 38 cc 6a 4f b3 eb 4c 35 ab f8 ae ef 4d ce 90 0f ac de 4f 85 e6 f8 0b 66 00 ce de f3 3f e8 e3 40 fe 85 00 03 01 11 11 11 11 11 11 11 11 11 11 11 11 00 00 00 00 00 00 00 00 00 00 22 22 22 22 22 22 22 22 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01,获取解密数据P中第1字节和第2字节作为固定格式数据,从解密数据P的第3个字节开始查找数据为0的字节,获取数据为0的字节以后的数据作为预主密钥,即获取第209字节至第 256字节的数据作为预主密钥S1+S2=03 01 11 11 11 11 11 11 11 11 11 11 11 11 00 00 00 00 00 00 00 00 00 00 22 22 22 22 22 22 22 22 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01,将预主密钥中的前24字节的数据作为第一预主密钥S1=03 01 11 11 11 11 11 11 11 11 11 11 11 11 00 00 00 00 00 00 00 00 00 00,将预主密钥中的后24字节的数据作为第二预主密钥S2=22 22 22 22 22 22 22 22 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01。

步骤119:客户端向服务器发送第一通知消息;

具体地,客户端通过第一通知消息通知服务器在此之后的通讯需要使用密文。服务器收到第一通知消息后,再向客户端发送数据时,需要对发送的数据进行加密。

步骤120:客户端根据自身保存的第三预设数据、发送给服务器的所有数据、以及接收到的服务器的所有数据组织第三待加密数据,并根据第三待加密数据和第一主密钥组织第一验证数据。

具体地,客户端根据自身保存的第三预设数据、按照预设算法对发送给服务器的所有数据以及接收到的服务器的所有数据进行运算得到的运算结果组织第三待加密数据。

进一步具体地,客户端根据自身保存的第三预设数据、按照第四预设算法对发送给服务器的所有数据以及接收到的服务器的所有数据进行运算得到的第四运算结果、按照第五预设算法对发送给服务器的所有数据以及接收到的服务器的所有数据进行运算得到的第五运算结果组织第三待加密数据。

例如,客户端根据自身保存的第三预设数据\"client finished\"、按照第四预设算法MD5对发送给服务器的所有数据以及接收到的服务器的所有数据 handshake_messages进行运算得到的第四运算结果MD5(handshake_messages)、按照第五预设算法SHA1对发送给服务器的所有数据以及接收到的服务器的所有数据handshake_messages进行运算得到的第五运算结果 SHA1(handshake_messages)组织的第三待加密数据为hash_data3=\"client finished\"+MD5(handshake_messages)+SHA1(handshake_messages)。

具体地,客户端根据三待加密数据和第一主密钥组织第一验证数据,具体为:客户端对第三待加密数据和第一主密钥按照第一预设算法进行运算得到第一验证数据。例如,客户端对第三待加密数据hash_data3和第一主密钥M1按照第一预设算法P_MD5进行运算得到第一验证数据verify_data1= P_MD5(M1,hash_data3)。

步骤121:客户端向审计端发送第三待加密数据;

步骤122:审计端根据第三待加密数据和第二主密钥组织第二验证数据。

具体地,审计端根据第三待加密数据和第二主密钥组织第二验证数据,具体为:审计端对第三待加密数据和第二主密钥按照第二预设算法进行运算得到第二验证数据。例如,审计端对第三待加密数据hash_data3和第二主密钥M2 按照第二预设算法P_SHA1进行运算得到第二验证数据verify_data2= P_SHA1(M2,hash_data3)。

步骤123:审计端向客户端发送第二验证数据;

步骤124:客户端根据第一验证数据和第二验证数据生成第三验证数据,根据客户端第一MAC加密子密钥和客户端第二MAC加密子密钥生成第一客户端MAC 加密密钥,根据客户端第一加密子密钥和客户端第二加密子密钥生成第一客户端加密密钥,根据服务器第一加密子密钥和服务器第二加密子密钥生成第一服务器加密密钥,对第三验证数据按照选择的压缩算法进行压缩运算得到第一压缩数据,使用第一客户端MAC加密密钥对第一压缩数据按照选择的MAC算法进行加密得到第一MAC值,使用第一客户端加密密钥对第一压缩数据和第一MAC值按照选择的对称加密算法进行加密得到第三加密数据。

具体地,客户端根据第一验证数据和第二验证数据生成第三验证数据,具体为:客户端将第一验证数据与第二验证数据进行按位异或运算生成第三验证数据。例如,客户端将第一验证数据verify_data1与第二验证数据verify_data2 进行按位异或运算生成第三验证数据,具体为: verify_data3=verify_data1⊕verify_data2。

具体地,客户端根据客户端第一MAC加密子密钥和客户端第二MAC加密子密钥生成第一客户端MAC加密密钥,具体为:客户端将客户端第一MAC加密子密钥与客户端第二MAC加密子密钥进行按位异或运算生成第一客户端MAC加密密钥;例如,客户端将客户端第一MAC加密子密钥client_write_MAC_secret1 与客户端第二MAC加密子密钥client_write_MAC_secret2进行按位异或运算生成的第一客户端MAC加密密钥为client_write_MAC_secret= client_write_MAC_secret1⊕client_write_MAC_secret2。

具体地,客户端根据客户端第一加密子密钥和客户端第二加密子密钥生成第一客户端加密密钥,具体为:客户端将客户端第一加密子密钥与客户端第二加密子密钥进行按位异或运算生成第一客户端加密密钥;例如,客户端将客户端第一加密子密钥client_write_key1与客户端第二加密子密钥 client_write_key2进行按位异或运算生成的第一客户端加密密钥为 client_write_key=client_write_key1⊕client_write_key2。

具体地,客户端根据服务器第一加密子密钥和服务器第二加密子密钥生成第一服务器加密密钥,具体为:客户端将服务器第一加密子密钥与服务器第二加密子密钥进行按位异或运算生成第一服务器加密密钥。例如,客户端将服务器第一加密子密钥server_write_key1与服务器第二加密子密钥 server_write_key2进行按位异或运算生成的第一服务器加密密钥为 server_write_key=server_write_key1⊕server_write_key2。

步骤125:客户端向服务器发送第三加密数据;

步骤126:服务器根据第一预主密钥、第二预主密钥、自身保存的第一预设数据、第一随机数和第二随机数生成第三主密钥,根据第三主密钥、自身保存的第二预设数据、第一随机数、第二随机数生成第三通讯密钥,根据选择的MAC 算法和对称加密算法将第三通讯密钥进行分割得到第二客户端MAC加密密钥、第二服务器MAC加密密钥、第二客户端加密密钥和第二服务器加密密钥,使用第二客户端MAC加密密钥和第二客户端加密密钥对第三加密数据进行验证,验证通过则执行步骤127,验证未通过则结束;

具体地,服务器根据第一预主密钥、第二预主密钥、自身保存的第一预设数据、第一随机数和第二随机数生成第三主密钥,具体为:服务器根据第一预主密钥、自身保存的第一预设数据、第一随机数和第二随机数按照第一预设算法进行运算得到第一运算数据,根据第二预主密钥、自身保存的第一预设数据、第一随机数和第二随机数按照第二预设算法进行运算得到第二运算数据,将第一运算数据与第二运算数据进行按位异或运算生成第三主密钥。

例如,服务器根据第一预主密钥S1、自身保存的第一预设数据\"master secret\"、第一随机数ClientHello.random和第二随机数ServerHello.random 按照第一预设算法P_MD5进行运算得到第一运算数据H1=P_MD5(S1,\"master secret\"+ClientHello.random+ServerHello.random),根据第二预主密钥 S2、自身保存的第一预设数据\"master secret\"、第一随机数ClientHello.random 和第二随机数ServerHello.random按照第二预设算法P_SHA1进行运算得到第二运算数据P2=P_SHA1(S2,\"master secret\"+ClientHello.random+ ServerHello.random),将第一运算数据H1=P_MD5(S1,\"master secret\"+ ClientHello.random+ServerHello.random)与第二运算数据 H2=P_SHA1(S2,\"master secret\"+ClientHello.random+ServerHello.random) 进行按位异或运算生成第三主密钥M3=H1⊕H2=P_MD5(S1,\"master secret\"+ ClientHello.random+ServerHello.random)⊕P_SHA1(S2,\"master secret\"+ ClientHello.random+ServerHello.random)=H1⊕H2。

或者,具体地,服务器根据第一预主密钥、第二预主密钥、自身保存的第一预设数据、第一随机数和第二随机数生成第三主密钥,具体为:服务器将第一预主密钥与第二预主密钥进行顺序拼接得到拼接数据,将拼接数据、自身保存的第一预设数据、第一随机数和第二随机数作为参数调用伪随机数函数生成第三主密钥。例如,服务器将第一预主密钥S1与第二预主密钥S2进行顺序拼接得到拼接数据S=S1+S2,将拼接数据S、自身保存的第一预设数据\"master secret\"、第一随机数ClientHello.random和第二随机数ServerHello.random 作为参数调用伪随机数函数PRF生成第三主密钥为:M3=PRF(S,\"master secret\",ClientHello.random+ServerHello.random)。

需要说明的是,本实施例中伪随机数函数PRF具有以下特性: PRF(S1+S2,\"master secret\",ClientHello.random+ServerHello.random)= P_MD5(S1,\"master secret\",ClientHello.random+ServerHello.random)⊕ P_SHA1(S2,\"master secret\",ClientHello.random+ServerHello.random)。

具体地,服务器根据第三主密钥、自身保存的第二预设数据、第一随机数、第二随机数生成第三通讯密钥,具体为:服务器根据第三主密钥、自身保存的第二预设数据、第一随机数、第二随机数调用伪随机数函数生成第三通讯密钥。

例如,服务器根据第三主密钥M3、自身保存的第二预设数据\"key expansion \"、第一随机数ClientHello.random、第二随机数ServerHello.random调用伪随机数函数PRF生成第三通讯密钥Z=PRF(M3,\"key expansion\",ClientHello.random+ServerHello.random)。

需要说明的是,在本实施例中:

第一运算数据为:H1=P_MD5(S1,\"master secret\"+ClientHello.random +ServerHello.random)=H11||H12;

第二运算数据为:H2=P_SHA1(S2,\"master secret\"+ClientHello.random +ServerHello.random)=H21||H22;

第一主密钥为:M1=H11⊕H21;

第二主密钥为:M2=H12⊕H22;

第一通讯密钥为:X=P_MD5(M1,\"key expansion\"+ClientHello.random +ServerHello.random);

第二通讯密钥为:Y=P_SHA1(M2,\"key expansion\"+ClientHello.random +ServerHello.random)

第三主密钥为:M3=H1⊕H2=(H11+H12)⊕(H11+H12)=H11⊕H21+ H12⊕H22=M1+M2;

根据伪随机数函数PRF的特性,第三通讯密:Z=PRF(M3,\"key expansion\",ClientHello.random+ServerHello.random)=(M1+M2,\"key expansion\",ClientHello.random+ServerHello.random)=P_MD5(M1,\"key expansion\",ClientHello.random+ServerHello.random)⊕P_SHA1(M2,\"key expansion\",ClientHello.random+ServerHello.random)=X⊕Y。

具体的,服务器使用第二客户端MAC加密密钥和第二客户端加密密钥对第三加密数据进行验证,具体包括:

步骤c1:服务器根据自身保存的第三预设数据、按照预设算法对在接收到第三加密数据以前接收到客户端的所有数据以及发送给客户端的所有数据进行运算得到的运算结果组织第四待加密数据,根据第三主密钥和第四待加密数据生成第四验证数据;

具体地,服务器根据自身保存的第三预设数据、按照预设算法对在接收到第三加密数据以前接收到客户端的所有数据以及发送给客户端的所有数据进行运算得到的运算结果组织第四待加密数据,具体为:服务器根据自身保存的第三预设数据、按照第四预设算法对在接收到第三加密数据以前接收到客户端的所有数据以及发送给客户端的所有数据进行运算得到的第六运算结果、按照第五预设算法对在接收到第三加密数据以前接收到客户端的所有数据以及发送给客户端的所有数据进行运算得到的第七运算结果组织第四待加密数据;

例如,第四预设算法为MD5算法,第五预设算法为SHA1算法,服务器根据自身保存的第三预设数据\"client finished\"、按照MD5算法对在接收到第三加密数据以前接收到客户端的所有数据以及发送给客户端的所有数据 handshake_messages进行运算得到的第六运算结果MD5(handshake_messages)、按照SHA1算法对在接收到第三加密数据以前接收到客户端的所有数据以及发送给客户端的所有数据进行运算得到的第七运算结果SHA1(handshake_messages) 组织的第四待加密数据为hash_data4=\"client finished\"+ MD5(handshake_messages)+SHA1(handshake_messages)。

具体地,服务器根据第三主密钥和第四待加密数据生成第四验证数据,具体为:服务器将第三主密钥和第四待加密数据作为参数调用伪随机数函数生成第四验证数据;

例如,服务器将第三主密钥M3和第四待加密数据hash_data4作为参数调用伪随机数函数PRF生成第四验证数据verify_data4=PRF(M3,hash_data4)。

需要说明的是,根据M3=M1+M2以及伪随机数函数的特性:verify_data4= PRF(M3,hash_data4)=PRF(M1+M2,hash_data4)=P_MD5(M1,hash_data4)⊕ P_SHA1(M2,hash_data4)。

步骤c2:服务器使用第二客户端加密密钥对第三加密数据进行解密得到第一压缩数据和第一MAC值;

其中,步骤c1和步骤c2的顺序可以调换。

步骤c3:服务器对第四验证数据按照选择的压缩算法进行压缩运算得到第二压缩数据,使用第二客户端MAC加密密钥对第二压缩数据按照选择的MAC算法进行加密得到第二MAC值,判断第二MAC值是否与第一MAC值相等,是则执行步骤c4,否则验证未通过,报错结束;

步骤c4:服务器判断第二压缩数据是否与第一压缩数据相同,是验证通过,执行步骤127;否则验证未通过,报错结束。

可选地,上述步骤124中,客户端对第三验证数据按照选择的压缩算法进行压缩运算得到第一压缩数据,具体为:客户端对第三验证数据中预设字节上的数据按照选择的压缩算法进行压缩运算得到第一压缩数据。例如,客户端对第三验证数据中前12个字节上的数据按照选择的压缩算法进行压缩得到第一压缩数据。

相应地,上述步骤c3中,服务器对第四验证数据按照选择的压缩算法进行压缩运算,具体为:服务器对第四验证数据中预设字节上的数据按照选择的压缩算法进行压缩运算得到第二压缩数据。例如,服务器对第四验证数据中前12 个字节上的数据按照选择的压缩算法进行压缩得到第二压缩数据;

可选地,上述步骤c4还可以具体为:服务器根据选择的压缩算法对第一压缩数据进行解压运算得到第一解压数据,判断第一解压数据是否与第四验证数据一致,是验证通过,执行步骤127;否则验证未通过,报错结束。例如,服务器判断第第一解压数据是否与第四验证数据中前12字节上的数据相同。

步骤127:服务器向客户端发送第二通知消息。

本实施例中,服务器通过第二通知消息通知客户端此后的通讯开始使用密文。客户端收到第二通知消息后,再向服务器发送数据时,需要对发送的数据进行加密。

步骤128:客户端对第二通知消息进行保存;

步骤129:服务器根据自身保存的第四预设数据、接收到的客户端的所有数据以及发送给客户端的所有数据生成第五验证数据,对第五验证数据按照选择的压缩算法进行压缩运算得到第三压缩数据,使用第二服务器MAC加密密钥对第三压缩数据按照选择的MAC算法进行加密得到第三MAC值,使用服务器加密密钥对第三压缩数据和第三MAC值按照选择的对称加密算法进行加密得到第四加密数据。

具体地,服务器根据自身保存的第四预设数据、接收到的客户端的所有数据、发送给客户端的所有数据生成第五验证数据,具体为:服务器根据自身保存的第四预设数据、按照预设算法对接收到的客户端的所有数据以及发送给客户端的所有数据进行运算得到的运算结果组织第五待加密数据,根据第五待加密数据、第三主密钥生成第五验证数据。

具体地,服务器根据自身保存的第四预设数据、按照预设算法对接收到的客户端的所有数据以及发送给客户端的所有数据进行运算得到的运算结果组织第五待加密数据,具体为:服务器根据自身保存的第四预设数据、按照第四预设算法对接收到的客户端的所有数据以及发送给客户端的所有数据进行运算得到的第八运算结果、按照第五预设算法对接收到的客户端的所有数据以及发送给客户端的所有数据进行运算得到的第九运算结果组织第五待加密数据;

例如,第四预设算法为MD5算法,第五预设算法为SHA1算法,服务器根据自身保存的第四预设数据\"server finished\"、按照预设的MD5算法对接收到的客户端的所有数据以及发送给客户端的所有数据handshake_messages1进行运算得到的第八运算结果MD5(handshake_messages1)、按照预设的SHA1算法对接收到的客户端的所有数据以及发送给客户端的所有数据 handshake_messages1进行运算得到的第九运算结果 SHA1(handshake_messages1)组织第五待加密数据hash_data5=\"server finished\"+MD5(handshake_messages1)+SHA1(handshake_messages1)。

具体地,服务器根据第五待加密数据、第三主密钥生成第五验证数据,具体为:服务器将第三主密钥等分成第一子密钥和第二子密钥,根据第五待加密数据、第一子密钥按照第一预设算法运算生成第三待加密子数据,根据第五待加密数据、第二子密钥按照第二预设算法运算生成第四待加密子数据,根据第三待加密子数据和第四待加密子数据生成第五验证数据。

例如,第一预设算法为P_MD5算法,第二预设算法为P_SHA1算法,服务器根据第五待加密数据hash_data5、第一子密钥M31按照预设的P_MD5算法运算生成第三待加密子数据P_MD5(M31,hash_data5),根据第五待加密数据 hash_data5、第二子密钥M32按照预设的P_SHA1算法运算生成第四待加密子数据P_SHA1(M32,hash_data5)。

具体地,服务器根据第三待加密子数据和第四待加密子数据生成第五验证数据,具体为:服务器将第三待加密子数据与第四待加密子数据进行按位异或运算生成第五验证数据。

例如,服务器将第三待加密子数据P_MD5(M31,hash_data5)与第四待加密子数据P_SHA1(M32,hash_data5)进行按位异或运算生成第五验证数据verify_data5=P_MD5(M31,hash_data5)⊕P_SHA1(M32,hash_data5)。

或者,具体地,服务器根据第五待加密数据、第三主密钥生成第五验证数据,具体为:服务器将第三主密钥和第五待加密数据作为参数调用伪随机数函数生成第五验证数据。

例如,服务器将第三主密钥M3和第五待加密数据hash_data5作为参数调用伪随机数函数PRF生成第五验证数据verify_data5=PRF(M3,hash_data5)。

需要说明的是,根据M3=M1+M2以及伪随机数函数的特性:verify_data5= PRF(M3,hash_data5)=PRF(M1+M2,hash_data5)=P_MD5(M1,hash_data5)⊕ P_SHA1(M2,hash_data4)。

步骤130:服务器向客户端发送第四加密数据;

步骤131:客户端根据自身保存的第四预设数据、发送给服务器的所有数据以及接收服务器的除第四加密数据以外的所有数据组织第六待加密数据;

具体地,客户端根据自身保存的第四预设数据、按照预设算法对发送给服务器的所有数据以及接收服务器的除第四加密数据以外的所有数据组织第六待加密数据进行运算得到的运算结果组织第六待加密数据。

进一步具体地,客户端根据自身保存的第四预设数据、按照第四预设算法对发送给服务器的所有数据以及接收服务器的除第四加密数据以外的所有数据进行运算得到的第十运算结果、按照第五预设算法对发送给服务器的所有数据以及接收服务器的除第四加密数据以外的所有数据进行运算得到的第十一运算结果组织第六待加密数据。

例如,第四预设算法为MD5算法,第五预设算法为SHA1算法,客户端根据自身保存的第四预设数据\"server finished\"、按照预设的MD5算法对发送给服务器的所有数据以及接收服务器的除第四加密数据以外的所有数据 handshake_messages2进行运算得到的第十运算结果 MD5(handshake_messages2)、按照预设的SHA1算法对发送给服务器的所有数据以及接收服务器的除第四加密数据以外的所有数据handshake_messages2进行运算得到的第十一运算结果SHA1(handshake_messages2)组织的第六待加密数据为hash_data6=\"server finished\"+MD5(handshake_messages2)+ SHA1(handshake_messages2)。

步骤132:客户端向审计端发送第六待加密数据;

步骤133:审计端根据第六待加密数据和第二主密钥生成第六验证数据;

具体地,审计端根据第六待加密数据和第二主密钥生成第六验证数据,具体为:审计端对第六待加密数据和第二主密钥按照第二预设算法进行运算生成第六验证数据。

例如,第二预设算法为P_SHA1算法,审计端对第六待加密数据hash_data6 和第二主密钥M2按照预设的P_SHA1算法进行运算生成第六验证数据verify_data6=P_SHA1(M2,hash_data6)。

步骤134:审计端向客户端发送第六验证数据;

步骤135:客户端根据第六待加密数据和第一主密钥生成第七验证数据,根据第六验证数据和第七验证数据生成第八验证数据;

具体地,客户端根据六待加密数据和第一主密钥生成第七验证数据,具体为:客户端对第六待加密数据和第一主密钥按照第一预设算法进行运算得到第七验证数据。例如,第一预设算法为P_MD5算法,客户端对第六待加密数据 hash_data6和第一主密钥M1按照预设的P_MD5算法进行运算得到第七验证数据 verify_data7=P_MD5(M1,hash_data6)。

具体地,客户端根据第六验证数据和第七验证数据生成第八验证数据,具体为:客户端将第六验证数据与第七验证数据进行按位异或运算生成第八验证数据。例如,客户端将第六验证数据verify_data6与第七验证数据verify_data7 进行按位异或运算生成第八验证数据verify_data8,具体为: verify_data8=verify_data6⊕verify_data7。

步骤136:客户端根据第一服务器加密密钥和第八验证数据对第四加密数据进行验证,验证通过则执行步骤137,验证未通过则结束;

具体地,步骤136具体包括:

步骤d1:客户端使用第一服务器加密密钥对第四加密数据进行解密得到第三压缩数据和第三MAC值;

步骤d2:客户端对第八验证数据按照选择的压缩算法进行压缩运算得到第四压缩数据,判断第四压缩数据是否与第三压缩数据相等,是则验证通过,执行步骤137;否则验证未通过,报错结束。

可选地,上述步骤129中,服务器对第五验证数据按照选择的压缩算法进行压缩运算得到第三压缩数据,具体为:服务器对第五验证数据中预设字节上的数据按照选择的压缩算法进行压缩运算得到第三压缩数据。例如,服务器对第五验证数据中前12个字节上的数据按照选择的压缩算法进行压缩得到第三压缩数据。

相应地,上述步骤d2中,客户端对第八验证数据按照选择的压缩算法进行压缩运算,具体为:客户端对第八验证数据中预设字节上的数据按照选择的压缩算法进行压缩运算得到第四压缩数据。例如,客户端对第八验证数据中前12 个字节上的数据按照选择的压缩算法进行压缩得到第四压缩数据;

可选地,上述步骤d2中,判断第四压缩数据是否与第三压缩数据相等,还可以具体为:客户端根据选择的压缩算法对第三压缩数据进行解压运算得到第三解压数据,判断第三解压数据是否与第八验证数据一致,是验证通过,执行步骤137;否则验证未通过,报错结束。例如,客户端判断第三解压数据是否与第八验证数据中前12字节上的数据相同。

步骤137:客户端根据第一请求数据组织第二请求数据,使用第一客户端MAC 加密密钥和第一客户端加密密钥对第二请求数据进行加密得到加密的第二请求数据。

具体地,步骤137中,客户端使用第一客户端MAC加密密钥和第一客户端加密密钥对第二请求数据进行加密得到加密的第二请求数据,具体为:客户端使用第一客户端MAC加密密钥对第二请求数据按照选择的MAC算法进行加密运算得到第四MAC值,使用第一客户端加密密钥对第二请求数据和第四MAC值按照选择的对称算法进行加密得到加密的第二请求数据。

进一步具体地,步骤137中,客户端使用第一客户端MAC加密密钥和第一客户端加密密钥对第二请求数据进行加密得到加密的第二请求数据,具体为:客户端使用选择的压缩算法对第二请求数据进行压缩运算得到第五压缩数据,使用第一客户端MAC加密密钥对第五压缩数据按照选择的MAC算法进行加密运算得到第四MAC值,使用第一客户端加密密钥对第五压缩数据和第四MAC值按照选择的对称算法进行加密得到加密的第二请求数据。

步骤138:客户端向服务器发送加密的第二请求数据;

步骤139:服务器使用第二客户端MAC加密密钥和第二客户端加密密钥对加密的第二请求数据进行验证,验证通过执行步骤140,验证未通过则结束。

具体地,步骤139具体为:服务器使用第二客户端加密密钥对加密的第二请求数据进行解密得到第二请求数据,使用第二客户端MAC加密密钥对第二请求数据按照选择的MAC算法进行加密运算得到第五MAC值,判断第五MAC值是否与第四 MAC值相等,是验证通过,执行步骤140;否则验证未通过,结束。

进一步具体地,具体地,步骤139具体为:服务器使用第二客户端加密密钥对加密的第二请求数据进行解密得到第五压缩数据,使用第二客户端MAC加密密钥对第五压缩数据按照选择的MAC算法进行加密运算得到第五MAC值,判断第五 MAC值是否与第四MAC值相等,是验证通过,执行步骤140;否则验证未通过,结束。

步骤140:服务器根据验证时得到的第二请求数据数据组织响应数据,使用第二服务器加密密钥和第二服务器MAC加密密钥对响应数据进行加密得到加密的响应数据。

具体地,步骤140中,服务器使用第二服务器加密密钥和第二服务器MAC加密密钥对响应数据进行加密得到加密的响应数据,具体为:服务器使用第二服务器MAC加密密钥对响应数据按照选择MAC算法进行加密得到第六MAC值,使用第二服务器加密密钥对响应数据和第六MAC值按照选择的对称加密算法进行加密得到加密的响应数据。

本实施例中,响应数据包括协议状态信息(例如TSL协议状态信息)、响应头和响应正文。

可选地,步骤140中还包括:服务器更新通信序号;相应地,服务器使用第二服务器加密密钥和第二服务器MAC加密密钥对响应数据进行加密得到加密的响应数据,具体为:服务器使用第二服务器加密密钥和第二服务器MAC加密密钥对更新后的通信序号和响应数据按照选择的对称加密算法进行加密得到加密的响应数据。

步骤141:服务器向客户端发送加密的响应数据;

步骤142:客户端使用预设的哈希算法对加密的响应数据进行哈希运算,得到第一哈希运算结果;

步骤143:客户端向审计端发送第一哈希运算结果;

步骤144:审计端向客户端发送服务器第二MAC加密子密钥。

步骤145:客户端根据服务器第一MAC加密子密钥和服务器第二MAC加密子密钥生成第一服务器MAC加密密钥。

具体地,步骤145具体为:客户端将服务器第一MAC加密子密钥与服务器第二MAC加密子密钥进行按位异或运算生成第一服务器MAC加密密钥。

步骤146:客户端使用第一服务器MAC加密密钥和第一服务器加密密钥对加密的响应数据进行验证并获取响应数据,验证通过则执行步骤147,验证未通过则结束。

具体地,步骤146具体为:客户端使用第一服务器加密密钥对加密的响应数据进行解密得到响应数据和第六MAC值,使用第一服务器MAC加密密钥对响应数据按照选择的MAC算法进行加密运算得到第七MAC值,判断第七MAC值是否与第六MAC值相等,是验证通过,执行步骤147;否则验证未通过,结束。

可选地,步骤137中,客户端使用第一客户端MAC加密密钥和第一客户端加密密钥对第二请求数据进行加密得到加密的第二请求数据,具体为:客户端使用选择的压缩算法对第二请求数据进行压缩得到第五压缩数据,使用第一客户端MAC加密密钥按照选择的MAC算法对第五压缩数据进行加密得到第四MAC 值,使用第一客户端加密密钥对第五压缩数据和第四MAC值进行加密得到加密的第二请求数据。

相应地,步骤139具体为:服务器使用第二客户端加密密钥对加密的第二请求数据进行解密得到第五压缩数据和第四MAC值,使用第二服务器MAC加密密钥对第五压缩数据按照选择的MAC算法进行加密得到第五MAC值,判断第五 MAC值是否与第四MAC值相等,是则验证通过,否则验证未通过。

相应地,步骤140具体为:服务器根据选择的压缩算法对第五压缩数据进行解压得到第二请求数据,根据第二请求数据数据组织响应数据,使用选择的压缩算法对响应数据进行压缩得到第六压缩数据,使用第二服务器加密密钥和第二服务器MAC加密密钥对响应数据进行加密得到加密的响应数据。

相应地,步骤146具体为:客户端使用第一服务器加密密钥对加密的响应数据进行解密得到第五压缩数据和第六MAC值,根据选择的压缩算法对第五压缩数据进行解压得到压缩的响应数据,使用第一服务器MAC加密密钥对压缩的响应数据按照选择的MAC算法进行加密运算得到第七MAC值,判断第七MAC值是否与第六MAC值相等,是验证通过,执行步骤147;否则验证未通过,结束。

步骤147:客户端向区块链智能合约端发送响应数据。

步骤148:区块链智能合约端将响应数据写入区块链的区块中。

可选地,步骤148之前,还包括:

步骤A1:区块链智能合约端从审计端获取第一哈希运算结果,从客户端获取加密的响应数据;

步骤A2:区块链智能合约端对加密的响应数据进行哈希运算得到第二哈希运算结果,判断第二哈希运算结果是否与第一哈希运算结果一致,是则执行步骤148,否则结束。

进一步地,步骤A1中还包括:区块链智能合约端从客户端获取第一服务器加密密钥和第一服务器MAC加密密钥;

步骤A2中还包括:区块链智能合约端使用第一服务器加密密钥和第一服务器MAC加密密钥对来自客户端的响应数据进行验证,如果验证通过并且判断第二哈希运算结果与从第一哈希运算结果一致时执行步骤S8,否则结束。

具体地,服务器使用第二服务器加密密钥和第二服务器MAC加密密钥对响应数据进行加密得到加密的响应数据,具体为:服务器使用第二客户端MAC加密密钥对响应数据进行加密得到第七MAC值,使用第二客户端加密密钥对响应数据和第七MAC值进行加密生成加密的响应数据;

相应地,上述区块链智能合约端使用第一服务器加密密钥和第一服务器MAC 加密密钥对来自客户端的响应数据进行验证,具体为:区块链智能合约端使用第一服务器加密密钥对加密的响应数据进行解密得到解密的响应数据和第七 MAC值,根据服务器第一MAC加密子密钥对解密的响应数据进行按照预设MAC算法进行运算得到第九MAC值,判断第九MAC值是否与第七MAC值相等,并判断解密的响应数据是否与来自客户端的响应数据一致,是则验证通过,否则验证未通过。

可选地,上述步骤106之后、步骤108之前,还包括:

步骤r1:服务器向客户端发送证书类列表和证书甄别名列表;

步骤r2:客户端接收到证书类列表和证书甄别名列表,对证书类列表和证书甄别名列表进行保存;

相应地,上述步骤109之后、步骤110之前,还包括:

步骤r3:客户端将自身保存的用户证书发送给服务器;

具体地,步骤r3具体为:当客户端中保存有多张可用的用户证书时,则提示用户选择其中一张,将用户选择的用户证书发送给服务器;当客户端只保存一张用户证书时,则此用户证书发送给服务器。

相应地,上述步骤117之后、步骤118之前,还包括:

步骤r4:客户端对发送给服务器的数据和接收到服务器的数据进行哈希运算,使用选择的用户证书的私钥对哈希数据进行签名,得到签名数据,将签名数据发送给服务器;

步骤r5:服务器使用接收的用户证书对签名数据进行验证,验证通过则执行步骤118,否则报错结束。

需要说明的是,本实施例中,上述ClientHello.random代表第一随机数不是具体的数据,ServerHello.random代表第二随机数而不是具体的数据,例如, ClientHello.random具体数据为222555899522145568,ServerHello.random具体数据为556844122566665588;

同理,上述\"master secret\"、\"key expansion\"、\"client finished\"、 \"server finished\"分别表示第一预设数据、第二预设数据、第三预设数据、第四预设数据,而不是具体的数据;

上述client_write_MAC_secret2、server_write_MAC_secret2、 client_write_key2、server_write_key2分别表示客户端第二MAC加密子密钥、服务器第二MAC加密子密钥、客户端第二加密子密钥、服务器第二加密子密钥,而不是具体的数据;

上述handshake_messages表示发送给服务器的所有数据以及接收到的服务器的所有数据,而不是具体的数据。

可选地,本实施例中,客户端第一次接收到服务器的数据时,使用MD5算法对第一次发送给服务器的数据和第一次接收到服务器的数据进行哈希运算得到16字节的哈希数据,使用SHA1算法对第一次发送给服务器的数据和第一次接收到服务器的数据进行哈希运算得到20字节的哈希数据;后续每次接收到服务器数据时,根据上一次发送给服务器的数据、本次接收到的数据以及上一次 MD5哈希算法的哈希结果进行哈希更新生成16字节的哈希数据,根据上一次发送给服务器的数据、本次接收到的数据以及上一次SHA1哈希算法的哈希结果进行哈希更新生成20字节的哈希数据。相应地,服务器第一次接收到客户端的数据时,使用MD5算法对第一次发送给客户端的数据和第一次接收到客户端的数据进行哈希运算得到16字节的哈希数据,使用SHA1算法对第一次发送给客户端的数据和第一次接收到客户端的数据进行哈希运算得到20字节的哈希数据;后续每次接收到服务器数据时,根据上一次发送给服务器的数据、本次接收到的数据以及上一次MD5哈希算法的哈希结果进行哈希更新生成16字节的哈希数据,根据上一次发送给客户端的数据、本次接收到的数据以及上一次SHA1哈希算法的哈希结果进行哈希更新生成20字节的哈希数据;

相应地,上述客户端使用接收到服务器的所有数据以及发送给服务器的所有数据可以替换为自身保存的16字节的哈希数据和20字节的哈希数据;上述服务器使用接收到客户端的所有数据以及发送给客户端的所有数据可以替换为自身保存的16字节的哈希数据和20字节的哈希数据。

实施例3

本实施例提供一种区块链安全获取服务器可信数据的系统,如图5所示,包括区块链智能合约端1、客户端2、服务器4和审计端3;

区块链智能合约端1,包括:

第一发送模块11,用于向客户端发送第一请求数据;

第一接收模块12,用于接收来自客户端的响应数据;

写入模块13,用于将第一接收模块12接收的响应数据写入区块链的区块中;

客户端2包括:

第二接收模块21,用于接收来自区块链智能合约端1的第一请求数据;

第一握手模块22,用于根据第二接收模块21接收的第一请求数据与服务器执行握手操作;

第一协商模块23,用于第一握手模块22完成与服务器的握手操作后,执行与服务器和审计端3协商通讯密钥的操作,生成第一客户端MAC加密密钥、第一客户端加密密钥、第一服务器加密密钥和服务器第一MAC加密子密钥;

第一组织模块24,用于第一协商模块23完成与服务器和审计端3协商通讯密钥的操作之后,根据第一请求数据组织第二请求数据;

第一加密模块25,用于使用第一协商模块23生成的第一客户端加密密钥和第一客户端MAC加密密钥对第一组织模块24组织的第二请求数据进行加密生成加密的第二请求数据;

第二发送模块26,用于将第一加密模块25生成的第二请求数据发送给服务器;

上述第二接收模块21,还用于接收来自服务器的加密的响应数据;

第一哈希运算模块27,用于对第二接收模块21接收的加密的响应数据进行哈希运算得到第一哈希运算结果;

上述第二发送模块26,还用于将第一哈希运算模块27得到的第一哈希运算结果发送给审计端3;

第二接收模块21,还用于接收来自审计端3的服务器第二MAC加密子密钥;

第一协商模块23,还用于根据第二接收模块21接收的服务器第二MAC加密子密钥和服务器第一MAC加密子密钥生成第一服务器MAC加密密钥;

第一验证模块28,用于使用第一协商模块23生成的第一服务器加密密钥和第一服务器MAC加密密钥对第二接收模块21接收的加密的响应数据进行验证;

第二发送模块26,还用于当第一验证模块28验证通过时,将第一验证模块 28在验证时得到的响应数据发送给区块链智能合约端1;

审计端3包括:

第二协商模块31,用于执行与服务器和客户端协商通讯密钥的操作,生成服务器第二MAC加密子密钥;

第三接收模块32,用于接收来自客户端的第一哈希运算结果;

第三发送模块33,用于当第三接收模块32接收到第一哈希运算结果时,将第二协商模块31生成的服务器第二MAC加密子密钥发送给客户端;

服务器4包括:

第二握手模块41,用于与客户端的执行握手操作;

第三协商模块42,用于执行与审计端3和客户端协商通讯密钥的操作,生成第二客户端MAC加密密钥、第二客户端加密密钥、第二服务器加密密钥和第二服务器MAC加密密钥;

第四接收模块43,用于接收来自客户端的加密的第二请求数据;

第二验证模块44,用于使用第三协商模块42生成的第二客户端加密密钥和第二客户端MAC加密密钥对第四接收模块43接收的加密的第二请求数据进行验证;

第二组织模块45,用于当第二验证模块44验证结果为通过时,根据第二验证模块44验证时得到的第二请求数据组织响应数据;

第二加密模块46,用于使用第三协商模块42生成的第二服务器加密密钥和第二服务器MAC加密密钥对第二组织模块45组织的响应数据进行加密得到加密的响应数据;

第四发送模块47,用于将第二加密模块46得到的加密的响应数据发送给客户端。

可选地,上述区块链智能合约端1还包括:

第一获取模块,用于从审计端3获取第一哈希运算结果,从客户端获取加密的响应数据;

第二哈希运算模块,用于对第一获取模块获取的加密的响应数据进行哈希运算得到第二哈希运算结果;

第一判断模块,用于判断第二哈希运算模块得到的第二哈希运算结果是否与第一获取模块获取的第一哈希运算结果一致;

上述写入模块13,具体用于当第一判断模块判定第二哈希运算模块得到的第二哈希运算结果与第一获取模块获取的第一哈希运算结果一致时,将第一接收模块12接收的响应数据写入区块链的区块中。

进一步地,上述区块链智能合约端1还包括第三验证模块;

上述第一获取模块,还用于从客户端获取第一服务器加密密钥和第一服务器MAC加密密钥;

第三验证模块,用于使用第一获取模块获取的第一服务器加密密钥和第一服务器MAC加密密钥对第一接收模块12接收的响应数据进行验证;

上述写入模块13,具体用于当第三验证模块验证结果为通过,并且第一判断模块判定第二哈希运算模块得到的第二哈希运算结果与第一获取模块获取的第一哈希运算结果一致时,将第一接收模块12接收的响应数据写入区块链的区块中。

具体地,上述第二加密模块46,具体用于使用第三协商模块42生成的第二客户端MAC加密密钥对第二组织模块45组织的响应数据进行加密得到第七MAC 值,使用第三协商模块42生成的第二客户端加密密钥对响应数据和第七MAC值进行加密生成加密的响应数据;

上述第三验证模块,具体用于使用第一获取模块获取的第一服务器加密密钥对第一获取模块获取的加密的响应数据进行解密得到解密的响应数据和第七 MAC值,根据服务器第一MAC加密子密钥对解密的响应数据进行加密得到第九 MAC值,判断第九MAC值是否与第七MAC值相等,并判断解密的响应数据是否与第一接收模块12接收的响应数据一致,判断结果均为是时则验证通过,否则验证未通过。

可选地,上述第一握手模块22,包括:

第一生成单元,用于当第二接收模块21接收到第一请求数据时,生成第一随机数;

第一组织单元,用于根据第一生成单元生成的第一随机数组织握手请求;

第一发送单元,用于将第一组织单元组织的握手请求发送给服务器;

第一接收单元,用于接收来自服务器的包括第二随机数的握手响应数据;用于接收来自服务器的包括服务器证书的服务器证书链;用于接收来自服务器的握手结束消息;

第一验证单元,用于对第一接收单元接收的服务器证书链进行验证,验证通过则握手操作成功,否则握手操作失败;

上述第二握手模块41,包括:

第二生成单元,用于当接收到来自客户端的握手请求时,生成第二随机数;

第二组织单元,用于根据第二随机数组织握手响应数据;

第二发送单元,用于将握手响应数据发送给客户端;用于将包括服务器证书的服务器证书链发送给客户端;用于向客户端发送握手结束消息。

进一步地,上述客户端还包括保存模块;

保存模块,用于保存加密套件列表;

上述第一组织单元,具体用于根据第一生成单元生成的第一随机数和保存模块保存的加密套件列表组织握手请求;

上述第二组织单元,具体用于根据加密套件列表选择对称加密算法和MAC 算法,根据第二随机数、选择的对称加密算法和MAC算法组织握手响应数据;

上述第一握手模块22还包括选择单元;

选择单元,用于根据服务器选择的对称加密算法和MAC算法选择对称加密算法和MAC算法。

更进一步地,上述保存模块,还用于保存压缩算法列表;

上述第一组织单元,具体用于根据第一生成单元生成的第一随机数、保存模块保存的加密套件列表和压缩算法列表组织握手请求;

第二组织单元,具体用于根据加密套件列表选择对称加密算法和MAC算法,根据压缩算法列表选定压缩算法,根据第二随机数、选择的对称加密算法和MAC 算法、选择的压缩算法组织握手响应数据;

第一握手模块22还包括选择单元;

选择单元,用于根据服务器选择的对称加密算法、MAC算法和压缩算法选择对称加密算法、MAC算法和压缩算法。

可选地,上述第一协商模块23,具体用于第一握手模块22完成与服务器的握手操作后,与审计端3协商,生成第一客户端MAC加密密钥、第一客户端加密密钥、第一服务器加密密钥、服务器第一MAC加密子密钥,审计端3生成服务器第二MAC加密子密钥;

上述第二协商模块31,具体用于与客户端协商,生成服务器第二MAC加密子密钥;

上述第三协商模块42,具体用于与客户端协商,生成第二客户端MAC加密密钥、第二客户端加密密钥、第二服务器加密密钥和第二服务器MAC加密密钥。

本实施例中,上述第一握手模块22具体用于根据第一请求数据与服务器执行握手操作,生成第一随机数,并将第一随机数发送给服务器,获取来自服务器的第二随机数和服务器证书;

上述第一协商模块23,包括:

第一生成子模块,用于第一握手模块22完成与服务器的握手操作后,生成第一预主密钥;

第二生成子模块,用于根据第一生成子模块生成的第一预主密钥、第一握手模块22生成的第一随机数、第一握手模块22获取的第二随机数生成第一子运算数据和第二子运算数据;

第一发送子模块,用于将第二生成子模块生成的第二子运算数、第一握手模块22生成的第一随机数、第一握手模块22获取的第二随机数和服务器证书发送给审计端3;

第一接收子模块,用于接收来自审计端3的第三子运算数据、服务器第二加密子密钥、客户端第二MAC加密子密钥、客户端第二加密子密钥发送给客户端和第二加密数据;

第三生成子模块,用于根据第二生成子模块生成的第一子运算数据和第一接收子模块接收的第三子运算数据生成第一主密钥;

第四生成子模块,用于根据第三生成子模块生成的第一主密钥、第一接收模块12接收的第一随机数和第二随机数生成客户端第一MAC加密子密钥、客户端第一加密子密钥、服务器第一加密子密钥和服务器第一MAC加密子密钥;

第五生成子模块,用于根据第四生成子模块生成的客户端第一MAC加密子密钥和第一接收子模块接收的客户端第二MAC加密子密钥生成第一客户端MAC 加密密钥,根据第四生成子模块生成的客户端第一加密子密钥和第一接收子模块接收的客户端第二加密子密钥生成第一客户端加密密钥,根据第四生成子模块生成的服务器第一加密子密钥和第一接收子模块接收的服务器第二加密子密钥生成第一服务器加密密钥;

第六生成子模块,用于根据第一生成子模块生成的第一预主密钥和第一接收子模块接收的服务器证书生成第一加密数据;

取余数运算模块,用于将第六生成子模块生成的第一加密数据和第一接收子模块接收的第二加密数据进行乘积运算,将乘积运算结果对第服务器证书的公钥的模取余数得到取余数运算结果;

第一组织子模块,用于根据第一握手模块22生成的第一随机数、第一握手模块22获取的第二随机数和服务器证书、取余数运算模块得到的取余数运算结果组织第三待加密数据;

上述第一发送子模块,还用于将第一组织子模块组织的第三待加密数据发送给审计端3;

上述第一接收子模块,还用于接收来自审计端3的第二验证数据;

第七生成子模块,用于根据第一组织子模块组织的第三待加密数据、第三生成子模块生成的第一主密钥生成第一验证数据;

第八生成子模块,用于根据第七生成子模块生成的第一验证数据和第一接收子模块接收的第二验证数据生成第三验证数据;

第一加密子模块,用于使用第五生成子模块生成的第一客户端MAC加密密钥和客户端第一加密子密钥对第八生成子模块生成的第三验证数据进行加密得到第三加密数据;

上述第一发送子模块,还用于将第一加密子模块生成的第三加密数据和取余数运算模块得到的取余数运算结果发送给服务器;

上述第一接收子模块,还用于接收来自服务器的完成协商通讯密钥的通知;

上述第一组织模块24,具体用于第一接收子模块接收到完成协商通讯密钥的通知时,根据第一接收模块12接收的第一请求数组织第二请求数据;

上述第二协商模块31,包括:

第二接收子模块,用于接收来自客户端的第一随机数、第二随机数、第二子运算数和服务器证书;

第九生成子模块,用于生成第二预主密钥;

第十生成子模块,用于根据第九生成子模块生成的第二预主密钥、第二接收子模块接收的第一随机数和第二随机数生成第三子运算数据和第四子运算数据;

第十一生成子模块,用于根据第二接收子模块接收的第二子运算数据、第十生成子模块生成的第四子运算数据生成第二主密钥;

第十二生成子模块,用于根据第十一生成子模块生成的第二主密钥、第二接收子模块接收的第一随机数和第二随机数生成服务器第二MAC加密子密钥、服务器第二加密子密钥、客户端第二MAC加密子密钥、客户端第二加密子密钥;

第二发送子模块,用于将第十生成子模块生成的第三子运算数据、第十二生成子模块生成的服务器第二加密子密钥、第十二生成子模块生成的客户端第二MAC加密子密钥、第十二生成子模块生成的客户端第二加密子密钥发送给客户端;

第十三生成子模块,用于根据第九生成子模块生成的第二预主密钥和第二接收子模块接收的服务器证书生成第二加密数据;

上述第二发送子模块,还用于将第十三生成子模块生成的第二加密数据发送给客户端;

上述第二接收子模块,还用于接收来自客户端的第三待加密数据;

第十四生成子模块,用于根据第二接收子模块接收的第三待加密数据和第十一生成子模块生成的第二主密钥生成第二验证数据;

上述第二发送子模块,还用于将第十四生成子模块生成的第二验证数据发送给客户端;

上述第二握手模块41,具体用于接收来自客户端的第一随机数,生成第二随机数,将第二随机数和服务器证书发送给客户端;

上述第三协商模块42,包括:

保存子模块,用于保存服务器证书的私钥;

第三接收子模块,用于接收来自客户端的第三加密数据和取余数运算结果;

第一解密子模块,用于使用保存子模块保存的服务器证书的私钥对第三接收子模块接收的取余数运算结果进行解密得到解密数据,从解密数据中获取第一预主密钥和第二预主密钥;

第十五生成子模块,用于根据第一解密子模块获取的第一预主密钥和第二预主密钥、第二握手模块41接收的第一随机数、第二握手模块41生成的第二随机数生成第二客户端MAC加密密钥、第二客户端加密密钥、第二服务器加密密钥和第二服务器MAC加密密钥;

第一验证子模块,用于使用第十五生成子模块生成的第二客户端MAC加密密钥、第二客户端加密密钥对第三接收子模块接收的第三加密数据进行验证;

第三发送子模块,用于第一验证子模块验证通过时向客户端发送完成协商通讯密钥的通知。

可选地,上述第三协商模块42还包括:

第十六生成子模块,用于第一验证子模块验证通过时,根据第二握手模块 41接收的第一随机数、第二握手模块41生成的第二随机数、第三接收子模块接收的取余数运算结果和第三加密数据生成第四加密数据;

上述第三发送子模块,具体用于将第十六生成子模块生成的第四加密数据发送给客户端;

上述第一协商模块23,还包括:

上述第一接收子模块,还用于接收来自服务器的第四加密数据;

第二组织子模块,用于根据第一握手模块22生成的第一随机数、第一握手模块22获取的第二随机数、第三接收子模块接收的第三加密数据和取余数运算结果组织第六待加密数据;

第二发送子模块,还用于将第二组织子模块组织的第六待加密数据发送给审计端3;

第一接收子模块,还用于接收来自审计端3的第六验证数据;

第十七生成子模块,用于根据第一接收模块12接收的第六验证数据、第三生成子模块生成的第一主密钥生成第七验证数据;

第十八生成子模块,用于根据第一接收模块12接收的第六验证数据、第十七生成子模块生成的第七验证数据生成第八验证数据;

第二验证子模块,用于根据第十八生成子模块生成的第八验证数据、第一接收子模块接收的第四加密数据进行验证;

第一组织模块24,具体用于第二验证子模块验证通过时,根据第一接收模块12接收的第一请求数据组织第二请求数据;

第二接收子模块,还用于接收来自客户端的第六待加密数据;

第二协商模块31还包括:

第十九生成子模块,用于根据第二接收子模块接收的第六待加密数据、第十一生成子模块生成的第二主密钥生成第六验证数据;

第二发送子模块,还用于将第十九生成子模块生成的第六验证数据发送给客户端。

进一步地,上述保存子模块,还用于保存第四预设数据;第一协商模块23 还包括第一保存子模块,第一保存子模块用于保存第四预设数据;

上述第一握手模块22和第二握手模块41还用于选择对称加密算法和MAC 加密算法;

上述第十六生成子模块,包括第一生成子单元和第二生成子单元:

第一生成子单元,用于按照第四预设算法对第二握手模块41接收的第一随机数、第二握手模块41生成的第二随机数、第三接收子模块接收的取余数运算结果和第三加密数据进行运算得到第八运算结果,按照第五预设算法对第二握手模块41接收的第一随机数、第二握手模块41生成的第二随机数、第三接收子模块接收的取余数运算结果和第三加密数据进行运算得到第九运算结果,根据第八运算结果、第九运算结果和保存子模块保存的第四预设数据生成第五验证数据;

第二生成子单元,用于使用第十五生成子模块生成的第二服务器MAC加密密钥对第五验证数据按照第二握手模块41选择的MAC算法进行加密得到第三 MAC值,使用第十五生成子模块生成的服务器加密密钥对第五验证数据和第三 MAC值按照所第二握手模块41选择的对称加密算法进行加密生成第四加密数据;

上述第二组织子模块,具体用于按照第四预设算法对第一握手模块22生成的第一随机数、第一握手模块22获取的第二随机数、第三接收子模块接收的第三加密数据和取余数运算结果进行运算得到第十运算结果,按照第五预设算法对第一握手模块22生成的第一随机数、第一握手模块22获取的第二随机数、第三接收子模块接收的第三加密数据和取余数运算结果进行运算得到第十一运算结果,根据第十运算结果、第十一运算结果和第一保存子模块保存的第四预设数据生成第六待加密数据;

上述第十九生成子模块,具体用于对第二接收子模块接收的第六待加密数据、第十一生成子模块生成的第二主密钥按照第二预设算法进行运算生成第六验证数据;

上述第十七生成子模块,具体用于对第二组织子模块组织的第六待加密数据、第三生成子模块生成的第一主密钥按照第一预设算法进行运算得到第七验证数据;

上述第十八生成子模块,具体用于将第一接收模块12接收的第六验证数据与第十七生成子模块生成的第七验证数据进行按位异或运算生成第八验证数据;

上述第二验证子模块,包括第一解密子单元和第一判断子单元;

第一解密子单元,用于使用第一服务器加密密钥对第四加密数据进行解密得到第五验证数据和第三MAC值;

第一判断子单元,用于判断第十八生成子模块生成的第八验证数据是否与第十六生成子模块生成的第五验证数据一致;

第一组织模块24,具体用于第二验证子模块验证判断第十八生成子模块生成的第八验证数据与第十六生成子模块生成的第五验证数据一致时,根据第一接收模块12接收的第一请求数据组织第二请求数据。

更进一步地,上述第二握手模块41和第一握手模块22还用于选择压缩算法;

上述第二生成子单元,具体用于对第五验证数据按照第二握手模块41选择的压缩算法进行压缩得到第三压缩数据,使用第十五生成子模块生成的第二服务器MAC加密密钥对第三压缩数据按照第二握手模块41选择的MAC算法进行加密得到第三MAC值,使用第十五生成子模块生成的第二服务器加密密钥对第三压缩数据和第三MAC值按照所第二握手模块41选择的对称加密算法进行加密生成第四加密数据;

上述第一解密子单元,具体用于使用第一服务器加密密钥对第四加密数据进行解密得到第三压缩数据和第三MAC值;

上述第一判断子单元,具体用于对第八验证数据按照第一握手模块22选择的压缩算法进行压缩运算得到第四压缩数据,判断第四压缩数据是否与第三压缩数据相等,是则验证通过,否则验证未通过。

具体地,上述第二生成子单元,具体用于对第五验证数据中预设字节上的数据按照第二握手模块41选择的压缩算法进行压缩得到第三压缩数据,使用第十五生成子模块生成的第二服务器MAC加密密钥对第三压缩数据按照第二握手模块41选择的MAC算法进行加密得到第三MAC值,使用第十五生成子模块生成的第二服务器加密密钥对第三压缩数据和第三MAC值按照所第二握手模块41选择的对称加密算法进行加密生成第四加密数据;

上述第一判断子单元,具体用于对第八验证数据中预设字节上的数据按照第一握手模块22选择的压缩算法进行压缩运算得到第四压缩数据,判断第四压缩数据是否与第三压缩数据相等,是则验证通过,否则验证未通过。

可选地,上述第一生成子模块,具体用于按照预设格式根据预设的数据生成第一预主密钥;

上述第九生成子模块,具体用于按照预设格式根据预设的数据生成第二预主密钥。

可选地,上述第一协商模块23还包括第一保存子模块;第一保存子模块用于保存第一预设数据;

上述第二协商模块31还包括第二保存子模块;第二保存子模块用于保存第一预设数据;

上述第二生成子模块,具体用于根据第一生成子模块生成的第一预主密钥、第一保存子模块保存的第一预设数据、第一握手模块22生成的第一随机数、第一握手模块22获取的第二随机数生成第一运算数据,将第一运算数据进行分割生成第一子运算数据和第二子运算数据;

上述第十生成子模块,具体用于根据第九生成子模块生成的第二预主密钥、第二保存子模块保存的第一预设数据、第二接收子模块接收的第一随机数和第二随机数生成第二运算数据,将第二运算数据进行分割生成第三子运算数据和第四子运算数据。

可选地,上述第一握手模块22和第二握手模块41还用于选择对称加密算法和MAC算法;

上述第一发送子模块,还用于根据第一握手模块22选择的对称加密算法;

上述第二协商模块31还包括第二保存子模块,第二保存子模块用于保存第二预设数据;

上述第三协商模块42还包括保存子模块,保存子模块用于保存第一预设数据和第三预设数据;

上述第十二生成子模块,具体用于根据第十一生成子模块生成的第二主密钥、第二保存子模块保存的第二预设数据、第二接收子模块接收的第一随机数和第二随机数生成第二通讯密钥,根据客户端模块选择的MAC算法和对称加密算法将第二通讯密钥进行分割得到服务器第二MAC加密子密钥、服务器第二加密子密钥、客户端第二MAC加密子密钥、客户端第二加密子密钥;

上述第四生成子模块,具体用于根据第三生成子模块生成的第一主密钥、第一保存子模块保存的第二预设数据、第一接收模块12接收的第一随机数和第二随机数生成第一通讯密钥,根据握手操作时选择的MAC算法和对称加密算法将第一通讯密钥进行分割得到客户端第一MAC加密子密钥、客户端第一加密子密钥、服务器第一加密子密钥和服务器第一MAC加密子密钥;

上述第十五生成子模块,具体用于根据第一解密子模块获取的第一预主密钥和第二预主密钥、保存子模块保存的第一预设数据、第二握手模块41接收的第一随机数、第二握手模块41生成的第二随机数生成第三主密钥,根据第三主密钥、保存子模块保存的第二预设数据、第一随机数、第二随机数生成第三通讯密钥,根据握手操作时选择的MAC算法和对称加密算法将第三通讯密钥进行分割得到第二客户端MAC加密密钥、第二客户端加密密钥、第二服务器加密密钥和第二服务器MAC加密密钥。

具体地,上述第十一生成子模块,具体用于将第二接收子模块接收的第二子运算数据与第十生成子模块生成的第四子运算数据进行按位异或运算生成第二主密钥;

上述第三生成子模块,具体用于将第二生成子模块生成的第一子运算数据与第一接收子模块接收的第三子运算数据进行按位异或运算生成第一主密钥;

上述第五生成子模块,具体用于将第四生成子模块生成的客户端第一MAC 加密子密钥与第一接收子模块接收的客户端第二MAC加密子密钥进行按位异或运算生成第一客户端MAC加密密钥,将第四生成子模块生成的客户端第一加密子密钥与第一接收子模块接收的客户端第二加密子密钥进行按位异或运算生成第一客户端加密密钥,将第四生成子模块生成的服务器第一加密子密钥与第一接收子模块接收的服务器第二加密子密钥进行按位异或运算生成第一服务器加密密钥;

上述第十五生成子模块,具体用于根据第一解密子模块获取的第一预主密钥、保存子模块保存的第一预设数据、第二握手模块41接收的第一随机数、第二握手模块41生成的第二随机数按照第一预设算法进行运算得到第一运算数据,根据第一解密子模块获取的第二预主密钥、保存子模块保存的第一预设数据、第二握手模块41接收的第一随机数、第二握手模块41生成的第二随机数按照第二预设算法进行运算得到第二运算数据,将第一运算数据与第二运算数据进行按位异或运算生成第三主密钥,根据第三主密钥、保存子模块保存的第二预设数据、第一随机数、第二随机数生成第三通讯密钥,根据握手操作时选择的MAC算法和对称加密算法将第三通讯密钥进行分割得到第二客户端MAC加密密钥、第二客户端加密密钥、第二服务器加密密钥和第二服务器MAC加密密钥;

上述第一协商模块23还包括第二十生成子模块;

第二十生成子模块,用于将第二接收模块21接收的服务器第二MAC加密子密钥与服务器第一MAC加密子密钥进行按位异或运算生成第一服务器MAC加密密钥。

可选地,上述第六生成子模块,具体用于根据第一生成子模块生成的第一预主密钥生成第一待加密数据,使用第一接收子模块接收的服务器证书的公钥按照第三预设算法对第一待加密数据进行加密得到第一加密数据;

上述第十三生成子模块,具体用于根据第九生成子模块生成的第二预主密钥生成第二待加密数据,使用第二接收子模块接收的服务器证书的公钥按照第三预设算法对第二待加密数据进行加密生成第二加密数据。

可选地,上述第一协商模块23还包括第一保存子模块,第一保存子模块用于保存第三预设数据;

上述第三协商模块42还包括保存子模块,保存子模块用于保存第三预设数据;

上述第一握手模块22和上述第二握手模块41还用于选择对称加密算法和 MAC算法;

上述第一组织子模块,具体用于按照第四预设算法对第一握手模块22生成的第一随机数、第一握手模块22获取的第二随机数和服务器证书、取余数运算模块得到的取余数运算结果进行运算得到的第四运算结果,按照第五预设算法对第一握手模块22生成的第一随机数、第一握手模块22获取的第二随机数和服务器证书、取余数运算模块得到的取余数运算结果进行运算得到的第五运算结果,根据保存子模块保存的第三预设数据、第四运算结果、第五运算结果组织第三待加密数据;

上述第七生成子模块,具体用于对第一组织子模块组织的第三待加密数据、第三生成子模块生成的第一主密钥按照第一预设算法进行运算得到第一验证数据;

上述第十四生成子模块,具体用于对第二接收子模块接收的第三待加密数据和第十一生成子模块生成的第二主密钥按照第二预设算法进行运算得到第二验证数据;

上述第八生成子模块,具体用于将第七生成子模块生成的第一验证数据和第一接收子模块接收的第二验证数据进行按位异或运算生成第三验证数据;

上述第一加密子模块,用于对第八生成子模块生成的第三验证数据按照第一握手模块22选择的压缩算法进行压缩运算得到第一压缩数据,使用第五生成子模块生成的第一客户端MAC加密密钥对第一压缩数据按照第一握手数据选择的MAC算法进行加密得到第一MAC值,使用第五生成子模块生成的客户端第一加密密钥对第一压缩数据和第一MAC值按照第一握手模块22选择的对称加密算法进行加密得到第三加密数据;

上述第一验证子模块,具体用于对第一随机数、第二随机数、服务器证书、取余数运算结果进行运算得到第六运算结果,按照第五预设算法对第一随机数、第二随机数、服务器证书、取余数运算结果进行运算得到第七运算结果,根据自身保存的第三预设数据、第六运算结果和第七运算结果组织第四待加密数据,使用第十五生成子模块生成的第二客户端加密密钥对第三加密数据进行解密得到第一压缩数据和第一MAC值,第四验证数据按照第二握手模块41选择的压缩算法进行压缩运算得到第二压缩数据,使用第十五生成子模块生成的第二客户端MAC加密密钥对第二压缩数据按照第二握手模块41选择的MAC算法进行加密得到第二MAC值,判断第二MAC值是否与第一MAC值相等,当判断第二MAC值是与第一MAC值相等时,判断第二压缩数据是否与第一压缩数据相同,是则验证通过;否则验证未通过。

可选地,上述第一握手模块22和第二握手模块41还用于选择对称加密算法和MAC算法;

上述第一加密模块25,具体用于使用第一协商模块23生成的第一客户端 MAC加密密钥按照第一握手模块22选择的MAC算法对第一组织模块24组织的第二请求数据进行加密得到第五MAC值,使用第一协商模块23生成的第一客户端加密密钥按照第一握手模块22选择的对称加密算法对第二请求数据和第五MAC 值进行加密生成加密的第二请求数据;

上述第二验证模块44,具体用于使用第三协商模块42生成的第二客户端加密密钥按照第二握手模块41选择的对称算法对第四接收模块43接收的加密的第二请求数据进行解密得到第二请求数据和第五MAC值,使用第二客户端MAC 加密密钥按照第二握手模块41选择的MAC算法对第四接收模块43接收的加密的第二请求数据进行加密得到第六MAC值,判断第五MAC值是否与第六MAC值一致,是则验证通过,否则验证未通过。

具体地,上述第二加密模块46,具体用于使用第三协商模块42生成的第二服务器MAC加密密钥按照第二握手模块41选择的MAC算法对第二组织模块45 组织的响应数据进行加密得到第七MAC值,使用第三协商模块42生成的第二服务器加密密钥按照握手操作时选择的对称加密算法对第二组织模块45组织的响应数据所和第七MAC值进行加密生成加密的响应数据;

上述第一验证模块28,具体用于使用第一协商模块23生成的第一服务器加密密钥按照第一握手模块22选择的对称加密算法对第二接收模块21接收的加密的响应数据进行解密得到响应数据和第七MAC值,使用第一协商模块23生成的第一服务器MAC加密密钥按照选择的MAC算法对解密得到的响应数据进行加密得到第八MAC值,判断解密得到的第七MAC值是否与第八MAC值一致,是则验证通过,否则验证未通过。

以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1