系统间数据防篡改检测方法、校验码生成方法及装置
技术领域
本发明涉及数据防篡改检测方法,更具体地说,涉及一种跨系统间数据交互的防篡改自检测方法,以及不依赖时间的动态生成校验码的方法和装置。
背景技术
随着计算机技术、网络技术和通信技术的发展和应用,企业信息化已成为品牌实现可持续化发展和提高市场竞争力的重要保障。信息化建设包括了企业规模,企业在电话通讯、网站、电子商务方面的投入情况,在客户资源管理、质量管理体系方面的建设成就等。信息化建设是品牌生产、销售、服务各环节的核心支撑平台,并随着信息技术在企业中的应用的不断深入显得越来越重要,未来甚至许多企业就是只依靠信息化建设而生存。
企业规模的扩大和业务领域的不断扩展,使得企业信息化产品呈现多样性和相互协作的特点。各应用系统要达到相互协作,就必须实现信息的相对共享和业务的交互。为了保证数据在传输过程中的安全,在应用系统实施过程中往往会涉及到通信安全措施。这些措施除了通常的网络通信安全外,还包括应用程序接口的传输数据安全性检测。软件的自检测防篡改技术,在国内外都有飞速的发展,并产生了较为成熟的基础理论研究,尽管只有短短十多年的时间,但已经出现了动态完整性检测、软件岗哨、遗忘HASH、基于加密的完整性监测等典型的软件防篡改技术方案,协同多种软件保护技术有效的提高了软件自身完整性的安全保护能力。如:1、徐海银,董九山,李丹一种改进的软件加密自检测防篡改技术.华中科技大学.2007.1;2、沈海波,史毓达 计算机软件的防篡改技术.湖北教育学院计算机科学系2004.8.;3、王朝坤,付军宁,王建民,余志伟 软件防篡改技术综述.清华大学.2011.6.公开的软件防篡改技术,但它们只是对软件系统的程序代码进行防篡改检测,系统之间的业务数据并没有得到保护和监测,而且不能实现动态的检测。4、叶晰,叶依如MD5算法的动态口令技术的软件实现.温州医学院计算机系.2009.9,公开了一种动态口令技术的实现,动态口令的加密过程一般分成两层,第一层是运用预先生成的随机数,对用户ID和当前时间进行位运算,第二层加密使用MD5加密算法,由于MD5算法的理论不可逆性决定了破坏者无法根据密文推出明文,这样保证了动态口令的安全性,但是由于使用时间作为维度进行加密,两个系统的时间设置必须得保证是一致的,但在某些特定的情况下,由于系统配置的不同,可能会对校验造成影响,同时由于使用固定的随机数,理论上还存在一定的安全隐患。
目前,针对企业内不同应用系统之间,在数据交互过程中的安全防范措施,如,跨系统间数据交互的防篡改自检测,仍未见有相关文献披露。
发明内容
本发明所要解决的技术问题在于,提供一种不依赖时间的动态生成校验码的方法和装置,并进一步在此基础上提供了跨系统间数据交互的防篡改自检测方法。
本发明解决其技术问题所采用的技术方案是:提供了一种不依赖时间的动态生成校验码的方法,具体包括步骤:
获取设定的系统关联量的值;
基于获取的系统关联量的值产生复数个自然数Ri;
分别从数组X的Ri位置取值,将它们组合在一起,形成随机密钥字符串H;
将随机密钥字符串H和待校验数据作为输入,通过单向散列函数生成摘要,作为校验码;
所述数组X为常量字符串数组,所述的系统关联量满足:在需要进行数据交互的各个系统中具有一致性、唯一性和动态变化。
在本发明所述的不依赖时间的动态生成校验码的方法中,为了进一步提高安全性,在输入单向散列函数前,所述随机密钥字符串H被插入到待校验数据,插入位置随所述系统关联量的值而变化。并且优选用待校验数据的长度值|D|对所述复数个自然数Ri中的一个数Rk进行模运算求得插入位置。
在本发明所述的不依赖时间的动态生成校验码的方法中,系统关联量可以选择系统上次成功交互次数。
在本发明所述的不依赖时间的动态生成校验码的方法中,优选通过Ri=(N)MOD(|X|-i)运算产生所述复数个自然数Ri,其中,i=1,2,…,T,T=|X|/2,N为系统关联量的值,|X|为数组X的长度,如果N<|X|,则N=(|X|+1)(|X|+1)
本发明提供的一种不依赖时间的动态生成校验码的装置,包括:
第一模块,用于获取设定的系统关联量的值;
第二模块,用于基于获取的系统关联量的值产生复数个自然数Ri;
第三模块,用于分别从数组X的Ri位置取值,将它们组合在一起,形成随机密钥字符串H;
第四模块,用于将随机密钥字符串H和待校验数据作为输入,通过单向散列函数生成摘要,作为校验码;
所述数组X为常量字符串数组,所述的系统关联量满足:在需要进行数据交互的各个系统中具有一致性、唯一性和动态变化。
在本发明所述的不依赖时间的动态生成校验码的装置中,为了进一步提高安全性,第四模块包括:插入位置计算子模块,用于计算随机密钥字符串H在待校验数据的插入位置。优选地,所述插入位置计算子模块包括:用待校验数据的长度值|D|对所述复数个自然数Ri中的一个数Rk进行模运算的第一模运算子模块。
在本发明所述的不依赖时间的动态生成校验码的装置中,优选地,第二模块包括:用系统关联量的值对|X|-i进行模运算的第二模运算子模块,其中,i=1,2,…,T,T=|X|/2,|X|为数组X的长度。
本发明提供的跨系统间数据交互的防篡改自检测方法,包括步骤:
源系统将待传数据作为待校验数据,按上述任意一项所述的不依赖时间的动态生成校验码的方法计算传送端校验码;
将传送端校验码和待传数据传输给目标系统;
目标系统将接收到的数据作为待校验数据,按上述任意一项所述的不依赖时间的动态生成校验码的方法计算接收端校验码;
比较接收端校验码和传送端校验码,相等则判定数据安全,否则判定数据被篡改。
本发明的有益效果是,不使用时间作为维度进行加密,使得系统间的配置不存在依赖性;使用运行时的唯一动态变量(系统关联量)运行加密算法,并运用单向散列函数算法不可逆的特点,达到验证码几乎没有规律性,破坏者无法根据过往的数据推算出新的验证码,安全性高;其随机密钥字符串是动态产生的,这在一定程度上进一步提高了系统的安全性,同时也避免了动态口令技术中随机数泄露的风险。此外,本发明首创了动态的针对系统间交互数据的安全性检测机制,能够保证业务处理过程中的数据一致性。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明一些实施例的系统交互架构图。
具体实施方式
图1示出了一些实施例的完整的系统交互结构。在图1中,A系统和B系统的业务数据在传输过程中是以明文的方式进行的,这是考虑到本发明所描述的场景,大多数情况下都是在内网中进行数据通信的,内网的安全性本身就比较高。同时考虑到一般情况下系统之间的交互会启用中间件,运用密文传输的话不利于中间件对数据的监控和分析,并且明文加密为密文可能还需要依赖于其他的软件产品或硬件,相对来说实施难度较大,因此本实施例采用明文的方式进行说明,以达到体现本发明普遍性的特性。但本发明在设计和应用过程并不存在明文传输的限制。此外,为更明确的解释本发明的具体实现方式,以下说明过程中,都是假设两个系统通过XML串的方式进行数据的交互,但本发明也适用于其他类型的数据交互。、
本发明引用遗忘HASH的原理,将软件自检测的应用扩展到接口数据的安全性检查上来。通过设计简单有效的算法,实现跨系统间数据交互的防篡改自检测,对传输数据实时动态监测。
本发明中运用了SHA1算法来计算HASH值。HASH,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
SHA1是由美国标准技术局(NIST)颁布的国家标准,是一种应用最为广泛的HASH函数算法,也是目前最先进的加密技术,被政府部门和私营业主用来处理敏感的信息。SHA1基于MD5,是一种不可逆算法,计算出来的HASH值是不可预测的。
假设数据在A系统和B系统间传输,由B系统传向A系统,即B系统为源系统,A系统为目标系统,明文数据XML串记为D,长度用|D|表示。
跨系统间数据交互的防篡改自检测方法,包括步骤:
传输前,在B系统中,将待传数据D作为待校验数据,通过一种不依赖时间的动态生成校验码的方法计算传送端校验码;
将传送端校验码和待传数据D传输给目标系统A;
A系统接收到数据D后,使用相同的校验码生成方法对数据D计算校验码,作为接收端校验码;
在A系统业务处理前,比较接收端校验码和传送端校验码,如果相等,则数据D在传输过程中是安全的,业务处理正常进行;如果不相等,则说明数据D在传输过程中被篡改,拒绝业务处理,并返回错误提示信息。
其中,不依赖时间的动态生成校验码的方法包括以下步骤:
一、获取设定的系统关联量的值。本实施例中,以系统上次成功交互次数作为系统之间的系统关联量(依赖关系),值记为N。但并不限于此,系统关联量,即系统之间的依赖关系,此依赖关系一般满足以下三个条件即可:1、一致的,依据此依赖关系,在相同条件下,在两个系统中衍生的值必须是一致,此为数据完整性检测的基础,因此为必备条件;2、唯一的,依据此依赖关系,在系统中衍生的值必须是唯一的,不会因为环境或其他因素的变换而产生不同的值,此条件也为完整性检测的必备条件;3、动态的,依据依赖关系,在系统中衍生的值,随着运行而动态变化,会提高系统的安全性。
二、基于获取的系统关联量的值产生复数个自然数Ri。本实施例中,通过Ri=(N)MOD(|X|-i)运算产生所述复数个自然数Ri,其中,i=1,2,…,T,T=|X|/2,N为系统关联量,|X|为常量字符串数组X的长度,如果N<|X|,则N=(|X|+1)(|X|+1)。数组X为预先定义好的,一般来说,X的长度越大,安全性越高,碰撞事件的发生概率也就越低,但同时会降低运算的效率。在实际应用中,可以视具体情况来确定数组X的长度和内容,从而达到效率和安全之间的平衡。
三、分别从数组X的Ri位置取值,将它们组合在一起,形成随机密钥字符串H。
四、将随机密钥字符串H和待校验数据D作为输入,通过单向散列函数生成摘要,作为校验码。单向散列函数可以采用SHA1等现有的各种单向散列函数。随机密钥字符串H可以以固定位置插入待校验数据D,也可以以动态位置插入待校验数据D,也可以放在待校验数据D末尾。在计算摘要前,可以将随机密钥字符串H转换为16进制。
为了进一步提高安全性,在输入单向散列函数前,将随机密钥字符串H插入到待校验数据中,插入位置随所述系统关联量的值N而变化(即插入位置是动态的)。本实施例中,用待校验数据D的长度值|D|对所述复数个自然数Ri中的一个数Rk进行模运算求得插入位置P,即:取P=|D|mod Rk作为随机密钥字符串H的插入位置,其中k为常量,且k<|X|/2。通过这种方式计算的位偏移量随着系统的交互次数的变化而动态变化,因此,可以进一步提高系统的安全性。
一些实施例还提供了不依赖时间的动态生成校验码的装置,包括:第一至第四模块,第一模块用于获取设定的系统关联量的值;第二模块用于基于获取的系统关联量的值产生复数个自然数Ri;第三模块,用于分别从数组X的Ri位置取值,将它们组合在一起,形成随机密钥字符串H;第四模块,用于将随机密钥字符串H和待校验数据作为输入,通过单向散列函数生成摘要,作为校验码;所述数组X为常量字符串数组,所述的系统关联量满足:在需要进行数据交互的各个系统中具有一致性、唯一性和动态变化。
在另外一些实施例中,为了进一步提高安全性,第四模块包括插入位置计算子模块,用于计算随机密钥字符串H在待校验数据的插入位置。优选地,所述插入位置计算子模块包括:用待校验数据的长度值|D|对所述复数个自然数Ri中的一个数Rk进行模运算的第一模运算子模块。
在一些实施例中,第二模块包括:用系统关联量的值对|X|-i进行模运算的第二模运算子模块,其中,i=1,2,…,T,T=|X|/2。
本领域技术人员可以理解,在模块的具体实现上,尤其是通过软件实现各个模块功能时,可以存在多种可选方案。例如,可以将上述第二模块和第三模块合并成一个模块,也可以将复杂的模块分成一个或多个模块,如,将第四模块中的插入位置计算子模块作为一个单独的模块。
本发明跨系统间数据交互的防篡改自检测方法,是针对系统间的数据交互,在接收方对数据进行防篡改检测的方法,它能够实现对传输数据动态检测,具有较高的安全性。在接收方进行业务处理之前,通过该方法对业务数据进行自检测,能够保证业务处理在数据安全的环境下进行。本发明一些实施例至少具有以下优点:
1、算法设计简单,运算量小,不依赖特定的环境和软件平台,对硬件也无要求,实施难度小;
2、采用SHA1算法计算HASH值,达到不可逆和不可预测性,安全性高;
3、定义全新的获取随机字符串及插入位置的函数,采用动态的方式获取随机字符串及插入位置,提高了系统的安全性;
4、使用运行时的唯一动态变量运行加密算法,达到验证码几乎没有规律性,破坏者无法根据过往的数据推算出新的验证码,系统安全性高;
5、不使用时间作为维度进行加密,使得系统间的配置不存在依赖性;
6、在系统性能允许的情况下,可以使随机获取的动态字符串(随机密钥字符串H)足够长,从而能降低随机密钥的碰撞几率,进一步提高安全性。
以上提供了本发明跨系统间数据交互的动态检验数据安全性(防篡改)的一些实施方式,这些方法不依赖两个系统的时间配置,在条件允许的情况下,可以使随机获取的动态字符串(随机密钥字符串H)足够长,从而进一步降低随机密钥的碰撞几率,以进一步提高安全性。然而,在实际应用中,特别是在一个比较安全的企业内部网络环境中,以上可以适当弱化。比如可以在两个系统之间约定固定的插入位置来取代动态计算插入位置的方式。在系统实施过程中,以上方法可以结合软件防篡改自检测技术一起实现,从软件程序本身和动态交互的数据两个方面来保证系统的安全性。