发明内容
本申请实施例的目的在于提供一种加密方法、解密方法、数据处理方法、终端及加密机,本申请的实施例使用了如下技术方案:
一种加密方法,应用于发送方终端,所述加密方法包括:
向第一加密机发送第一密钥,其中,所述第一密钥为接收方终端的密钥;
接收所述第一加密机反馈的基于所述第一密钥生成的第一数据,其中,所述第一数据为采用加密算法进行加密时所生成的中间数据;
使用所述第一数据对明文数据进行加密,得到第一密文数据。
在一些实施例中,所述加密算法为SM2加密算法。
在一些实施例中,所述第一数据包括:
所述第一加密机利用随机数生成的第一比特串C1,其中,所述第一比特串C1为利用随机数计算出的第一椭圆曲线点(x1,y1)经数据类型转换后得到的比特串;以及,
所述第一加密机利用所述第一密钥生成的第二椭圆曲线点(x2,y2)的坐标值。
在一些实施例中,所述第一数据还包括:
所述第一加密机利用密钥派生函数对所述第二椭圆曲线点(x2,y2)的坐标值进行计算得到的异或比特串。
在一些实施例中,使用所述第一数据对明文数据进行加密,得到第一密文数据,包括:
将所述异或比特串与所述明文数据进行异或运算得到第二比特串C2;
利用所述第二椭圆曲线点(x2,y2)的坐标值对所述明文数据进行哈希计算,得到第三比特串C3,其中,所述第三比特串C3为所述明文数据的摘要;
将所述第一比特串C1、第二比特串C2以及第三比特串C3拼接得到所述第一密文数据。
在一些实施例中,使用所述第一数据对明文数据进行加密,得到第一密文数据,包括:
利用密钥派生函数对所述第二椭圆曲线点(x2,y2)的坐标值进行计算得到的异或比特串;
将所述异或比特串与所述明文数据进行异或运算得到第二比特串C2;
利用所述第二椭圆曲线点(x2,y2)的坐标值对所述明文数据进行哈希计算,得到第三比特串C3,其中,所述第三比特串C3为所述明文数据的摘要;
将所述第一比特串C1、第二比特串C2以及第三比特串C3拼接得到所述第一密文数据。
本申请实施例还提供一种解密方法,应用于接收方终端,所述解密方法包括:
接收来自发送方终端的第一密文数据,其中,所述第一密文数据为利用第一密钥加密原始明文数据得到的数据,所述第一密钥为接收方终端的密钥;
接收第二加密机发送的基于第二密钥生成的第二数据,其中,所述第二数据为采用解密算法进行解密时所生成的中间数据,所述第二密钥为所述接收方终端的与所述第一密钥对应的密钥;
使用所述第二数据对所述第一密文数据进行解密,得到明文数据。
在一些实施例中,所述解密算法为SM2解密算法。
在一些实施例中,所述方法还包括:
从所述第一密文数据中提取第一比特串C1;
将所述第一比特串C1发送给所述第二加密机;
其中,所述第二数据包括:利用所述第二密钥和所述第一比特串C1生成的第二椭圆曲线点(x2,y2)的坐标值。
在一些实施例中,所述第二数据还包括:
所述第二加密机利用密钥派生函数对所述第二椭圆曲线点(x2,y2)的坐标值进行计算得到的异或比特串。
在一些实施例中,使用所述第二数据对所述第一密文数据进行解密,得到明文数据,包括:
从所述第一密文数据中提取第二比特串C2,将所述第二比特串C2与所述异或比特串进行异或运算得到明文比特串;
利用所述第二椭圆曲线点(x2,y2)的坐标值对所述明文比特串进行哈希计算得到u;
从所述第一密文数据中提取第三比特串C3,其中,所述第三比特串C3为所述原始明文数据的摘要;
在所述u=C3时,将所述明文比特串确定为解密得到的明文数据。
在一些实施例中,使用所述第二数据对所述第一密文数据进行解密,包括:
利用密钥派生函数对所述第二椭圆曲线点(x2,y2)的坐标值进行计算得到的异或比特串;
从所述第一密文数据中提取第二比特串C2,将所述第二比特串C2与所述异或比特串进行异或运算得到明文比特串;
利用所述第二椭圆曲线点(x2,y2)的坐标值对所述明文比特串进行哈希计算得到u;
从所述第一密文数据中提取第三比特串C3,其中,所述第三比特串C3为所述原始明文数据的摘要;
在所述u=C3时,将所述明文比特串确定为解密得到的明文数据。
本申请实施例还提供一种数据处理方法,数据处理方法,应用于加密机,所述方法用于加密和/或解密数据,所述加密包括:
接收发送方终端发送的第一密钥,其中,所述第一密钥为接收方终端的密钥;
基于所述第一密钥生成第一数据,其中,所述第一数据为采用加密算法进行加密时所生成的中间数据;
将所述第一数据发送至所述发送方终端,以使所述发送方终端使用所述第一数据对明文数据进行加密,得到第一密文数据;
所述解密包括:
基于接收方终端的第二密钥生成第二数据,其中,所述第二数据为采用解密算法进行解密时所生成的中间数据,所述第二密钥与所述第一密钥对应;
将所述第二数据发送至所述接收方终端,以使所述发送方终端使用所述第二数据对第一密文数据进行解密,得到明文数据。
本申请实施例还提供一种终端,包括:存储器,其中存储有计算机程序指令;处理器,所述处理器执行所述计算机程序指令时实现上述的加密方法,或者实现上述的解密方法。
本申请实施例还提供一种加密机,包括:
加密装置,用于接收发送方终端发送的第一密钥,其中,所述第一密钥为接收方终端的密钥;基于所述第一密钥生成第一数据,其中,所述第一数据为采用加密算法进行加密时所生成的中间数据;将所述第一数据发送至所述发送方终端,以使所述发送方终端使用所述第一数据对明文数据进行加密,得到第一密文数据;和/或
解密装置,用于基于接收方终端的第二密钥生成第二数据,其中,所述第二数据为采用解密算法进行解密时所生成的中间数据;将所述第二数据发送至所述接收方终端,以使所述发送方终端使用所述第二数据对第一密文数据进行解密,得到明文数据;其中,所述第一密文数据为利用第一密钥加密原始明文数据得到的数据,所述第一密钥为所述接收方终端的与所述第二密钥对应的密钥。
本申请实施例还提供一种计算机可读存储介质,其上存储有计算机可执行指令,所述计算机可执行指令由处理器执行时,实现上述的加密方法,或者实现上述的解密方法。
本申请实施例提供的加密方法、解密方法、数据处理方法、终端及加密机在进行数据加密或解密时,可以仅在加密机进行中间数据的生成,利用第一加密机的中间数据和发送方终端共同来实现明文数据的加密,或利用第二加密机的中间数据和接收方终端共同来实现密文数据的解密,有效减少了第一加密机和发送方终端、第二加密机和接收方终端之间的数据传输量,能够解决现有技术中大量数据加密传输过程中耗时的问题,并解决由于加密机硬件限制无法传输大量数据的问题,极大提高整体数据加、解密过程的性能;同时,加密机仅需进行中间数据的生成,在减少了数据处理量的同时也减少了加密机的数据处理流程,降低了加密机的数据处理压力,提高了加密机的数据处理效率。
具体实施方式
此处参考附图描述本申请的各种方案以及特征。
应理解的是,可以对此处申请的实施例做出各种修改。因此,上述说明书不应该视为限制,而仅是作为实施例的范例。本领域的技术人员将想到在本申请的范围和精神内的其他修改。
包含在说明书中并构成说明书的一部分的附图示出了本申请的实施例,并且与上面给出的对本申请的大致描述以及下面给出的对实施例的详细描述一起用于解释本申请的原理。
通过下面参照附图对给定为非限制性实例的实施例的优选形式的描述,本申请的这些和其它特性将会变得显而易见。
还应当理解,尽管已经参照一些具体实例对本申请进行了描述,但本领域技术人员能够确定地实现本申请的很多其它等效形式,它们具有如权利要求所述的特征并因此都位于借此所限定的保护范围内。
当结合附图时,鉴于以下详细说明,本申请的上述和其他方面、特征和优势将变得更为显而易见。
此后参照附图描述本申请的具体实施例;然而,应当理解,所申请的实施例仅仅是本申请的实例,其可使用多种方式实施。熟知和/或重复的功能和结构并未详细描述以避免不必要或多余的细节使得本申请模糊不清。因此,本文所申请的具体的结构性和功能性细节并非意在限定,而是仅仅作为权利要求的基础和代表性基础用于教导本领域技术人员以实质上任意合适的详细结构多样地使用本申请。
本说明书可使用词组“在一种实施例中”、“在另一个实施例中”、“在又一实施例中”或“在其他实施例中”,其均可指代根据本申请的相同或不同实施例中的一个或多个。
现有技术中的利用加密机来加密数据的方法,除了存在加密机处理数据压力大的问题以外,还存在数据难以一次性从发送方终端传输至加密机的问题。示例性地,发送方终端与加密机通讯程序之间常常采用usb端口等硬件来传输数据,但usb端口等的硬件实现过程中有传输速率或传输量的限制,例如<2048字节等。当需要传输的数据量较大时,来自发送方终端的密文可能无法一次传输到加密机中,并且这也容易导致数据传输中断或出错。
为此,本申请实施例提供一种数据加密方法,当发送方终端需要通过加密机来加密数据时,不再将整个加密过程都放在加密机内部进行,而是将加密过程中的部分步骤放在加密机内部进行,将另一部分步骤放在发送方终端进行。通过这样的方式,一方面可以减少发送方终端与加密机之间的数据传输量,避免数据无法一次性完成传输的情况,降低加密机通讯程序处理数据的压力,减少加密机需要处理的数据量和处理压力;另一方面可以简化加密机的数据流程,也减少了加密机需要处理的数据量和处理压力。以下将分别从发送方终端、与发送方终端交互的加密机的角度来描述加密过程。
图1为本申请实施例中发送方终端执行的加密方法的流程图;图5为本申请实施例的发送方终端和第一加密机进行加密时的交互示意图。如图1和图5所示,本申请实施例提供一种加密方法,应用于发送方终端A,所述加密方法包括:
S101:向第一加密机发送第一密钥,其中,所述第一密钥为接收方终端B的密钥。
发送方终端A与接收方终端B在进行数据加密传输交互之前,发送方终端A与接收方终端B可以预先协商第一密钥对,以进行后续的数据加密传输。该第一密钥对中的密钥可以为对称密钥,也可以为非对称密钥。第一密钥和第二密钥为对称密钥时,第一密钥和第二密钥相同;第一密钥和第二密钥为非对称密钥时,第一密钥可以为接收方终端B的公钥PB,第二密钥可以为接收方终端B的私钥dB。以非对称加密为例,接收方终端B可以生成一对公私钥,并将公钥PB发送给发送方终端A;发送方终端A可以在进行明文数据加密时将该公钥PB发送至第一加密机。由于第一密钥为公钥,其本身可以公开,因此,第一密钥可以预先保存在发送方终端A和/或接收方终端B。
另一些实施例中,第一密钥也可以保存在第一加密机中,以保证密钥的安全性。即发送方终端A需要对明文数据(M)进行加密时,可以直接向第一加密机发送加密请求,第一加密机接收到该加密请求后查找存储于其中的第一密钥。
可以理解,步骤S101中,当第一密钥不在第一加密机时,向第一加密机发送第一密钥的步骤中可以包含向第一加密机发送数据加密请求。
需要说明的是,接收方终端B的第二密钥(例如私钥dB)也可以保存在加密机中(例如本申请实施例中的第二加密机等),以防止密钥泄漏,接收方终端B需要使用该第二密钥时可以从加密机中获取。
S102:接收所述第一加密机反馈的基于所述第一密钥生成的第一数据,其中,所述第一数据为采用加密算法进行加密时所生成的中间数据。
第一加密机接收到该第一密钥后,利用该第一密钥生成第一数据,并将生成的第一数据返回至发送方终端A。
S103:使用所述第一数据对明文数据进行加密,得到密文数据。
发送方终端A接收到该第一数据后,利用该第一数据对待加密的明文数据(M)进行加密,即利用第一加密机和发送方终端A共同来实现明文数据的加密,得到第一密文数据,然后将该第一密文数据直接或间接地发送至接收方终端B即可。
图2为本申请实施例中与发送方终端交互的第一加密机执行的数据加密方法的流程图。如图2和图5所示,本申请实施例提供一种数据加密方法,应用于第一加密机,所述方法包括:
S201:接收发送方终端A发送的第一密钥,其中,所述第一密钥为接收方终端B的密钥;
S202:基于所述第一密钥生成第一数据,其中,所述第一数据为采用加密算法进行加密时所生成的中间数据;
S203:将所述第一数据发送至所述发送方终端A,以使所述发送方终端A使用所述第一数据对明文数据进行加密,得到第一密文数据。
第一加密机在获取第一密钥后,可以利用该第一密钥生成用于加密发送方终端A的明文数据(M)的中间数据(第一数据),并将该第一数据反馈至发送方终端A,发送方终端A接收到该第一数据后,利用该第一数据对待加密的明文数据进行加密,即利用第一加密机和发送方终端A共同来实现第一明文数据的加密,得到第一密文数据。
本申请实施例提供的加密方法,在对待发送至接收方终端B的发送方终端A的明文数据进行加密时,发送方终端A仅需将第一密钥发送至第一加密机,第一加密机仅需利用该第一密钥生成第一数据,并将第一数据发送至发送方终端A,以使发送方终端A利用该第一数据对待加密的明文数据进行加密,生成能够直接或间接发送至接收方终端B的第一密文数据。现有技术中利用加密机对明文数据进行加密时,为了避免明文数据在传输中泄露,需要发送方终端A先用与第一加密机之间协商好的传输密钥对上述待加密的明文数据进行第一次加密,并将第一次加密生成的第二密文数据与第一密钥一起发送至第一加密机。第一加密机在接收到该第二密文数据后,利用传输密钥对第二密文数据进行解密得到明文数据,并利用第一密钥对该明文数据进行第二次加密,得到上述能够发送至接收方终端B的第一密文数据。而采用本申请实施例中的方法,由于发送方终端A无需将第二密文数据传输至第一加密机,且第一加密机传输至发送方终端A的第一数据的数据量大小远远小于原本第一加密机传输至发送方终端A的第一密文数据的数据量大小,大大减少了发送方终端A和第一加密机之间的数据传输量。这能够解决现有技术中大量数据加密传输过程中耗时的问题,并解决由于加密机硬件限制无法传输大量数据的问题,极大提高整体数据加密过程的性能。同时,第一加密机仅需进行第一数据的生成,减少了第一加密机的数据处理流程,降低了第一加密机的数据处理压力,提高了第一加密机的数据处理效率。另外,本申请中,无需发送方终端A和第一加密机分别利用传输密钥进行数据加密和解密,这也有效减少了整个加密流程,提高了加密效率。
需要说明的是,第一加密机反馈至发送方终端A的第一数据可以是加密的。第一加密机可以用与发送方终端A协商好的第二密钥对(包括第三密钥和第四密钥)中的第三密钥来加密第一数据。第二密钥对中的密钥可以是对称密钥或者非对称密钥。发送方终端A在接收到第一数据时,需要先利用第四密钥来对该第一数据进行解密,再使用。示例性地,当使用非对称密钥时,可以采用发送方终端A的一对公私钥作为第二密钥对,加密机利用发送方的公钥加密第一数据,发送方终端A接收到被加密的第一数据之后利用发送方终端A的私钥对该被加密的第一数据进行解密。采用这样的方式,能够保证第一数据在加密机和发送方终端A之间的可靠传输,以保证数据加密过程的安全、可靠性。由于第一数据所包含的数据量较小,因此,对第一数据进行加密后传输至发送方终端A对加密机以及整个加密过程的效率影响较小。
示例性地,第一密钥对可以如上所述采用非对称密钥,以保证数据加密的安全、可靠性;第二密钥对可以采用对称密钥,在保证数据传输可靠的同时,提高对第一数据的加解密效率。
其中,发送方终端A与第一加密机之间进行数据交互(对发送方终端A的明文数据进行加密以生成能够发送至接收方终端B的第一密文数据)所使用的加密算法可以为SM2、DES、3DES、RC2、RC4、IDEA、RSA、AES等对称或非对称算法。
本申请实施例中,以SM2加密算法为例,对加密方法进行具体说明。
SM2加密算法(又称SM2椭圆曲线公钥密码算法),包括SM2-1椭圆曲线数字签名算法、SM2-2椭圆曲线密钥交换协议、SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名、密钥协商和数据加密等功能。
加密算法为SM2加密算法时,第一数据可以包括:
(1)所述第一加密机利用随机数k生成的第一比特串C1,其中,所述第一比特串C1为利用随机数计算出的第一椭圆曲线点(x1,y1)经数据类型转换后得到的比特串;以及,
(2)所述第一加密机利用所述第一密钥生成的第二椭圆曲线点(x2,y2)的坐标值。
在一种实现方式中,第一加密机可以用随机数发生器产生随机数k,其中k∈[1,n-1];然后,利用该随机数k计算椭圆曲线点C1=[k]G=(x1,y1),其中,G表示基点,[k]G表示k*G,将第一椭圆曲线点(x1,y1)的数据类型转换为比特串,得到第一比特串C1。
可选地,第一加密机得到第一椭圆曲线点(x1,y1)后,可以通过计算椭圆曲线点S=[h]PB,其中,h为余因子,PB为第一密钥,对第一密钥的有效性进行验证。若S是无穷远点,则第一密钥无效;若S不是无穷远点,则第一密钥有效。
第一加密机计算椭圆曲线点[k]PB=(x2,y2),得到第二椭圆曲线点(x2,y2)的坐标值。
第一加密机将利用随机数生成的第一比特串C1和利用第一密钥生成的第二椭圆曲线点(x2,y2)的坐标值作为第一数据,反馈至发送方终端A。
需要说明的是,第一加密机计算得到第二椭圆曲线点(x2,y2)的坐标值后,其数据形式为数值,可以将该坐标值的数据类型从数值转换为比特串,以比特串的数据形式将第二椭圆曲线点(x2,y2)的坐标值传输至发送方终端A,即上述第二椭圆曲线点(x2,y2)的坐标值为经数据类型转换后的坐标值。
在另一些实施例中,第一数据还包括:
(3)所述第一加密机利用密钥派生函数对所述第二椭圆曲线点(x2,y2)的坐标值进行计算得到的异或比特串。
第一加密机通过上述计算得到第二椭圆曲线点(x2,y2)的坐标值后,可以利用密钥派生函数对该坐标值计算得到异或比特串t。示例性地,在采用SM2加密算法的一种实现方式中,t=KDF(x2∥y2,klen),其中KDF为SM2的密钥派生函数,∥表示拼接,klen为M的长度。
若第一数据包括异或比特串t时,第一加密机在计算得到异或比特串t后,还可以对t进行判断,若t为全0比特串,则重新利用随机数k生成第一比特串C1。即可以重新获取一个新的随机数k,并利用该随机数k重新生成第一比特串C1。
在一些实施例中,当第一数据包括第一加密机利用密钥派生函数对所述第二椭圆曲线点(x2,y2)的坐标值进行计算得到的异或比特串时,步骤S103中,使用所述第一数据对明文数据进行加密,得到密文数据,包括:
S1032:将所述异或比特串与所述明文数据进行异或运算得到第二比特串C2,其中,C2=M⊕t,M为明文数据,⊕为异或运算符。
S1033:利用所述第二椭圆曲线点(x2,y2)的坐标值对所述明文数据进行哈希计算,得到第三比特串C3,其中,所述第三比特串C3为所述明文数据的摘要。
示例性地,在一种实现方式中,C3的计算公式表示可以为:C3=Hash(x2∥M∥y2),∥表示拼接,即利用第二椭圆曲线点(x2,y2)的坐标值x2、y2对明文数据进行拼接,然后对拼接结果做哈希运算。
S1034:将所述第一比特串C1、第二比特串C2以及第三比特串C3拼接得到密文数据。
需要说明的是,本申请对C1、C2和C3的具体拼接顺序和拼接方式不作限定。示例性地,C=C1∥C2∥C3,其中,C为SM2结构的密文比特串,密文比特串C包括C1、C2和C3三部分。
在另一些实施例中,当第一数据不包括第一加密机利用密钥派生函数对所述第二椭圆曲线点(x2,y2)的坐标值进行计算得到的异或比特串时,步骤S103中,使用所述第一数据对明文数据进行加密,得到第一密文数据,包括:
S1031:利用密钥派生函数对所述第二椭圆曲线点(x2,y2)的坐标值进行计算得到的异或比特串;
S1032:将所述异或比特串与所述明文数据进行异或运算得到第二比特串C2;
S1033:利用所述第二椭圆曲线点(x2,y2)的坐标值对所述明文数据进行哈希计算,得到第三比特串C3,其中所述第三比特串C3为所述明文数据的摘要;
S1034:将所述第一比特串C1、第二比特串C2以及第三比特串C3拼接得到第一密文数据。
即将利用密钥派生函数对所述第二椭圆曲线点(x2,y2)的坐标值进行计算的步骤也放到发送方终端A中进行。
当第一数据不包括异或比特串t时,在步骤S1031之后,所述方法还包括:
对异或比特串t进行判断,若t为全0比特串,则将判断结果发送至第一加密机,第一加密机重新获取新的随机数k,并利用该随机数k重新生成第一比特串C1,重新进行加密。
应理解,步骤S1031-S1034与前述实施例的具体实现过程类似,此处不再赘述。
如上所述,本申请实施例中,发送方终端A与第一加密机进行数据加密以生成能够发送至接收方终端B的第一密文数据时,发送方终端A传输给第一加密机的数据从数据量较大的明文数据(M)的密文(第二密文数据)和接收方终端B的第一密钥(公钥PB),减少为仅传输接收方终端B的第一密钥;第一加密机反馈给发送方终端A的数据从能够发送至接收方终端B的第一密文数据(C)减少为包括第一比特串C1和第二椭圆曲线点(x2,y2)的坐标值(还可以包括异或比特串t)的第一数据,有效减少了发送方终端A和第一加密机之间的数据传输量。同时,第一加密机进行数据处理时,只需要计算得到第一比特串C1和第二椭圆曲线点(x2,y2)的坐标值,或者还可以利用密钥派生函数对第二椭圆曲线点(x2,y2)的坐标值进行计算得到异或比特串t即可,无需对明文数据进行具体的求异或或计算摘要等步骤,对第一明文数据进行加密处理的具体步骤可以在发送方终端A进行。如此,无需将明文数据(M)加密后的密文(第二密文数据)发送至第一加密机进行解密,在第一加密机利用上述的SM2算法对解密后的明文数据进行加密的部分运算以生成第一数据后,发送方终端A可以利用第一加密机反馈回的第一数据直接将明文数据加密,执行加密的剩余运算步骤,生成够发送至接收方终端B的第一密文数据,可以有效降低第一加密机的处理压力,并减少整个加密流程,提高加密效率。
另外,当接收方终端B的第一密钥采用非对称密钥时,由于接收方终端B的第一密钥(例如公钥PB)本身可以公开,在发送方终端A传递给第一加密机的时候无需加密,第一加密机接收到该第一密钥后也无需解密。通过省略这些步骤,可以减少第一加密机的数据处理流程,提高处理效率。
可选地,在发送方终端A要将第一密钥传递给第一加密机的时候,其可以使用发送方终端A的第三密钥对中的第五密钥的签名(例如本地私钥签名),第一加密机接收到该第一密钥后,可以利用第三密钥对中的第六密钥来验证上述签名是否合法。采用这样的方式,可以确保第一解密机接收到的第一密钥确实是由发送方终端A发送的,并且发送过程中没有被篡改,从而为后续利用第一密钥进行加密提供保障。
在一些实施例中,第一密钥也可以在采用其他传输用密钥对(例如第六密钥对)进行加密后被传输给第一加密机。该第一密钥的数据量相较于明文数据、密文数据等数据量较小,即便被加密后传输,也可以保证第一加密机的数据处理效率以及整个加密过程的效率。
需要说明的是,在本申请实施例中,在发送方终端A、第一加密机以及接收方终端B之间传输的任何数据,包括密钥、中间数据等,均可以为加密的,可以进一步保证数据传输的安全性。前述的第六密钥对、第二密钥对可以采用对称密钥或非对称密钥,本申请对此不作限定。第六密钥对和第二密钥对可以相同,也可以不同,本申请对此也不作限定。
上述实施例中,主要对利用SM2加密算法对发送方终端A的待发送至接收方终端B的明文数据的加密过程进行了说明,采用其他加密算法对明文数据进行加密的过程中,也可以与上述SM2加密算法类似,将对待发送至接收方终端B的明文数据的具体处理流程在发送方终端A执行,第一加密机仅用于处理与具体明文数据不直接相关的其他数据。
接收方终端B接收到来自发送方终端A的第一密文数据之后,可以使用接收方终端B的密钥(例如前述的第二密钥)来对第一密文数据解密,得到上述的明文数据M。
在一种实现方式中,接收方终端B的第一密钥对中的第二密钥可以被托管在第二加密机中。当接收方终端B接收到来自发送方终端A的第一密文数据之后,可以通过第二加密机来对第一密文数据解密,得到明文数据M。在这种应用场景中,一般地,为了保证第二加密机和接收方终端B之间数据传输的安全,第二加密机还需要采用第二加密机与接收方终端B之间协商的传输用的第四密钥对中的第七密钥对明文数据M加密,得到第三密文数据,传输给接收方终端B。接收方终端B再利用第四密钥对中的第八密钥解密第三密文数据,得到明文数据M。在这个过程中,接收方终端B需要将整个第一密文数据发送给第二加密机,第二加密机则需要将整个第三密文数据发送给第二加密机,也存在数据传输量较大的问题。并且,第二加密机不但需要完成对第一密文数据的整个解密过程,解密之后还需要利用第七密钥对该数据加密。数据处理量大,加上处理流程多,这使得第二加密机的数据处理压力较大,尤其在第四密钥对采用非对称密钥的时候。
为解决这一问题,基于与前述数据加密方法类似的技术构思,本申请实施例还提供一种数据解密方法,将接收方终端B通过第二加密机来解密数据的过程的部分步骤放在第二加密机内部进行,将另一部分步骤放在接收方终端B进行。以下将分别从接收方终端B、与接收方终端B交互的第二加密机的角度来描述解密过程。
图3为本申请实施例中接收方终端执行的解密方法的流程图;图6为本申请实施例的接收方终端和第二加密机进行解密时的交互示意图。如图3和图6所示,本申请实施例提供一种解密方法,应用于接收方终端B,所述解密方法包括:
S301:接收来自发送方终端A的第一密文数据,其中,所述第一密文数据为利用第一密钥加密原始明文数据得到的数据,所述第一密钥为接收方终端B的密钥;
S302:接收第二加密机发送的基于第二密钥生成的第二数据,其中,所述第二数据为采用解密算法进行解密时所生成的中间数据,所述第二密钥为所述接收方终端B的与所述第一密钥对应的密钥;
S303:使用所述第二数据对所述第一密文数据进行解密,得到明文数据。
接收方终端B接收发送方终端A的第一密文数据后,可以将第一密文数据的部分或全部发送至第二加密机。第二加密机接收到部分或全部第一密文数据后,利用第二密钥进行运算,生成第二数据,并将第二数据反馈至接收方终端B。接收方终端B接收到第二加密机反馈的第二数据后,可以使用该第二数据对从发送方终端A接收的第一密文数据进行处理,完成解密的剩余步骤,以得到解密后的明文数据(M′)。
上述第一密钥为接收方终端B的公钥PB时,第二密钥为接收方终端B的私钥dB。
上述实施例中,用于进行解密的第二密钥可以保存在接收方终端B。另一些实施例中,第二密钥也可以预先托管保存在第二加密机,当第二密钥托管在第二加密机时,接收方终端B无需向第二加密机发送第二密钥。示例性地,接收方终端B接收到第一密文数据后,可以向保存有第二密钥的第二加密机发送解密请求,第二加密机在接收到该解密请求后,可查找存储于其中的第二密钥,并利用第二密钥生成第二数据,以便对接收方终端B接收的第一密文数据进行解密。
图4为本申请实施例中与接收方终端B交互的第二加密机执行的数据解密方法的流程图。如图4和图6所示,本申请实施例提供一种数据解密方法,应用于第二加密机,所述方法包括:
S401:基于接收方终端B的第二密钥生成第二数据,其中,所述第二数据为采用解密算法进行解密时所生成的中间数据;
S402:将所述第二数据发送至所述接收方终端,以使所述接收方终端使用所述第二数据对第一密文数据进行解密,得到明文数据;其中,所述第一密文数据为利用第一密钥加密原始明文数据得到的数据,所述第一密钥为所述接收方终端B的与所述第二密钥对应的密钥。
可选地,在步骤S401之前,上述方法还可以包括S400:获取接收方终端B的第二密钥。
第二加密机可以利用接收方终端B的第二密钥对第一密文数据中的部分数据进行处理,生成用于解密第一密文数据的中间数据(第二数据),并将该第二数据反馈至接收方终端B。第一密文数据中的部分数据,主要是指需要与第二密钥直接进行运算的这部分数据,例如下文中的第三数据。接收方终端B接收到该第二数据后,利用该第二数据对第一密文数据进行处理,完成解密的其余步骤。即利用第二加密机和接收方终端B共同来实现第一密文数据的解密,得到明文数据。
应理解,对于一个加密机而言,其可以仅执行加密方法中的部分步骤,或者仅执行解密方法中的部分步骤,也可以加密和解密方法中的步骤都执行,也就是说,与发送方终端A交互的第一加密机、与接收方终端B交互的第二加密机可以是不同的加密机,也可以是同一台加密机,本申请对此不作限定。
本申请实施例提供的解密方法,在对发送至接收方终端B的第一密文数据进行解密时,第二加密机仅需利用该第二密钥生成第二数据,并将第二数据发送至接收方终端B,以使接收方终端B利用该第二数据对待解密的第一密文数据进行解密,得到最终的明文数据。相较于现有技术中,需要接收方终端B将第一密文数据发送至第二加密机,由第二加密机对第一密文数据进行第一次解密后再利用接收方终端B和第二加密机协商好的传输密钥(例如前述的第四密钥对)进行加密生成第三密文数据,并将第三密文数据发送至接收方终端B,由接收方终端B进行解密,从而实现第一密文数据的解密过程,大大减少了接收方终端B和第二加密机之间传输的数据量(无需传输完整的第一密文数据和第三密文数据)。这能够解决现有技术中大量数据加密传输过程中耗时的问题,并解决由于加密机硬件限制无法传输大量数据的问题,极大提高整体数据加密过程的性能。同时,第二加密机仅需进行第二数据的生成,减少了第二加密机的数据处理流程,降低了第二加密机的处理压力,提高了第二加密机的数据处理效率。
另外,在本申请的部分实现方式中,无需接收方终端B和第二加密机分别利用第四密钥对进行数据解密,接收方终端B利用第二加密机反馈的第二数据即可实现第一密文数据的解密,有效减少了整个解密流程,提高了解密效率。
需要说明的是,第二加密机反馈至接收方终端B的第二数据也可以是加密的。第二加密机可以用与接收方终端B协商好的第五密钥对(包括第九密钥和第十密钥)中的第九密钥来加密第二数据。第五密钥对中的密钥可以是对称密钥或者非对称密钥。接收方终端B在接收到第二数据时,需要先利用第五密钥来对中的第十密钥来对该第二数据进行解密,再使用。示例性地,当使用非对称密钥时,可以采用接收方终端B的另一对公私钥作为第五密钥对,第二加密机利用接收方终端B的公钥加密第二数据,接收方终端B接收到第二数据之后利用接收方终端B的私钥对该第二数据进行解密。应理解,此处的第五密钥对与前述的第四密钥对可以相同,也可以不同。
由于第二数据所包含的数据量较小,因此,第二加密机对第二数据进行加密后传输至接收方终端B不会对第二加密机的计算效率和整个加密过程的效率产生明显的影响。
发送方终端A与第一加密机进行第一数据传输、接收方终端B与第二加密机进行第二数据传输时,发送方终端A所使用的第二密钥对可以与接收方终端B所使用的第五密钥对相同,也可以不同。
接收方终端B与第二加密机进行数据交互时所使用的解密算法与上述发送方终端A与第一加密机进行加密时所使用的加密算法对应。示例性地,所述解密算法可以为SM2解密算法。
接收方终端B接收发送方终端A的第一密文数据后,从第一密文数据中提取出第三数据,并将该第三数据发送至第二加密机。第二加密机接收到第三数据后,基于第三数据和第二密钥生成第二数据,并将第二数据反馈至接收方终端B。
示例性地,当采用SM2解密算法时,所述方法还包括:
S4031:从所述第一密文数据中提取第一比特串C1;
S4032:将所述第一比特串C1发送给所述第二加密机,其中,所述第二数据包括:利用所述第二密钥和所述第一比特串C1生成的第二椭圆曲线点(x2,y2)的坐标值。
采用SM2解密算法进行数据解密时,第二加密机使用C1与第二密钥计算椭圆曲线点[dB]C1=(x2,y2),得到第二椭圆曲线点(x2,y2)的坐标值。
需要说明的是,第二加密机计算得到第二椭圆曲线点(x2,y2)的坐标值后,其数据形式为数值,可以将该坐标值的数据类型从数值转换为比特串,以比特串的数据形式将第二椭圆曲线点(x2,y2)的坐标值传输至接收方终端B,即上述第二椭圆曲线点(x2,y2)的坐标值为经数据类型转换后的坐标值。
可选地,接收方终端B提取出第一比特串C1后,可以将C1的数据类型转换为椭圆曲线上的点,验证C1是否满足椭圆曲线方程(验证C1是否有效)。若C1满足椭圆曲线方程,将C1发送至第二加密机;若C1不满足椭圆曲线方程则报错,并结束解密流程。
具体地,接收方终端B可以通过计算椭圆曲线点S=[h]C1,其中,h为余因子,对C1的有效性进行验证。若S是无穷远点,则C1无效;若S不是无穷远点,则C1有效。
在C1有效时,接收方终端B将C1发送至第二加密机,第二加密机利用C1计算椭圆曲线点[dB]C1=(x2,y2),得到第二椭圆曲线点(x2,y2)的坐标值。
可以理解的是,上述第一比特串C1是否有效的验证过程也可以在第二加密机进行,即第二加密机在接收到接收方终端B发送的C1后,可以先将C1的数据类型转换为椭圆曲线上的点,然后通过计算椭圆曲线点S=[h]C1,验证C1是否有效。
在一些实施例中,所述第二数据还包括:
所述第二加密机利用密钥派生函数对所述第二椭圆曲线点(x2,y2)的坐标值进行计算得到的异或比特串。
第二加密机通过上述计算得到第二椭圆曲线点(x2,y2)的坐标值后,可以利用密钥派生函数对该坐标值计算得到异或比特串t,示例性地,在采用SM2加密算法的一种实现方式中,t=KDF(x2∥y2,klen),其中KDF为SM2的密钥派生函数,∥表示拼接,klen为密文中C2的比特长度。
在一些实施例中,当第二数据包括所述第二加密机利用密钥派生函数对所述第二椭圆曲线点(x2,y2)的坐标值进行计算得到的异或比特串t时,步骤S303中,使用所述第二数据对所述第一密文数据进行解密,得到明文数据,包括:
S3032:从所述第一密文数据中提取第二比特串C2,将所述第二比特串C2与所述异或比特串进行异或运算得到明文比特串;
其中,M′=C2⊕t,其中,C2=M⊕t,M′为明文比特串,⊕为异或运算符。
S3033:利用所述第二椭圆曲线点(x2,y2)的坐标值对所述明文比特串进行哈希计算得到u;
其中,u=Hash(x2∥M′∥y2),∥表示拼接。
S3034:从所述第一密文数据中提取第三比特串C3,其中,所述第三比特串C3为发送方终端A提供的待发送的明文数据中的摘要,可以直接从第一密文数据中提取。
S3035:在所述u=C3时,将所述明文比特串M′确定为解密得到的明文数据。
与上述利用SM2加密算法进行加密的过程类似,本申请实施例中,利用SM2解密算法进行解密时,接收方终端B可以直接或间接地从发送方终端A接收第一密文数据,并将第一比特串C1传输至第二加密机。第二加密机利用第一比特串C1和第二密钥生成第二椭圆曲线点(x2,y2)的坐标值等第二数据。接收方终端B再利用第二数据对第一密文数据进行解密。接收方终端B与第二加密机进行数据交互时,无需由接收方终端B将整个第一密文数据传输给第二加密机,第二加密机再利用第二密钥进行解密、利用第七密钥加密后将第三密文数据发送至接收方终端B,以使接收方终端B利用第八密钥进行解密。这样一方面可以有效减少接收方终端B和第二加密机之间的数据传输量;另一方面也无需在第二加密机中对整个第一密文数据进行加解密,可以有效降低第二加密机的数据处理量和处理压力,提高第二加密机的数据处理效率。
在另一些实施例中,当第二数据不包括所述第二加密机利用密钥派生函数对所述第二椭圆曲线点(x2,y2)的坐标值进行计算得到的异或比特串时,步骤S303中,使用所述第二数据对第一密文数据进行解密,得到明文数据,包括:
S3031:利用密钥派生函数对所述第二椭圆曲线点(x2,y2)的坐标值进行计算得到的异或比特串;
S3032:从所述密文数据中提取第二比特串C2,将所述第二比特串C2与所述异或比特串进行异或运算得到明文比特串;
S3033:利用所述第二椭圆曲线点(x2,y2)的坐标值对所述明文比特串进行哈希计算得到u;
S3034:从所述密文数据中提取第三比特串C3,其中,所述第三比特串C3为所述原始明文数据的摘要;
S3035:在所述u=C3时,将所述明文比特串M′确定为解密得到的明文数据。
应理解,步骤S3031-S3035与前述实施例的具体解密实现过程类似,此处不再赘述。
上述实施例中,主要对利用SM2解密算法对由发送方终端A发送至接收方终端B的第一密文数据的解密过程进行了说明,采用其他解密算法对第一密文数据进行解密的过程中,也可以与上述SM2解密算法类似,将与第二密钥不直接相关的处理流程在发送方终端A执行,第二加密机可以仅用于处理与第二密钥直接相关的步骤。
采用本申请实施例中的加密或解密方法,不仅可以减轻加密机的压力,不必处理庞大的数据传输和处理,还可以在很大程度上减少对加密机等硬件方面的一些不必要需求。此外,采用上述实现方式也能够保证加密数据、解密数据时的安全性。
图7为本申请实施例的终端的结构示意图。如图7所示,本申请实施例还提供一种终端,包括:存储器701,其中存储有计算机程序指令;处理器702,所述处理器702执行所述计算机程序指令时实现上述的任一种加密方法,或者实现上述的任一种解密方法。该终端既可以为发送方终端A,也可以为接收方终端B。
存储器701可能包括随机存取存储器(random access memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
处理器702可以是通用处理器,包括中央处理器CPU、网络处理器(networkprocessor,NP)等;还可以是数字信号处理器DSP、专用集成电路ASIC、现场可编程门阵列FPGA或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
应理解,对于一个终端而言,其可以仅实现前述的加密方法或仅实现前述的解密方法,也可以两种方法都能够实现,本申请对此不作限定。示例性地,终端A既能够加密自己的数据,以便传输给其他终端,也可以接收来自其他终端的被加密的数据,以便解密来自其他终端的数据。而对于同一个数据而言,通常加密该数据和解密该数据的终端是不同的终端。
图8为本申请实施例的加密机的结构示意图。如图8所示,本申请实施例还提供一种加密机,包括:
加密装置801,用于接收发送方终端发送的第一密钥,其中,所述第一密钥为接收方终端的密钥;基于所述第一密钥生成第一数据,其中,所述第一数据为采用加密算法进行加密时所生成的中间数据;将所述第一数据发送至所述发送方终端,以使所述发送方终端使用所述第一数据对明文数据进行加密,得到第一密文数据;和/或
解密装置802,用于基于接收方终端的第二密钥生成第二数据,其中,所述第二数据为采用解密算法进行解密时所生成的中间数据;将所述第二数据发送至所述接收方终端,以使所述发送方终端使用所述第二数据对第一密文数据进行解密,得到明文数据;其中,所述第一密文数据为利用第一密钥加密原始明文数据得到的数据,所述第一密钥为所述接收方终端的与所述第二密钥对应的密钥。
应理解,加密机可以仅与发送方终端A进行交互实现前述的数据加密方法或仅与接收方终端B进行交互实现前述的数据解密方法,也可以两种方法都能够实现,本申请对此不作限定。示例性地,加密机可以与发送方方终端A配合,共同利用上述的SM2加密算法对明文数据进行加密得到第一密文数据,接收方终端B可以单独采用SM2解密算法或者其他能够解密第一密文数据的解密算法对上述第一密文数据进行解密,也可以与加密机配合,共同利用上述的SM2解密算法对第一密文数据进行解密。
上述加密装置801可以用于实现前述任一种由第一加密机执行的加密方法中的部分或全部步骤。上述解密装置802可以用于实现前述任一种由第二加密机执行的解密方法中的部分或全部步骤。
需要说明的是,本申请实施例提供的终端与上述实施例中的加密方法和/或解密方法相对应,加密机与上述实施例中的应用于第一加密机的数据加密方法和/或应用于第二加密机的数据解密方法相对应,基于上述的加密方法和/或解密方法,本领域的技术人员能够了解本公开实施例中终端和/或加密机的具体实施方式以及其各种变化形式,加密方法和/或解密方法实施例中的任何可选项也适用于终端和/或加密机,此处不再赘述。
本申请实施例还提供一种计算机可读存储介质,其上存储有计算机可执行指令,所述计算机可执行指令由处理器执行时,实现上述的加密方法或解密方法。
本领域技术人员应明白,本申请的实施例可提供为方法、装置、计算机可读存储介质或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质上实施的计算机程序产品的形式。
当通过软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上实施例仅为本申请的示例性实施例,不用于限制本申请,本申请的保护范围由权利要求书限定。本领域技术人员可以在本申请的实质和保护范围内,对本申请做出各种修改或等同替换,这种修改或等同替换也应视为落在本申请的保护范围内。