具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明SPA密钥分发方法的一些实施例流程图。如图1所示,本发明实施例的SPA密钥分发方法包括:
S101,通过预设的密钥派生算法,根据预设的密钥种子、生成时间和客户端的IP地址确定SPA密钥,生成时间用于表征客户端生成SPA密钥的时间。
单包授权(Single Packet Authorization,简称SPA)是软件定义边界(SoftwareDefined Perimeter,简称SDP)的核心功能,主要作用是通过默认关闭服务端口,使服务实现网络隐身,从网络上无法连接、无法扫描。如果需要使用服务,则通过特定客户端发送相应的SPA报文信息给服务器,服务器认证该报文后,将对特定客户端的IP地址打开相关的服务。此时,客户端发送的SPA报文信息将采用与服务端相同SPA密钥(例如S101中的SPA密钥)进行签名和加密等,从而确保SPA报文的安全。
密钥派生算法的作用是从一个共享的秘密比特串中派生出秘密数据。在密钥协商过程中,密钥派生算法作用在密钥交换所获取共享的秘密比特串上,从中产生所需的会话密钥或进一步加密所需的密钥数据。
在一些实施例中,密钥种子是客户端和服务端预制的一个串随机数(参考图3),用于派生初始密钥(即S101中的SPA密钥)。服务端预制密钥种子由服务端程序通过数据库进行存储。客户端预制的密钥种子在客户端程序打包时一并制作到客户端程序安装包内。当用户安装客户端程序时,该客户端就已拥有预制的密钥种子。
作为示例,密钥派生算法可以是国家密码局认定的国产密码算法,例如SM1,SM2,SM3或SM4。
作为示例,可以将预设的密钥种子、生成时间和客户端的IP地址分别转换为比特串,并将预设的密钥种子、生成时间和客户端的IP地址的比特串拼接,然后利用预设的密钥派生算法确定SPA密钥。
作为示例,预设的密钥种子可以是一串随机数字,也可以是根据客户端的地理位置、IP地址等生成的具有一定规律的数字串或字符串。
在SDP网络环境下,由于SPA密钥加入了生成时间和客户端计算机的IP等这些动态因子,在每次通信时使得SPA密钥能够做到“一次一密”,即:由于时间是变化的、客户端计算机IP也可能是变化的,所以客户端每一次发起通信时,计算出来SPA密钥均能够保持其唯一性,能够保证SPA密钥不会与之前使用过的发生重复;同理,服务端也是能够计算得到“一次一密”的SPA密钥,对加密报文进行解密和验证等。因此,基于此种机制,能够实现密钥的动态更新,进而不需要服务端向客户端下发更新的SPA密钥、也不需要服务端与客户端在线交换密钥方式进行更新。
S102,通过预设的加密算法,根据SPA密钥对客户端要发送的目标报文进行加密,得到加密报文。
数据加密的过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”。通过这样的途径,来达到保护数据不被非法人窃取、阅读的目的。
作为示例,预设的加密算法可以为AES算法、DES算法或者3DES算法等的对称加密算法,对称加密算法使用一个密钥完成加密的解密操作。
S103,向服务端发送加密报文、客户端的IP地址和生成时间。
在SDP网络环境下,向服务端发送客户端的IP地址和生成时间是为了提供生成密钥的数据给服务端,使得服务端的预设的密钥种子能结合客户端的IP地址和生成时间生成密钥,并解密加密报文。客户端和服务端生成的密钥可以是一样的。
向服务端发送加密报文、客户端的IP地址和生成时间。实现了不用服务端额外开放端口给客户端分发密钥,也不需要通过短信或者邮件形式发送密钥,而且也不需要用户在客户端进行手工操作,即可完成客户端的SPA相关密钥的产生和分发。
在一些可选的实现方式中,向服务端发送加密报文、客户端的IP地址和生成时间之后,还包括:接收服务端发出的加密结果集,通过预设的解密算法,根据SPA密钥对加密结果集进行解密,得到目标结果集。
数据解密过程:数据接收方收到密文后,若想读取原数据,则需要使用加密使用的密钥及相同算法的逆算法对加密的密文进行解密,才能使其恢复成可读明文。
作为示例,客户端预设的解密算法与客户端预设的加密算法相互可逆,用于加密或解密的密钥可以是一样的。
以图3为例,在客户端安装后,向客户端向服务端发送SPA报文(即目标报文)时,客户端使用密钥种子,再加生成时间和客户端计算机的IP地址等因子按照既定的组合方式组合在一起,作为密钥派生算法的输入参数,派生出SPA密钥K1(即SPA密钥)。并使用SPA密钥K1对发送的SPA报文进行签名和加密等安全保护。其中,可参与密钥派生的因子包括但不限于:生成时间、客户端计算机IP等;组合方式包括但不限于直接拼接、按位异或等方式,密钥的组合方式可以参考图4。
本发明实施例提供的SPA密钥分发方法,应用于客户端,通过预设的密钥派生算法,根据预设的密钥种子、生成时间和客户端的IP地址确定SPA密钥,生成时间用于表征客户端生成SPA密钥的时间;通过预设的加密算法,根据SPA密钥对客户端要发送的目标报文进行加密,得到加密报文;向服务端发送加密报文、客户端的IP地址和生成时间。通过预设的密钥种子、生成时间和客户端的IP地址确定SPA密钥,能够实现SPA密钥的动态更新,进而不需要服务端向客户端下发更新的SPA密钥、也不需要服务端与客户端在线交换密钥方式进行更新。实现了SPA服务端完全关闭端口和网络隐身,避免了SPA服务端存在端口被扫描到并被攻击的安全隐患。
图2为本发明SPA密钥分发方法的另一些实施例流程图。如图2所示,本发明实施例的SPA密钥分发方法,应用于服务端,包括:
S201,接收客户端发出的加密报文、客户端的IP地址和生成时间,通过预设的密钥派生算法,根据预设的密钥种子、客户端的IP地址和生成时间确定SPA密钥,生成时间用于表征客户端生成SPA密钥的时间。
作为示例,服务端预设的密钥派生算法与客户端预设的密钥派生算法可以一样。
作为示例,服务端预设的密钥种子与客户端预设的密钥种子可以一样。
在一些可选的实现方式中,接收客户端发出的加密报文、客户端的IP地址和生成时间之前,还包括:建立可信信息表,可信信息表包括服务端可以信任的至少一个客户端的IP地址;以及通过预设的密钥派生算法,根据预设的密钥种子、客户端的IP地址和生成时间确定SPA密钥,包括:查询可信信息表中是否存在客户端的IP地址,若存在客户端的IP地址,则通过预设的密钥派生算法,根据预设的密钥种子、客户端的IP地址和生成时间确定SPA密钥。
作为示例,可以信任的至少一个客户端的IP地址还可以通过写入文档、结构型数据库、非结构型数据库等存储方式存储。
作为示例,可信信息表可以存储在本地内存中,或者云服务器中。本发明对存储可信信息表的位置不做限定。
接收客户端发出的加密报文、客户端的IP地址和生成时间,通过预设的密钥派生算法,根据预设的密钥种子、客户端的IP地址和生成时间确定SPA密钥。实现了不用服务端额外开放端口给客户端分发密钥,也不需要通过短信或者邮件形式发送密钥,而且也不需要用户在客户端进行手工操作,即可完成服务端的SPA相关密钥的产生。
作为示例,服务端校验时,也可以维护一张可信的客户端IP、设备ID等信息表,只要在表内的IP或者设备ID,都认为是可信的、安全的。判断客户端IP/设备ID是不是在可信信息表内,如果不在可信信息表,那么认为是不安全的设备。也可以通过接收客户端发出的用户名和密码,判断可信信息表中是否存在用户名和密码的方式判断客户端是否可信。
S202,通过预设的解密算法,根据SPA密钥对加密报文进行解密,得到目标报文。
作为示例,服务端预设的解密算法与服务端预设的加密算法相互可逆,用于加密或解密的密钥可以是一样的。
在一些可选的实现方式中,得到目标报文之后,还包括:根据目标报文执行业务操作,得到目标结果集;通过预设的加密算法,根据SPA密钥对目标结果集进行加密,得到加密结果集,并向客户端发送加密结果集。
仍以图3为例,服务端在接收到SPA报文(即加密报文)时,先读取服务端本地预制的密钥种子,并叠加客户端发出的生成时间、客户端计算机的IP等因子,也使用相同的密钥派生算法计算出SPA密钥K1(即SPA密钥),然后使用SPA密钥K1对SPA报文进行解密和验证等安全性校验。按照上述方式,客户端和服务端是分别各自计算得出SPA密钥K1,而不并需要客户端在线连接到服务端获取,或者服务端在线下发给客户端。
本发明实施例提供的SPA密钥分发的方法,通过接收客户端发出的加密报文、客户端的IP地址和生成时间,通过预设的密钥派生算法,根据预设的密钥种子、客户端的IP地址和生成时间确定SPA密钥,生成时间用于表征客户端生成SPA密钥的时间;通过预设的解密算法,根据SPA密钥对加密报文进行解密,得到目标报文。通过接收客户端发出的IP地址和生成时间,生成SPA密钥,用SPA密钥解密加密报文,若解密成功,则进一步说明客户端是可以信任的,即完成了客户端的验证,也获得了目标报文。实现了SPA服务端完全实现关闭端口和网络隐身,避免了SPA服务端存在端口被扫描到并被攻击的安全隐患。
关于SPA密钥分发和产生的一个应用场景:
(1)首先,服务端和客户端采用相同的密钥产生方式,客户端内置密钥种子,再把客户端给交给用户,用户进行安装。
(2)然后,用户打开客户端,填写需要链接的服务端和端口,并输入用户名和密码,并点击链接/登录。
作为示例,SPA数据包可以是:
{sendtime:10:31,ip:192.168.10.01,data:data,userid:abcd,password:hmdfacdfersdfbcdf=}
其中,
sendtime是发送的时间,由客户端程序自动填写时间,上述十示例为10点31分。
ip:是客户端的IP,上述示例为192.168.001;
Data:是数据密文。是被密钥加密过后的数据,上述示例为data;
Userid:是用户的账户名,上述示例为abcd;
Password:是账户名对应的密码,密码通常是加密过后的密文,上述示例为hmdfacdfersdfbcdf=。
按照上述SPA数据包,首先客户端根据预制的密钥种子,加上时间和IP作为输入,进行派生计算得到加密密钥K1(即S101中的SPA密钥),计算方式例如:
密钥K1=密钥派生算法(时间time,ip,密钥种子)
其中,时间time:
(1)可以是某个具体时间,比如10:00,那么此时,就要求发送的sendtime与此时间填写一样的值,此时服务端解密时,就采用sendtime的值就可以计算出来解密密钥。
(2)也可以是某个时间窗口,例如:10:00-10:10,正向的10分钟时间窗口,也可以是9:50-10:00,负向的10分钟。此时,sendtime填写10:00,那么服务端解密时就可以根据sendtime,向前或后推移10分钟的时间,计算出正确的解密密钥。
(3)进一步的,也可以把时间窗口可以收缩到秒级,比如正/负向10秒,也可以再放大,比如正/负向12小时;也可以以用户初次时间为基准,在用户没有退出登录前,一直使用同一个密钥,那么就和用户会话是一致的,就能实现一个会话一次密钥。
由于时间可以按照上述的方式进行灵活的处理,那么服务端接收到SPA数据包后,处理方式参考如下:
(1)首先解析:sendtime,ip地址等字段。
(2)按照相同时间偏移,正向/负向偏移的计算出来参与运算的时间,然后再采用相同的密钥派生算法,计算出密钥K1来,再对SPA中的data进行解密,获取得到发送数据的明文。
如果服务端根据时间sendtime计算出的密钥是错的,那么会导致两种情况:
一种情况是服务端在进行解密运算时就出报错。因为很多标准的加密算法对密钥是有一定的校验机制的,比如校验长度、某些特定的位值等。
另一种情况是服务端解密出目标报文,此时,数据本身可能是乱码,也可能是上层业务无法识别的数据,这些也是会直接报错的。
在整个过程中:SPA的数据包的安全是依靠时间、密钥种子、客户端的IP地址,结合密钥派生算法得到的。因此具有一定安全性。
服务端是通过解密校验SPA包保障数据安全,如果能正常解密并获得正确的数据,那么服务端就向客户端开放端口,接收客户端后续的通信交互。否则,不向客户端打开端口,也不会向返回任何错误信息。
在网络隐身的场景下(或者零信任场景),无需直接在线分发密钥,也无需通过邮件或短信消息方式分发密钥。用户只需按照平常使用方式,登录并使用客户端,由客户端与服务端自动完成网络隐身情况下的密钥产生和分发,能够确保密钥的安全性,不改变用户的使用体验和方式,也不会对用户的使用造成困扰。
图5为本发明SPA密钥分发装置实施例结构示意图。如图5所示,该SPA密钥分发装置,应用于客户端,包括:
第一处理模块501,用于通过预设的密钥派生算法,根据预设的密钥种子、生成时间和客户端的IP地址确定SPA密钥,生成时间用于表征客户端生成SPA密钥的时间;
第二处理模块502,用于通过预设的加密算法,根据SPA密钥对客户端要发送的目标报文进行加密,得到加密报文;
第三处理模块503,用于向服务端发送加密报文、客户端的IP地址和生成时间。
可选地,装置还包括:
接收模块,用于接收服务端发出的加密结果集,通过预设的解密算法,根据SPA密钥对加密结果集进行解密,得到目标结果集。
图6为本发明SPA密钥分发装置实施例结构示意图。如图6所示,该SPA密钥分发装置,应用于服务端,包括:
第四处理模块601,用于接收客户端发出的加密报文、客户端的IP地址和生成时间,通过预设的密钥派生算法,根据预设的密钥种子、客户端的IP地址和生成时间确定SPA密钥,生成时间用于表征客户端生成SPA密钥的时间;
第五处理模块602,用于通过预设的解密算法,根据SPA密钥对加密报文进行解密,得到目标报文。
可选地,装置还包括:
建立可信信息表模块,用于建立可信信息表,可信信息表包括服务端可以信任的至少一个客户端的IP地址;以及
第四处理模块601还用于查询可信信息表中是否存在客户端的IP地址,若存在客户端的IP地址,则通过预设的密钥派生算法,根据预设的密钥种子、客户端的IP地址和生成时间确定SPA密钥。
可选地,装置还包括:
第六处理模块,用于根据目标报文执行业务操作,得到目标结果集;通过预设的加密算法,根据SPA密钥对目标结果集进行加密,得到加密结果集,并向客户端发送加密结果集。
举个例子如下:
图7示例了一种电子设备的实体结构示意图,如图7示,该电子设备可以包括:处理器(processor)701、通信接口(Communications Interface)702、存储器(memory)703和通信总线704,其中,处理器701,通信接口702,存储器703通过通信总线704完成相互间的通信。处理器701可以调用存储器703中的逻辑指令,以执行如下方法:通过预设的密钥派生算法,根据预设的密钥种子、生成时间和客户端的IP地址确定SPA密钥,生成时间用于表征客户端生成SPA密钥的时间;通过预设的加密算法,根据SPA密钥对客户端要发送的目标报文进行加密,得到加密报文;向服务端发送加密报文、客户端的IP地址和生成时间。或执行如下方法:接收客户端发出的加密报文、客户端的IP地址和生成时间,通过预设的密钥派生算法,根据预设的密钥种子、客户端的IP地址和生成时间确定SPA密钥,生成时间用于表征客户端生成SPA密钥的时间;通过预设的解密算法,根据SPA密钥对加密报文进行解密,得到目标报文。
此外,上述的存储器703中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明实施例还提供一种计算机程序产品,计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,计算机程序包括程序指令,当程序指令被计算机执行时,计算机能够执行上述各实施例提供的SPA密钥分发方法,例如包括:通过预设的密钥派生算法,根据预设的密钥种子、生成时间和客户端的IP地址确定SPA密钥,生成时间用于表征客户端生成SPA密钥的时间;通过预设的加密算法,根据SPA密钥对客户端要发送的目标报文进行加密,得到加密报文;向服务端发送加密报文、客户端的IP地址和生成时间。或执行如下方法:接收客户端发出的加密报文、客户端的IP地址和生成时间,通过预设的密钥派生算法,根据预设的密钥种子、客户端的IP地址和生成时间确定SPA密钥,生成时间用于表征客户端生成SPA密钥的时间;通过预设的解密算法,根据SPA密钥对加密报文进行解密,得到目标报文。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的SPA密钥分发方法,例如包括:通过预设的密钥派生算法,根据预设的密钥种子、生成时间和客户端的IP地址确定SPA密钥,生成时间用于表征客户端生成SPA密钥的时间;通过预设的加密算法,根据SPA密钥对客户端要发送的目标报文进行加密,得到加密报文;向服务端发送加密报文、客户端的IP地址和生成时间。或执行如下方法:接收客户端发出的加密报文、客户端的IP地址和生成时间,通过预设的密钥派生算法,根据预设的密钥种子、客户端的IP地址和生成时间确定SPA密钥,生成时间用于表征客户端生成SPA密钥的时间;通过预设的解密算法,根据SPA密钥对加密报文进行解密,得到目标报文。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。