xml数据伪编译

   伪编译是计算机系统中针对解释性程序语言源代码保密的一种常用技术,文本格式的源代码经过伪编译成为二进制机器码,并可被特定的程序读懂。伪编译是一种较为简单的数据保密方法,与秘钥加密不同,它不存在关键字形式的加密解秘钥匙;应用程序可以读取二进制码xml数据的任意部分,而无需先将整个文档解密。我们知道,一个xml文档在内存中可表示为一段用unicode格式编码的字符串,而伪编译的基本思路,就是改变一般xml数据明文的特点,用一种新的编码方法将xml文档保存在存储器中。xml数据的伪编译通常有两种方式:

   
基于文本字符串方式,即将整个xml文档简单的看作一字符串,逐个字符进行伪编译。xml的默认字符编码方式是unicode,在iana(互联网数字化专职机构)中注册过编码方案的字符通常都可用unicode表示,因此,我们可以unicode为蓝本,对字符的存储字进行多次组合的反码、补码、加减、循环移位等处理,得到伪编译后的xml文档字符,此时用一般编辑器打开xml目标文档看到的是乱码。举例而言,一个简单的伪编译流程如下图所示:
                                       

   
此时接收端只需调用一个反编译模块retransfe),便可直接对伪编译xml文档进行处理。  <o:p></o:p>

  基于xml文档结构方式,此方法通常须结合秘钥加密或字符串伪编译使用。由于xml文档采用标准的树形结构,因此我们可以将xml标记信息部分以索引树格式保存在存储块头部,而将数据部分保存在存储块后部。标记部分可以用一结构数组表示,每个数组元素中应包含标记的内容、位置及对应xml数据的相对地址指针。由于xml标记记载了xml源文档的结构及文字内涵的信息,是人们破读xml文档的主要凭借,并且xml标记部分的长度往往较短(小于xml的数据部分),因此可对xml标记部分进行高强度加密。由于通过前后两个标记元素的相对地址可得到单个标记对中的完整数据内容,所以不仅可对xml数据部分按字符串方式伪编译,也可将每段完整的标记数据内容视为以位为单位的一段二进制串,将此二进制串作为一整体进行反码、补码、加减、循环移位等处理。 
  基于xml文档结构伪编译较字符串伪编译其保密度要高得多,这是因为单纯的字符串伪编译无法改变xml源文档中相同字符的出现频率及编译结果,因此通过明文攻击很容易破译其算法。

  通常伪编译的算法是静态固定的,目标文档的保密性基于保持算法的秘密,我们一般称之为restricted(受限的)算法。此时当算法一旦泄漏,或对于程序的设计者,目标文档是完全透明的。需要指出的是,伪编译也可是动态的,即算法动态生成。举例而言,设反码为0,补码为1,前移为2,后移为3,任何时候不能存在"00""11""23""32"组合,则可以用一数字串如"0120313020"表示一个具体的伪编译算法组合,此数字串的长度越长,保密度越高,实际组合的次序可随机生成。显然,我们也可以将这种动态的伪编译视作一种特殊的对称算法,此时数字串便成了加密解密的秘钥。

  与秘钥算法相比,伪编译的加密强度要低好几个数量级,因此通常仅被用于非密级数据的加密。使用伪编译的一个前提是被加密数据的安全周期很短,由于计算机中软件实现伪编译的加密解密速度极快(没有延时),并且占用系统资源极少,因此对于一些交互频繁,实时性要求较高的应用而言还是具有实用性的。在b2b供应链中,伪编译主要用于后台系统,如库存管理、物料需求管理、运输管理等应用中。

   系统安全的辅助策略
  为了保护供应链系统中的xml数据安全,除了上述几种主要的加密方法外,合理选择一些其它辅助的安全策略也是非常重要的,以下是关于一些常见策略的介绍。

  进程的访问令牌。通常在供应链系统中,数据的安全主要是通过控制用户口令来实现的,也就是说,只要具有了操作某个进程的用户权限,通过网络中任何一台计算机,都可以经数据库的用户校验访问应用层,这样做固然有其灵活方便的一面,不过,也有可能带来安全方面的隐患。例如,为了防止协同作假,通常销售与采购之间是不能数据交叉的,一个采购计划员在销售部的计算机上发布订单就是违规操作,同样,采购员a在采购员b的计算机上修改订单也是不允许的,然而,仅通过用户口令根本无法保证这点。为此我们可以安装每个客户端时在其计算机上生成唯一的令牌,所谓令牌通常是以用户身份,机器id(如网卡号),所调用应用层进程id号为参数得出的一个客户端秘钥,由于令牌的生成要调用应用层进程,因此客户端的安装过程必须经过服务器检验。客户端每次要调用应用层进程时,都要将该令牌作为身份认证传给该进程,而当其接受应用层的xml数据时,客户端程序也都会校验发送数据的应用层进程id号,只有当其与本地令牌相符才会显示。

  文档的数字签名。在xml数据的使用过程中,为了减小文档冗余,许多dtdschemaxslt文件都以外部形式存在,不仅没有保密,而且在调用过程中很容易被伪造。举例而言,一个200子元素在web页中应该被输出为 200元,现在将格式化的xslt文件稍加修改,输出的格式有可能变成200美元,在整个过程中,肇事者也许都无法接触到xml目标数据,却仍可以造成巨大的破坏。为了防止这种现象出现,我们要求确保这类外部文件在传输过程中没有被篡改,然而,由于许多dtdschemaxslt的调用都是文件内通过uri直接完成的,因此不能采用加密的方法。此时我们通过哈希函数为每个外部文件生成一个摘要(所谓哈希函数是一种单向散列函数,它可以将每个长文件单向映射为唯一定长的短字符串即摘要,将此摘要加密便得到文档的数字签名),可以将该数字签名放在数据库中或网络中,要调用网络中某外部文档时可通过相应的数字签名验证其真实性,由于数字签名较短,因此可以和xml文件一起传递,加密数字签名的秘钥通常保存在数据库中。数字签名的实际应用相当广泛,事实上,对于绝大多数有可能收到伪数据的情况,都可通过数字签名的方法来解决。除了本节所介绍的内容,在前面所说的网络安全协议如sslset中,也都嵌入了数字签名的方法。

  xml数据的合法有效期。通常,任何数据都有一定的生存周期,或者仅在某些时段是对用户可见的。假设某工厂规定每天上午进行采购计划的订单分解,中午审核,下午发送,即当天的订单发送后,相关的物料需求记录便已失效。而第二天要分解的物料需求虽然在当天夜里就已产生,但要到第二天早晨7:00才开始生效,可以被采购计划员进行订单分解。这样做的主要目的是将有关数据的操作限定在指定时段才能执行。通常,大部分的有效期校验都在数据库端进行,不过当xml数据存在于应用层缓冲中时,便需通过xml数据中嵌入的有效时间标记来进行数据过滤。另外,通过在xml数据中加入时间标记(),可以防止数据的二次接收,假设现在我们在应用层对产生的每张订货单都加上生成的时间标记,然后发送到生产计划部进行任务分配,现有订货单a 因为网络问题,向生产计划部发了两遍,由于两张订货单上的时间相同,因此生产计划子系统会自动将后一张过滤掉。

  数据交互的点对点跟踪。客户端通过应用层与数据库联系,数据库对每次连接都应记录流水操作(记录连接的客户名,计算机,时间,所查询的数据等信息),而有些处理不会反映到数据库中,因此数据库中的流水不会对这类操作有所记录。有时为了提高应用系统的性能,我们会在应用层设置数据缓冲,存放最近的常用数据,此时当客户端与应用服务器发生数据请求或交换时,应用层就应负责记录下连接信息,并定时汇总到数据库中。同样,客户端对于每次数据请求与交换也都会在本地留有记录,这样做的目的并不是为了直接将数据加密,而是万一有事故发生后可以通过比较流水来查找问题的症结。如数据库中显示用户a3月份共登陆了30次,而用户a的客户计算机上显示其3pu'huo仅登陆28次,除非用户a有权利在其它计算机上登陆,否则就有可能是其他人恶意假冒身份。

  客户端安装节点控制。通常,每个子系统的客户端安装节点数都是限定的,其限定数可以由管理员在数据库中设置。如某工厂的采购计划员一共有八个,那么,在数据库中就可以设采购订单子系统的安装节点数为八个,每安装一个客户端,数据库中的相应记录减一,当计划员人数改变时,数据库中相应字段的最大值也应改变。

  选择合适的防火墙。这是最基本的安全保护措施,虽然它与我们的开发并没有什么直接的关联,但却是必不可少的一关。不管你在设计过程中关于数据的安全保密考虑得有多周全,如果实际应用时忘了使用防火墙,那么你所作的一切努力就都是白费心机。因为哪怕一个最简单的特洛伊木马也能将你计算机中曾发生过的一切记录下来,并传给远程的偷窥者,要知道,目前绝大多数的企业内部网都有至少一个外部接口,更何况那个监视你计算机端口或投放木马的人很可能就是你身边的某个同事。使用防火墙的主要目的就是为了预防外部计算机对本机端口的侦听,过滤恶意的数据包传递,对不合理的计算机操作及有木马嫌疑的软件行为进行报警。目前市场上较为成熟的防火墙软件有check point公司的firewall1 3.0elron software公司的elron firewall/secure 32os;思科公司的pix firewall 4.1;微软公司的isa(internet security and acceleration) server 2000等。

  有关数据安全的保护策略还有很多,比如与实际操作系统及网络架构、数据库架构的安全策略相结合,本文所列举的仅是冰山一角,有兴趣者可以到 http://ww.security.org/http://www.vertarmy.org/http://www.cns911.com/(中国网络安全响应中心)等网站上了解更多信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值