本发明涉及信息安全技术领域,尤其涉及一种密钥协商的方法及装置。
背景技术:
目前,客户端与服务器主要通过HTTPS协议(Hyper Text Transfer Protocol over Secure Socket Layer,超文本传送协议的安全版)建立安全连接,即先采用SSL/TLS协议(Secure Socket Layer/Transport Layer Security,安全套接层协议/传输层安全协议)协商建立安全连接的密钥,通过协商得到的密钥,对传输的信息加密并进行HTTP通信。
然而,通过SSL/TLS协议协商密钥的过程比较复杂,至少需要4个回合才能完成密钥协商,协商过程参见图1。
S101、客户端先向服务器发出加密通信的请求,即ClientHello请求。该请求中,客户端向服务器提供:支持的协议版本;客户端生成的第一个随机数,稍后用于生成"协商密钥";支持的加密方法;支持的压缩方法。
S102、服务器收到客户端请求后,向客户端发出回应,SeverHello响应。服务器的回应包含:确认使用的加密通信协议版本;服务器生成的第二个随机数,稍后用于生成"协商密钥";确认使用的加密方法;服务器证书。
S103、客户端收到服务器回应后,客户端从证书中取出服务器的公钥。向服务器发送:客户端生成的第三个随机数,该随机数用服务器公钥加密;编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送;客户端握手结束通知。
S104、服务器收到客户端的第三个随机数后,计算生成本次会话所用的"会话密钥"。向客户端发送:编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送;服务器握手结束通知。
至此,整个握手阶段全部结束,客户端与服务器进入加密通信,用"会话密钥"加密内容并使用普通的HTTP协议传输。
综上所述,通过SSL/TLS协议协商密钥的过程至少需要4个回合才能完成密钥协商,这使得2G/3G(2Generation/3Generation,第二代移动通信系统/第三代移动通信系统)的移动网络的连接效率低,实用性差的问题。
技术实现要素:
本发明实施例提供了一种密钥协商的方法及装置,只需通过一次交互即可协商确定会话密钥,用以避免现有技术中需要多次交互才能获得会话密钥的问题,提高了密钥协商的效率。
本发明实施例提供的一种密钥协商的方法,该方法包括:
利用接收端的公钥对发送端随机生成的第一随机数加密,生成发送端的会话密钥,其中,所述会话密钥为用于加密所述发送端与所述接收端的会话的密钥;
利用所述发送端的会话密钥,通过预设的加密算法,对所述发送端随机生成的第二随机数加密,生成加密的协商密钥;
将第一压缩包以及所述加密算法发送给所述接收端,其中,所述第一压缩包包括:加密的协商密钥以及根据所述第一随机数确定的用于所述接收端确定会话密钥的随机数密钥。
本发明实施例中,只需通过一次交互即可协商确定会话密钥,避免现有技术中需要多次交互才能获得会话密钥的问题,提高了密钥协商的效率。
较佳地,在生成加密的协商密钥之后,该方法还包括:
利用所述发送端的私钥,通过预设的签名算法,对第一压缩包进行签名,生成签名后的第一压缩包;
其中,将第一压缩包以及所述加密算法发送给所述接收端,包括:
将所述第一压缩包、所述签名后的第一压缩包以及所述加密算法发送给所述接收端。
较佳地,所述随机数密钥为所述第一随机数与椭圆曲线上的基点进行点乘生成的。
较佳地,所述第一随机数为根据随机数算法生成的字符串,或为根据第三随机数与生成所述第三随机数的时间通过HKDF算法生成的,其中,所述第三随机数为根据随机数算法生成的字符串。
较佳地,所述第一压缩包还包括:预设的所述发送端的会话密钥的有效时间。
较佳地,该方法还包括:
接收所述接收端发送的签名后的会话密钥,其中,所述签名后的会话密钥为根据接收端的私钥与所述接收端的会话密钥得到的;
利用所述接收端的公钥对签名后的会话密钥进行验证。
本发明实施例中,通过预设会话密钥的有效时间,结合数字签名技术有效的防止重放攻击和中间人攻击。
本发明实施例提供的一种密钥协商的方法,该方法包括:
接收发送端发送的第一压缩包以及预设的加密算法,其中,所述第一压缩包包括,用于确定会话密钥的随机数密钥;
根据接收端的私钥以及所述随机数密钥,通过解密算法得到接收端的会话密钥,其中,所述解密算法为根据所述加密算法得到的。
本发明实施例中,只需通过一次交互即可协商确定会话密钥,避免现有技术中需要多次交互才能获得会话密钥的问题,提高了密钥协商的效率。
较佳地,所述第一压缩包还包括:加密后的协商密钥;该方法还包括:
利用所述接收端的会话密钥,通过所述解密算法,对加密后的协商密钥进行解密,得到协商密钥;
利用发送端的公钥,通过接收到的签名算法,对第二压缩包进行签名,生成签名后的第二压缩包;其中,所述第二压缩包包括,所述协商密钥和所述随机数密钥;
若所述签名后的第二压缩包和所述签名后的第一压缩包相同,则确定所述接收端的会话密钥为用于加密所述发送端与所述接收端的会话的密钥。
较佳地,该方法还包括:
利用所述接收端的私钥,通过所述签名算法对所述接收端的会话密钥签名,并将签名后的会话密钥发送给发送端。
本发明实施例提供的一种密钥协商的装置,该装置包括:
会话密钥模块,用于利用接收端的公钥对发送端随机生成的第一随机数加密,生成发送端的会话密钥,其中,所述会话密钥为用于加密所述发送端与所述接收端的会话的密钥;
协商密钥模块,用于利用所述发送端的会话密钥,通过预设的加密算法,对所述发送端随机生成的第二随机数加密,生成加密的协商密钥;
发送模块,用于将第一压缩包以及预设的加密算法发送给所述接收端,其中,所述第一压缩包包括:加密的协商密钥以及所述随机数密钥。
较佳地,在生成加密的协商密钥之后,所述协商密钥模块还用于:
利用所述发送端的私钥,通过预设的签名算法,对第一压缩包进行签名,生成签名后的第一压缩包;
其中,所述发送模块具体用于:
将所述第一压缩包、所述签名后的第一压缩包以及所述加密算法发送给所述接收端。
较佳地,所述随机数密钥为所述第一随机数与椭圆曲线上的基点进行点乘生成的。
较佳地,所述第一随机数为根据随机数算法生成的字符串,或为根据第三随机数与生成所述第三随机数的时间通过HKDF算法生成的,其中,所述第三随机数为根据随机数算法生成的字符串。
较佳地,所述第一压缩包还包括:预设的所述发送端的会话密钥的有效时间。
较佳地,所述发送模块还用于:
接收所述接收端发送的签名后的会话密钥,其中,所述签名后的会话密钥为根据接收端的私钥与所述接收端的会话密钥得到的;
利用所述接收端的公钥对签名后的会话密钥进行验证。
本发明实施例中,通过预设会话密钥的有效时间,结合数字签名技术有效的防止重放攻击和中间人攻击。
本发明实施例提供的一种密钥协商的装置,该装置包括:
接收模块,用于接收发送端发送的第一压缩包以及预设的加密算法,其中,所述第一压缩包包括,用于确定会话密钥的随机数密钥;
会话密钥模块,用于根据接收端的私钥以及所述随机数密钥,通过解密算法得到接收端的会话密钥,其中,所述解密算法为根据所述加密算法得到的。
本发明实施例中,只需通过一次交互即可协商确定会话密钥,避免现有技术中需要多次交互才能获得会话密钥的问题,提高了密钥协商的效率。
较佳地,所述第一压缩包还包括:加密后的协商密钥;该方法还包括:
利用所述接收端的会话密钥,通过所述解密算法,对加密后的协商密钥进行解密,得到协商密钥;
利用发送端的公钥,通过接收到的签名算法,对第二压缩包进行签名,生成签名后的第二压缩包;其中,所述第二压缩包包括,所述协商密钥和所述随机数密钥;
若所述签名后的第二压缩包和所述签名后的第一压缩包相同,则确定所述接收端的会话密钥为用于加密所述发送端与所述接收端的会话的密钥。
较佳地,所述会话密钥模块还用于:
利用所述接收端的私钥,通过所述签名算法对所述接收端的会话密钥签名,并将签名后的会话密钥发送给发送端。
附图说明
图1为通过SSL/TLS协议进行密钥协商的流程示意图;
图2为本发明实施例提供的发送端侧的一种密钥协商的方法的流程示意图;
图3为本发明实施例提供的接收端侧的一种密钥协商的方法的流程示意图;
图4为本发明实施例提供的一种密钥协商的装置的结构示意图;
图5为本发明实施例提供的一种密钥协商的装置的结构示意图;
图6a、图6b为本发明实施例提供的密钥协商的系统的整体流程示意图。
具体实施方式
本发明实施例提供了一种密钥协商的方法及装置,只需通过一次交互即可协商确定会话密钥,用以避免现有技术中需要多次交互才能获得会话密钥的问题,提高了密钥协商的效率。
下面将结合本发明实施例中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图2,本发明实施例提供了发送端侧的一种密钥协商的方法,该方法包括:
S201、利用接收端的公钥对发送端随机生成的第一随机数加密,生成发送端的会话密钥,其中,所述会话密钥为用于加密所述发送端与所述接收端的会话的密钥;
S202、利用所述发送端的会话密钥,通过预设的加密算法,对所述发送端随机生成的第二随机数加密,生成加密的协商密钥;
S203、将第一压缩包以及所述加密算法发送给所述接收端,其中,所述第一压缩包包括:加密的协商密钥以及根据所述第一随机数确定的用于所述接收端确定会话密钥的随机数密钥。
其中,所述步骤S201中生成的会话密钥为用于在密钥协商结束后,对发送端和接收端之间会话的加密;步骤S202中生成的协商密钥为用于在发送端和接收端对协商密钥时会话的加密。
其中,所述第一随机数为发送端随机生成的32字节的字符串,或为根据发送端根据随机算法生成的第三随机数与生成所述第三随机数的时间,通过HKDF算法派生出32字节的字符串。其中,所述第三随机数为16字节的字符串。
具体地,步骤S203中的所述随机数密钥为根据所述第一随机数与椭圆曲线上的基点生成的。其中,所述接收端根据所述接收端的私钥和所述随机数密钥,通过预设的解密算法,得到所述会话密钥。
具体地,根据所述第一随机数与椭圆曲线上的基点,生成随机数密钥,具体包括:
对32字节的第一随机数rc1取整数,得到取整后的第一随机数[rc1];
将取整后的第一随机数[rc1]与椭圆曲线上的基点G执行点乘操作,得到随机数密钥RC。
其中,所述会话密钥包括:工作密钥和检验密钥。
具体地,步骤S201中的“利用接收端的公钥对发送端随机生成的第一随机数加密,生成发送端的会话密钥”,具体包括:
对32字节的第一随机数rc1取整数,得到取整后的第一随机数[rc1];
确定接收端的公钥在椭圆曲线上对应的点KPs;
将接收端的公钥对应的点KPs与取整后的第一随机数[rc1]进行点乘计算,得到32字节的计算中间值坐标(XKEY,YKEY),将中间值坐标转换为32字节的中间值字符串;
通过HKDF算法,根据所述中间值字符串派生出32字节的工作密钥working_key和16字节的检验密钥mac_key。
其中,步骤S202具体包括:
利用所述发送端的工作密钥,通过预设的加密算法,对所述发送端随机生成的第二随机数加密,生成加密后的协商密钥。
其中,在步骤S202之后,该方法还包括:
利用所述发送端的私钥,通过预设的签名算法,对第一压缩包进行签名,生成签名后的第一压缩包,其中,所述第一压缩包tbsClientMessage包括:加密后的协商密钥、根据所述第一随机数确定的随机数密钥RC以及支持的协议版本version,客户端序列号serial。其中,所述会话密钥的截止时间为生成第二随机数的时间与预设的所述会话密钥的有效时间的加和。
其中,步骤S203具体包括:
将所述第一压缩包tbsClientMessage、所述签名后的第一压缩包signature以及预设的加密算法encryptionAlgorithm、预设的签名算法signatureAlgorithm发送给所述接收端。
其中,所述第一压缩包tbsClientMessage还包括:预设的所述会话密钥的有效时间nonceLife;且在步骤S203之后,该方法还包括:
接收所述接收端发送的签名后的会话密钥,其中,所述签名后的会话密钥为根据接收端的私钥与所述接收端的会话密钥通过预设的签名算法得到的;
通过与所述签名算法对应的解密算法,利用所述接收端的公钥对签名后的会话密钥进行验证。
本发明实施例中,通过预设会话密钥的有效时间,结合数字签名技术有效的防止重放攻击和中间人攻击对通信信息的篡改和窃取。其中,重放攻击是计算机世界黑客常用的攻击方式之一,所谓重放攻击就是攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程。中间人攻击(Man-in-the-Middle Attack,MITM)是通过拦截正常的网络通信数据,并进行数据篡改和嗅探,而通信的双方却毫不知情。
参见图3,本发明实施例提供了接收端侧的一种密钥协商的方法,该方法包括:
S301、接收发送端发送的第一压缩包以及预设的加密算法,其中,所述第一压缩包包括,用于确定会话密钥的随机数密钥;
S302、根据接收端的私钥以及所述随机数密钥,通过解密算法得到接收端的会话密钥,其中,所述解密算法为根据所述加密算法得到的。
其中,在步骤S302之前,该方法还包括:
接收发送端发送的签名后的第一压缩包以及预设的签名算法。
其中,步骤S302具体包括:
对接收端的私钥取整数,得到取整后的私钥[d];
确定所述随机数密钥在椭圆曲线上对应的点RC;
将所述随机数密钥对应的点RC与取整后的私钥[d]进行点乘计算,得到会话密钥。
其中,所述会话密钥包括:工作密钥和检验密钥;因此,步骤S302中得到会话密钥,具体包括:
通过HKDF算法,派生出32字节的工作密钥和16字节的检验密钥。
具体地,所述第一压缩包还包括:加密后的协商密钥;
在步骤S302之后,该方法还包括:
利用所述接收端的会话密钥中的工作密钥,通过所述解密算法,对加密后的协商密钥进行解密,得到协商密钥;
利用发送端的公钥,通过接收到的签名算法,对第二压缩包进行签名,生成签名后的第二压缩包;其中,所述第二压缩包包括,所述协商密钥和所述随机数密钥;
若所述签名后的第二压缩包和所述签名后的第一压缩包相同,则确定所述接收端的会话密钥为用于加密所述发送端与所述接收端的会话的密钥。
其中,在步骤S302后,该方法还包括:
利用所述接收端的私钥,通过所述签名算法对所述接收端的会话密钥中的工作密钥进行签名,并将签名后的会话密钥发送给发送端。具体地,通过所述签名算法对所述接收端的工作密钥进行签名,并将签名后的工作密钥发送给发送端。
本发明实施例中,利用客户端序列号以及协商密钥,标识本次连接;并通过工作密钥和检验密钥对以后交互的信息进行加密。
参见图4,本发明实施例提供了一种密钥协商的装置,该装置包括:
会话密钥模块401,用于利用接收端的公钥对发送端随机生成的第一随机数加密,生成发送端的会话密钥,其中,所述会话密钥为用于加密所述发送端与所述接收端的会话的密钥;
协商密钥模块402,用于利用所述发送端的会话密钥,通过预设的加密算法,对所述发送端随机生成的第二随机数加密,生成加密的协商密钥;
发送模块403,用于将第一压缩包以及预设的加密算法发送给所述接收端,其中,所述第一压缩包包括:加密的协商密钥以及所述随机数密钥。
具体地,在生成加密的协商密钥之后,所述协商密钥模块402还用于:
利用所述发送端的私钥,通过预设的签名算法,对第一压缩包进行签名,生成签名后的第一压缩包;
其中,所述发送模块403具体用于:
将所述第一压缩包、所述签名后的第一压缩包以及所述加密算法发送给所述接收端。
具体地,所述随机数密钥为所述第一随机数与椭圆曲线上的基点进行点乘生成的;其中,所述接收端根据所述接收端的私钥和所述随机数密钥,通过预设的解密算法,得到会话密钥。
具体地,所述第一随机数为根据随机数算法生成的字符串,或为根据第三随机数与生成所述第三随机数的时间通过HKDF算法生成的,其中,所述第三随机数为根据随机数算法生成的字符串。
具体地,所述第一压缩包还包括:预设的所述发送端的会话密钥的有效时间。
具体地,所述发送模块403还用于:
接收所述接收端发送的签名后的会话密钥,其中,所述签名后的会话密钥为根据接收端的私钥与所述接收端的会话密钥,通过预设的签名算法得到的;
通过与所述签名算法对应的解密算法,利用所述接收端的公钥对签名后的会话密钥进行验证。
其中,本发明实施例提供的密钥协商的装置可以为客户端设备。
参见图5,本发明实施例提供了一种密钥协商的装置,该装置包括:
接收模块501,用于接收发送端发送的第一压缩包以及预设的加密算法,其中,所述第一压缩包包括,用于确定会话密钥的随机数密钥;
会话密钥模块502,用于根据接收端的私钥以及所述随机数密钥,通过解密算法得到接收端的会话密钥,其中,所述解密算法为根据所述加密算法得到的。
具体地,所述第一压缩包还包括:加密后的协商密钥;
所述会话密钥模块502还用于:
利用所述接收端的会话密钥,通过所述解密算法,对加密后的协商密钥进行解密,得到协商密钥;
利用发送端的公钥,通过接收到的签名算法,对第二压缩包进行签名,生成签名后的第二压缩包;其中,所述第二压缩包包括,所述协商密钥和所述随机数密钥;
若所述签名后的第二压缩包和所述签名后的第一压缩包相同,则确定所述接收端的会话密钥为用于加密所述发送端与所述接收端的会话的密钥。
具体地,所述会话密钥模块502还用于:
利用所述接收端的私钥,通过所述签名算法对所述接收端的会话密钥签名,并将签名后的会话密钥发送给发送端。
其中,本发明实施例提供的密钥协商的装置可以为服务器。
下面将结合图6a和图6b,介绍本发明实施例提供的一种密钥协商的系统的整体流程,其中,所述密钥协商的系统包括:客户端和服务器端;
其中,参见图6a,客户端侧的具体操作步骤如下所示:
S610、客户端生成的第一随机数,并根据第一随机数生成随机数密钥RC;
S611、客户端从服务器的证书中提取公钥,利用接收端的公钥对第一随机数加密,生成中间值key_material;
S612、客户端通过HKDF算法对中间值key_material进行派生,得到会话密钥,即工作密钥working_key和检验密钥mac_key;
S613、客户端生成的第二随机数Nonce;
S614、客户端利用工作密钥working_key,通过ENC_SM4加密算法对第二随机数Nonce加密,生成加密的协商密钥enc_Nonce;
S615、设定所述会话密钥的有效时间nonceLife;
S616、按照预设顺序封装加密后的协商密钥enc_Nonce、随机数密钥RC、会话密钥的有效时间nonceLife以及支持的协议版本version,客户端序列号serial,生成第一压缩包tbsClientMessage;并利用发送端的私钥d,通过预设的签名算法,对第一压缩包进行签名,生成签名后的第一压缩包sigc;
S617、将预设封装顺序以及第一压缩包tbsClientMessage、签名后的第一压缩包sigc发送给服务器;
其中,参见图6b,服务器侧的具体操作步骤如下所示:
S620、服务器侧接收客户端发送的预设封装顺序以及第一压缩包tbsClientMessage、签名后的第一压缩包sigc;
S621、服务器解析第一压缩包tbsClientMessage,利用服务器的私钥d对所述随机数密钥解密,得到中间值key_material’;
S622、通过HKDF算法对中间值key_material进行派生,得到服务器的工作密钥working_key’和检验密钥mac_key’;
S623、利用工作密钥working_key’,通过DEC_SM4解密算法,对加密后的协商密钥enc_Nonce解密,得到协商密钥Nonce’;
S624、利用预设封装顺序,将协商密钥Nonce’,随机数密钥RC、会话密钥的有效时间nonceLife等进行封装,并利用客户端的公钥,通过预设的签名算法,对第二压缩包进行签名,生成签名后的第二压缩包;
S625、验证签名后的第二压缩包和签名后的第一压缩包是否相同,若是,发送确认消息;否则,发送错误消息并断开。
其中,生成确认消息的方法为:利用服务器的私钥,通过所述签名算法对所述会话密钥签名。
综上所述,本发明实施例提供了一种密钥协商的方法及装置,只需通过一次交互即可协商确定会话密钥,用以避免现有技术中需要多次交互才能获得会话密钥的问题,提高了密钥协商的效率;通过预设会话密钥的有效时间,结合数字签名技术有效的防止重放攻击和中间人攻击对通信信息的篡改和窃取。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。