xml语言是一种面向数据的标记规范,与html不同,xml标记通常总是力求准确清晰地说明数据本身的涵义,即使对于一些非常陌生的xml文件,人们也很容易理解其所要表达的内容,从这个意义上讲,xml数据是完全开放的。由于在xml规范中并不提供对数据的保密措施,因此,一旦含有商业信息的xml文档被别有用心的人直接得到,泄密几乎是必然的。要设计一个基于xml传递数据的商业系统,信息安全是非常关键的问题,通过对b2b供应链的分析,我们可以发现影响系统xml数据安全保密的因素主要有以下几点:
◇n监听网络端口或信道,数据在传输的过程中被截取;
◇存在本地或网络存储器中的xml文件被打开阅读;
◇通过浏览器等工具非法访问b2b网站的xml数据;
◇应用层中处理xml数据的组件被非法调用或修改;
◇用户口令泄漏或存在后门可以进入前端管理界面;
◇使用木马或陷阱等手段,记录并分析业务流片断;
◇修改、捏造请求或返回信息以得到应用的控制权;
◇获取网络中以文件形式共享的dtd/schema、xsl。
一般而言,在b2b供应链中,前台的b2b网站由于其开放性,因此受攻击的风险较大;而后台的erp/mrp管理系统可以说涵盖了企业所有重要的事务处理,因此数据的机密级别往往会更高。基于目前的计算机开发技术所限,通常b/s结构的应用系统其安全性较c/s结构更低,这也是影响intranet在企业内部网中普及的一个重要原因。通常在b2b供应链系统中传输处理的xml文档多以动态的数据流形式存在,生存周期很短,必须用指定的应用程序调用而不能直接打开文件,因此,要保障系统中的xml数据安全,除了实际使用过程中加强对计算机系统的全面管理外,在开发设计时选择好的加密机制也很重要,通常对xml数据的加密有以下几种主要方法:
数据秘钥加密
xml数据是基于文本文件的,因此可以使用经典的加密算法对xml数据进行加密,通常我们称xml源数据为明文,加密后产生的目标数据为密文,由明文产生密文的过程称为加密,而由密文恢复明文的过程称为解密。设明文为m,密文n,则可用如下公式表示数据的加密解密过程,其中e为加密算法,f为解密算法:
e(m)=n
f(n)=m
上述公式具有很大的缺陷,即任何人只要破译了解密算法f,就可以由密文n算出明文m,此时为了保障数据安全,就必须修改或替换算法e和f,而这意味着要修改系统程序,显然是不切实际的。现代密码学通过秘钥解决此问题,所谓秘钥一般是由数字或字符组成的关键字,并作为加密/解密算法的参数代入,当加密算法e和明文m固定时,采用不同的加密秘钥k将得到不同的密文n,而此时由密文n恢复出明文m同样需要一个解密秘钥k解,根据加密/解密算法的不同,k解可以与加密秘钥k相同或不同,修改后的加密/解密公式表示如下:
e(m,k)=n//k为随机产生的关键字 f(n,k解)=m//k解等于k或与k匹配 |
一般我们称k解等于k的秘钥算法为对称算法或单钥算法,此时当有数据在不同计算机间交互时,发送方首先用秘钥k将明文加密,然后传输至接收方,并由接收方采用同样的秘钥解密得到明文。这种方法的一个难题在于,如何使接收方安全地得到发送方随机产生的秘钥k,解决的办法有好多种,这里仅介绍其中最简单的两种,实际设计中可根据系统的要求灵活应变,有关更复杂严密的方法也可参看kerberos、dass等安全标准:
◇点对点秘钥安全:为不同计算机上的应用a与b建立一初始通信秘钥k1,此秘钥可手工输入或编程时设定,并且未被使用过加密数据,因此认为是安全的。当a、b两方要通信时,发送方产生随机秘钥k2,并用k1将k2和xml数据加密,传输至接收方,接收方收到信息,用k1解密后,销毁k1,保存k2,并通知发送方接收成功,发送方得到响应后销毁k1,保存k2,否则重发数据,k2为下一次双方通信的加密秘钥;
◇通过可信第三方的安全服务:在网络中建立秘钥数据库c(即安全服务器),每个在c注册的应用都有一个不同的用户秘钥,该秘钥仅用于应用与数据库c间的通信,由数据库c产生发给应用,一般是定期更换,可以认为是安全的。当a和b通信时,发送方首先将事件告知数据库c,由c产生随机秘钥k,并将k用a、b各自的用户秘钥ka与kb加密后交给a、b,然后双方便可用解密后得到秘钥k对xml数据进行加密/解密。
des是最流行的对称秘钥算法,该算法在七十年代由ibm的密码学专家发明,经过nsa(美国国家安全局)的评估与修改,先后被nist、iso等权威机构作为工业标准发布,可以免费用于商业应用。des采用分组密码技术,即将明文分为长度为64bit的单元组,然后用一个随机产生的56bit数字秘钥对每一组进行加密,并输出长度为64bit的密文,其基本加密步骤如下所示:
1.对64bit的明文单元组进行初始置换ip,如将第1位换到第50位,第50位换到第28位,第28位换到第3位……,并建立置换记录表s,然后将置换结果分为32bit的左右两部分r和l;
2.秘钥置换,将56bit的秘钥分为28bit的左右两部分,每部分分别循环左移1或2位,然后从移动后产生的56位秘钥中选出48位作为压缩秘钥k缩;
3.扩展置换,将单元组右半部分r切分为每4位一小组输入,经过e-盒运算,得到6位的输出结果,即将32bit的r扩展为48位的r扩;
4.s-盒代替,将r扩与压缩秘钥k缩作异或运算得到48bit的输入数据ri,将rs输入指定的8个s-盒,经过替换得到一个32位(8个4位分组)的输出ro;
5.p-盒置换,对ro进行动态的p-盒置换,并将置换结果(32bit数据)与单元组左半部分l异或得到新的右半部分r_,然后将左、右半部分l与r_交换;
6.重复步骤2~5,使该组合操作共循环16轮;
7.将单元组的左、右半部分交换后合并,并进行与初始置换ip相逆的末置换ip-1,即得到该单元组的最终加密结果。
des的解密算法与加密算法基本一致,差别在于压缩秘钥k缩的产生不同,二者顺序正好相反,设加密过程中16轮加密的压缩秘钥依次为k1,k2,k3……k16,则解密过程中的压缩秘钥便为k16……k3,k2,k1。des的算法复杂难懂,但却很容易通过计算机实现,本文在此给出des算法的c源程序,对des算法有兴趣的人可参看bruceschneier所著的《appliedcryptographyprotocols,algorithms,andsourcecodeinc》一书。
有关des的争论主要集中在其安全性上,尽管一直没有确实的证据,仍有许多密码学家对des的可靠性表示担心,其原因主要有二:
◇des采用56位秘钥与固定的s-盒,而这都是由nsa制定的,并且没有给出这样做的理由,人们担心nsa会在算法中嵌入后门,这样便可以用简单的方法对数据解密;
◇des是受分析与攻击最多的秘钥算法,随着差分分析技术与线性分析技术的公开,使得大型des破译机的制造成本与破译时间大大降低。
为了提高des算法的强度,人们提出了基于加密分组的链接模式(如cbc、ofb、cfb等)及des的各种变型技术,如多重des和更换s-盒等,其中有些已被证实了具有强化作用(如三重des),而大多数还缺少数学上的验证支持。
除了des外,目前较为流行的对称秘钥算法还有idea、feal、loki、lucifer、rc2、rc4、rc5、blowfish、gost、cast、safer、seal等,这些算法大多只具有美国专利(这意味着你至少可以在国内免费使用),有关它们的算法介绍与源程序代码在互联网新闻组上都可得到。
与对称秘钥算法相对应的是公开秘钥算法(又称双钥加密或不对称加密),该算法要求秘钥成对出现,即k解<>k并且不能实现由k->k解或k解->k的直接推导。通常秘钥k作为公开秘钥在网络中发布,任何人都可以此秘钥为加密秘钥加密数据并发给接收方,而接收方用另一个匹配的秘钥k解(私人秘钥)作为解密秘钥将数据解密,公开秘钥算法的最大优点就在于它不存在秘钥传送所带来的泄密问题,因为其公开秘钥本来就可以随意获得。
rsa是目前应用最为广泛的公开秘钥算法,也是最容易理解和实现的公开秘钥算法,它是1977年由r.rivest、a.shamir和l.adleman三人提出的。其基本算法如下:
选择两个大素数p和q(通常为100到200位的十进制数),计算:n=p*q;
随机选择加密秘钥e,要求e和(p-1)*(q-1)互质;
利用euclid算法计算解密秘钥d,满足e*d=1(mod(p-1)*(q-1))其中n和d也要互质;
数e和n是公钥,d是私钥。两个素数p和q不再需要,应该丢弃,不要让任何人知道;
加密信息m(二进制表示)时,首先把m分成等长数据块m1,m2,...,mi(采用二进制数),块长s,其中2^s<=n,s尽可能的大(s为小于n的2的最大次幂);
加密公式:ci=mi^e(modn)
解密公式:mi=ci^d(modn)(其中ci为密文分组,mi为明文分组)
rsa算法的安全性完全依赖于分解大数的难度(即得到两个大素数p、q相乘结果很容易,但要由此结果分解得到大素数p、q却非常困难,这也是目前绝大多数公开秘钥算法设计的基本思路),需要指出的是,就纯技术的角度而言,这种逻辑是并不合理的,因为事实上它所基于的仅仅是一种猜测(类似于歌德巴赫猜想),目前在数学上还从未有人能证明过必须先要分解n才能从c和e中计算出m,如果有一天有人能够找到比穷举法有效得多的因式分解法或rsa中的后门,那么,所有用rsa加密的机密数据就有可能被一览无遗。
rsa公开秘钥算法的主要缺点在于1)加密/解密速度太慢,一般而言,与des相比较,rsa的软件实现要慢一百倍,硬件实现要慢一千倍;2)处理数据量小,最多只能有其秘钥的模数大小,如一个1024的rsa公共秘钥最多只能加密1013位数据(多出11位长度要用于编码)。
事实上,在b2b供应链中,我们并不直接使用rsa加密业务数据,而是将它与des等对称秘钥算法混合使用,即先用des对称秘钥加密业务数据,然后用rsa公钥加密des秘钥,并将加密后的业务数据与对称秘钥一起发给rsa私钥持有者(即业务数据的接收端)。这样,既避免了对称秘钥传递时的安全性问题,又消除了rsa算法速度太慢的缺点。
对于xml格式的数据,秘钥加密不仅可用于全文加密,也可用于元素级的加密,这在实际应用中有着非常广泛的意义。它不仅使数据加密可以精确到子元素,而且可以在一个文档中无缝结合加密与未加密数据。以下是一张用xml描述的药材模拟报价单:
vjqnpdrqt1vmcvbygjfiwdidbyogxgmutgz6tvgopukvg7ixnen50ikw8pmtxfixz5hochoxgttpqk tqheho5+vlolafgiiodirqghhmhng3cld+8tvrt8wxpbcrsmupx4d2tgxw2tqsepam0zxdmwuxwnsag ar8hmiromd+bh+tdompv7efz4no5ft3jg3t0trllwvupf/5vaijimusmuukkgyg8x9acs/kxjxhpm m=peqgzimf+8aa .......................
|
在这份报价单中,药材价格是非公开的,因此原料商可以根据市场需求、生产成本、产量等因素定好药材价格后,先产生一张原始的报价单,然后将其中的价格部分加密(本例中所使用的算法是des/cbc),并交给代理(可以是一计算机消息队列),代理根据单据上的不同收件人(addressee)将对应的报价部分提取转发,整个过程中代理始终不曾知道药材的报价。显然,本例中若采用全文加密会麻烦的多(需要为每个制药商建立一张报价单,并在文件外部指定收件人)。
通信协议加密
xml是完全面向数据的,因此可以和任何通讯协议相结合,通常我们在xml数据传递的网络编程中使用较多的有tcp/ip、ipx/spx(通常用于后台内部网)、socket、http、soap、xml-rpc、corba(iiop)等协议。由于在b2b供应链中,xml数据主要以异地的输入输出流形式存在(包括表单等业务信息与rpc调用命令,而很少有永久性质的本地xml物理文档存在),因此,我们可以使用面向通讯安全的网络安全协议来实现xml数据传输的安全性。
通常,实现通信协议的加密有如下两种方式:
手工加密数据传输包,即以人工的方式将通信协议包中的数据分组进行加密,这种方式从实际编程上与单纯的数据加密没有什么不同,不过有两点需要注意:
对分组数据进行加密后,通常数据的长度与校验值都会改变,因此要记得修改分组头中相应的字段定义部分;
单个分组数据加密后也必须由单个分组打包发送,尤其是在某些无连接的通讯协议如ip、udp、ipx中,不至于由一个包丢失引起整个分组数据的无效。
采用手工加密xml数据传输包时基于实际通信协议的不同,可以选择使用不同的加密策略。比如当采用socket(传输层)编程时,我们需要建立一个进程之间的安全通道,实现端对端的安全通信,此时所有经过此通道的数据都将被加密。而当采用http、soap等应用层协议时,我们就可以选择采用端对端加密还是应用级加密,比如使用soap协议传输xml文档时,我们就可以实现对某个指定元素的加密。这是由于应用层协议通常都可以理解所传送文档的内部结构,而传输层协议则没有这种能力。
使用安全网络协议,所谓网络安全协议是基于某一层网络协议之上或对应于某种网络协议的安全保密规范。即使用对称秘钥加密、公开秘钥加密、数字签名、ca证书等方法,按照指定的步骤,通过建立安全连接的方法,达到保证网络数据安全传输的目的。
目前在电子商务领域较为流行的网络安全协议有ssl、set、pct、tlsp、s-http、ipsec、pptp、s/mime、pgp、moss、pem等。其中s-http是http的安全增强版本,由commercenet公司于1994年制定,s-http提供了基于http框架的数据安全规范以及完整的客户机/服务器认证机制。s/mime、moss、pem、pgp是电子邮件的安全传输标准,pem是由irtf安全研究小组设计的邮件保密与增强规范,它的实现基于pki公钥基础结构并遵循x.509认证协议,pem提供了数据加密、鉴别、消息完整性及秘钥管理等功能,目前基于pem的具体实现有tis/pem、ripem、msp等多种软件模型。s/mime是由rsa公司于1995年提出电子邮件安全协议,与较为传统的pem不同,由于其内部采用了mime的消息格式,因此不仅能发送文本,还可以携带各种附加文档,如包含国际字符集、html、音频、语音邮件、图象、多媒体等不同类型的数据内容,目前大多数电子邮件产品都包含了对s/mime的内部支持。pgp是由美国人philzimmermann开发的一个免费电子邮件(也可用于一般文件)加密工具包。pgp缺省采用idea进行数据加密,rsa(秘钥长度最大为2047位)进行秘钥管理与数字签名,pkzip作为数据预压缩算法,md5作为单向散列算法。pgp符合pem的绝大多数规范,但不要求必须遵循pki基础结构,而是采用了分布式的信任模型,即每个用户都可维护一个公钥环,pgp与s/mime是目前最为流行的两个电子邮件安全协议。pptp是微软制定的用于建立虚拟专用网络()的连接协议,pptp允许客户机以拨号方式建立虚拟通道访问internet上的异构网络(如ipx或netbeui)。pptp的底层传输协议必须为ip,它采用了ras公司的rc4作为数据加密方法,保证了在pptp客户端与服务器之间的安全通信。ipsec是由ietf安全小组制定的面向tcp/ip网络安全的协议集,主要包括两个安全协议ah(验证头)和esp(封装安全载荷),以及密钥管理协议ike。其中ah提供无连接的完整性、数据发起验证和重放保护;esp除了ah的全部功能外还可另外提供数据流加密;密钥管理协议ike则负责提供共享的安全参数和密钥协商。这些协议均独立于算法,这种模块化的设计允许只改变不同的算法而不影响实现的其它部分。set是由visa与mastercard公司共同开发的用于互联网安全信用卡数据传输的协议套件,它主要提供客户、商家和银行之间的认证,并确保交易数据的安全性、完整可靠性和交易的不可否认性,特别是保证不将客户银行卡号暴露给商家。set采用公钥密码体制和x.509数字证书标准,属于典型的pki应用,由于其严密卓越的安全特性,set已成为目前公认的网上交易国际安全标准。不过由于目前在国内的电子商务领域中尤其是b2b市场中,还很少使用网上支付的交易方式,因此set的实际应用非常有限。ssl是由netscape制定的互联网安全通信协议,目前的版本为ssl3.0,使用ssl可以建立一条点对点的安全信道用于实时的数据交互。pct协议是微软制定的ssl2改进版本,据微软称其安全性能要远远高于ssl2,二者格式上的主要差别在于它们版本号字段的最显著位(themostsignificantbit)取值有所不同:ssl该位取0,pct该位取1。tlsp是基于tcp/ip的传输层安全协议,提供了类似于ssl3的安全性能由itef的tls安全技术小组制定,并作为安全标准草案向iesg正式提交。
ssl是目前电子商务中应用最为广泛的安全协议,其实现模式非常适合编程开发。由于ssl提供传输层的通信加密而与应用层协议独立无关,因此各种高层的应用层协议(如http、ftp、telnet、soap、wddx等)能透明的建立于ssl协议之上。ssl协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商以及服务器认证工作,在此之后应用层协议所传送的所有数据都会被加密,从而保证通信的安全性。如前面所述,由于目前国内b2b市场还很少使用网上支付,因此安全性很高的set协议几乎不太可能用到,而ssl由于其使用范围广(可结合大多数互联网通信协议),所需费用少(可以到网上免费下载基于各种操作系统平台、各种编程语言的工具包),实现方便(比如和ipsec相比较)、安全性高(经过多年实践检验),所以已成为一般网络数据安全通信的首选方案。本文将在下面对ssl的实现作简要介绍:
ssl协议包括ssl记录协议和ssl握手协议两部分,前者指定传输数据的具体格式。后者则负责在支持ssl的客户端和服务器端之间建立安全传输通道,并实现:
◇在客户端验证服务器;
◇允许客户端和服务器选择双方都支持的加密算法;
◇在服务器端验证客户(可选);
◇用公钥加密算法产生"共享安全信息";
◇建立加密ssl连接。
在ssl协议中,所有的传输数据都被封装在记录中。记录是由记录头和长度不为0的记录数据组成的。所有的ssl通信包括握手消息、安全空白记录和应用数据都使用ssl记录层。ssl记录协议包括了记录头和记录数据格式的规定。ssl的记录头可以是两个或三个字节长的编码。ssl记录头的包含的信息包括:记录头的长度、记录数据的长度、记录数据中是否有粘贴数据。其中粘贴数据是在使用块加密算法时,填充实际数据,使其长度恰好是块的整数倍。最高位为1时,不含有粘贴数据,记录头的长度为两个字节,记录数据的最大长度为32767个字节;最高位为0时,含有粘贴数据,记录头的长度为三个字节,记录数据的最大长度为16383个字节。
ssl协议同时使用对称密钥算法和公钥加密算法。前者在速度上比后者要快很多,但是后者可以实现更好的安全验证。一个ssl传输过程首先需要握手:用公钥加密算法使服务器端在客户端得到验证,以后就可以使双方用商议成功的对称密钥来更快速的加密、解密数据。其基本过程描述如下:
1.客户端向服务器端发送客户端ssl版本号、加密算法设置、随机产生的数据和其他服务器需要用于根客户端通讯的数据;
2.服务器向客户端发送服务器的ssl版本号、加密算法设置、随机产生的数据和其他客户端需要用于根服务器通讯的数据。另外,服务器还要发送自己的证书,如果客户端正在请求需要认证的信息,那么服务器同时也要请求获得客户端的证书;
3.客户端用服务器发送的信息验证服务器身份,如果认证不成功,用户就将得到一个警告,然后加密数据连接将无法建立;如果成功,则继续下一步;
4.用户用握手过程至今产生的所有数据,创建连接所用的"关键安全信息",用服务器的公钥加密(在第二步中传送的服务器证书中得到),传送给服务器;
5.如果服务器也请求客户端验证,那么客户端将对另外一份不同于上次用于建立加密连接使用的数据进行签名。在这种情况下,客户端会把这次产生的加密数据和自己的证书同时传送给服务器;
6.如果服务器也请求客户端验证,服务器将试图验证客户端身份。如果客户端不能获得认证,连接将被中止;如果被成功认证,服务器用自己的私钥解密"关键安全信息"并分解(其中包含产生秘钥的参数条件);
7.服务器和客户端同时产生会话秘钥k,之后所有数据传输都用基于秘钥k的对称密钥算法来交流数据;
8.客户端向服务器发送信息说明以后的所有信息都将用会话秘钥k加密。至此,它会传送一个单独的信息标示客户端的握手部分已经宣告结束;
10.服务器也向客户端发送信息说明以后的所有信息都将用会话秘钥k加密。至此,它会传送一个单独的信息标示服务器端的握手部分已经宣告结束;
11.ssl握手过程成功结束,一个ssl数据传送过程建立。客户端和服务器开始用会话秘钥k加密、解密双方交互的所有数据。
一个ssl传输过程大致如此,但是还有很重要的一点不能忽略--即利用证书在客户端和服务器端进行身份验证。一个支持ssl的客户端软件通过下列步骤认证服务器的身份:
1.服务器端传送的证书中获得相关信息(在ssl中有函数支持,在程序中有相关例子);
2.当天的时间是否在证书的合法期限内;
3.签发证书的机关是否客户端信任的;
4.签发证书的公钥是否符合签发者的数字签名;
5.证书中的服务器域名是否符合服务器自己真正的域名;
6.服务器被验证成功,客户继续进行握手过程。
一个支持ssl的服务器通过下列步骤认证客户端的身份:
1.客户端传送的证书中获得相关信息;
2.用户的公钥是否符合用户的数字签名;
3.当天的时间是否在证书的合法期限内;
4.签发证书的机关是否服务器信任的;
5.签发证书的机关是否服务器端信任的;
6.用户的证书是否被列在服务器的ldap里用户的信息中;
7.得到验证的用户是否仍然又权限访问请求的服务器资源;
目前iana(internet号码分配当局)已经为具备ssl功能的应用分配了固定端口号,例如,带ssl的http(https)被分配的端口号为443,带ssl的smtp(ssmtp)被分配的端口号为465,带ssl的nntp(snntp)被分配的端口号为563。有关面向不同操作系统与编程语言的ssl免费开发工具包及技术资料可到http://www.openssl.org/上获得。
xml数据伪编译
伪编译是计算机系统中针对解释性程序语言源代码保密的一种常用技术,文本格式的源代码经过伪编译成为二进制机器码,并可被特定的程序读懂。伪编译是一种较为简单的数据保密方法,与秘钥加密不同,它不存在关键字形式的加密解秘钥匙;应用程序可以读取二进制码xml数据的任意部分,而无需先将整个文档解密。我们知道,一个xml文档在内存中可表示为一段用unicode格式编码的字符串,而伪编译的基本思路,就是改变一般xml数据明文的特点,用一种新的编码方法将xml文档保存在存储器中。xml数据的伪编译通常有两种方式:
基于文本字符串方式,即将整个xml文档简单的看作一字符串,逐个字符进行伪编译。xml的默认字符编码方式是unicode,在iana(互联网数字化专职机构)中注册过编码方案的字符通常都可用unicode表示,因此,我们可以unicode为蓝本,对字符的存储字进行多次组合的反码、补码、加减、循环移位等处理,得到伪编译后的xml文档字符,此时用一般编辑器打开xml目标文档看到的是乱码。举例而言,一个简单的伪编译流程如下图所示:
此时接收端只需调用一个反编译模块retransf(e),便可直接对伪编译xml文档进行处理。
基于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数据的使用过程中,为了减小文档冗余,许多dtd、schema、xslt文件都以外部形式存在,不仅没有保密,而且在调用过程中很容易被伪造。举例而言,一个200子元素在web页中应该被输出为200元,现在将格式化的xslt文件稍加修改,输出的格式有可能变成200美元,在整个过程中,肇事者也许都无法接触到xml目标数据,却仍可以造成巨大的破坏。为了防止这种现象出现,我们要求确保这类外部文件在传输过程中没有被篡改,然而,由于许多dtd、schema、xslt的调用都是文件内通过uri直接完成的,因此不能采用加密的方法。此时我们通过哈希函数为每个外部文件生成一个摘要(所谓哈希函数是一种单向散列函数,它可以将每个长文件单向映射为唯一定长的短字符串即摘要,将此摘要加密便得到文档的数字签名),可以将该数字签名放在数据库中或网络中,要调用网络中某外部文档时可通过相应的数字签名验证其真实性,由于数字签名较短,因此可以和xml文件一起传递,加密数字签名的秘钥通常保存在数据库中。数字签名的实际应用相当广泛,事实上,对于绝大多数有可能收到伪数据的情况,都可通过数字签名的方法来解决。除了本节所介绍的内容,在前面所说的网络安全协议如ssl、set中,也都嵌入了数字签名的方法。
xml数据的合法有效期。通常,任何数据都有一定的生存周期,或者仅在某些时段是对用户可见的。假设某工厂规定每天上午进行采购计划的订单分解,中午审核,下午发送,即当天的订单发送后,相关的物料需求记录便已失效。而第二天要分解的物料需求虽然在当天夜里就已产生,但要到第二天早晨7:00才开始生效,可以被采购计划员进行订单分解。这样做的主要目的是将有关数据的操作限定在指定时段才能执行。通常,大部分的有效期校验都在数据库端进行,不过当xml数据存在于应用层缓冲中时,便需通过xml数据中嵌入的有效时间标记来进行数据过滤。另外,通过在xml数据中加入时间标记(),可以防止数据的二次接收,假设现在我们在应用层对产生的每张订货单都加上生成的时间标记,然后发送到生产计划部进行任务分配,现有订货单a因为网络问题,向生产计划部发了两遍,由于两张订货单上的时间相同,因此生产计划子系统会自动将后一张过滤掉。
数据交互的点对点跟踪。客户端通过应用层与数据库联系,数据库对每次连接都应记录流水操作(记录连接的客户名,计算机,时间,所查询的数据等信息),而有些处理不会反映到数据库中,因此数据库中的流水不会对这类操作有所记录。有时为了提高应用系统的性能,我们会在应用层设置数据缓冲,存放最近的常用数据,此时当客户端与应用服务器发生数据请求或交换时,应用层就应负责记录下连接信息,并定时汇总到数据库中。同样,客户端对于每次数据请求与交换也都会在本地留有记录,这样做的目的并不是为了直接将数据加密,而是万一有事故发生后可以通过比较流水来查找问题的症结。如数据库中显示用户a在3月份共登陆了30次,而用户a的客户计算机上显示其3pu'huo仅登陆28次,除非用户a有权利在其它计算机上登陆,否则就有可能是其他人恶意假冒身份。
客户端安装节点控制。通常,每个子系统的客户端安装节点数都是限定的,其限定数可以由管理员在数据库中设置。如某工厂的采购计划员一共有八个,那么,在数据库中就可以设采购订单子系统的安装节点数为八个,每安装一个客户端,数据库中的相应记录减一,当计划员人数改变时,数据库中相应字段的最大值也应改变。
选择合适的防火墙。这是最基本的安全保护措施,虽然它与我们的开发并没有什么直接的关联,但却是必不可少的一关。不管你在设计过程中关于数据的安全保密考虑得有多周全,如果实际应用时忘了使用防火墙,那么你所作的一切努力就都是白费心机。因为哪怕一个最简单的特洛伊木马也能将你计算机中曾发生过的一切记录下来,并传给远程的偷窥者,要知道,目前绝大多数的企业内部网都有至少一个外部接口,更何况那个监视你计算机端口或投放木马的人很可能就是你身边的某个同事。使用防火墙的主要目的就是为了预防外部计算机对本机端口的侦听,过滤恶意的数据包传递,对不合理的计算机操作及有木马嫌疑的软件行为进行报警。目前市场上较为成熟的防火墙软件有checkpoint公司的firewall-13.0;elronsoftware公司的elronfirewall/secure32os;思科公司的pixfirewall4.1;微软公司的isa(internetsecurityandacceleration)server2000等。
有关数据安全的保护策略还有很多,比如与实际操作系统及网络架构、数据库架构的安全策略相结合,本文所列举的仅是冰山一角,有兴趣者可以到http://ww.security.org/;http://www.vertarmy.org/;http://www.cns911.com/(中国网络安全响应中心)等网站上了解更多信息。
xml安全的标准及网络资源等
以下是一些有关xml数据安全技术标准、工具的简介及网络资源链接。
1.xds:xds是由w3c和ietf联合制定的基于xml的互联网数字签名规范,在xml-dsig工作组中有来自w3c、mit、ietf的安全技术专家,目前他们正在加紧对xds草案的修改工作,有关xds技术的详细描述可查看网址http://www.ietf.org/rfc/rfc2807.txt。
2.w3cxmlencryptionwg:正如你所看到的,这也是w3c下的一个工作小组,其任务就是负责制定xml数据的加密与解密标准,该小组的主页为http://www.w3.org/encryption/2001,目前xmlencryption最新版本的草案已于2001年4月21日分布,有关该草案的建议与疑问可发信到[email protected]联系。
3.xkms:xkms是由verisign、微软、webmethods共同制定的一种,它遵循xds数字签名标准和xml加密草案,其主要功能包括公钥的登记、发布、撤销、验证、管理、查询等,xkms由两部分组成:x-kiss(xml秘钥信息服务规范)和x-krss(xml秘钥登记服务规范),其简单描述如下:
◇x-kiss定义了一种用于验证互联网上公钥(包含在xml-sig子元素中)合法性的服务实现规范,使用x-kiss,一个xml应用可通过互联网委托某可信第三方(ca)处理有关签名认证、数据加密的服务,包括提供其它客户的加密公钥,验证某公钥合法性等;
◇x-krss则定义了一种可通过互联网接受公钥登记、撤销、恢复的服务规范,一个xml应用建立了一个秘钥对,可通过x-krss协议将公钥部分及其它有关本人身份的信息发给可信第三方登记。
xkms的制定遵循如下基本原则:
◇其语法规范与xds数字签名标准及xml加密草案相兼容;
◇客户端只要求使用标准的xml工具(支持xml数字签名与加密);
◇不需要asn.1工具;
◇公钥状态信息(如已撤销)的管理对于客户端是透明的;
◇最小化客户代码与复杂度,不要求与x.509及pki兼容。
4.xkms规范是使用xmlschema定义的,其默认的通讯协议为soapv1.1,其服务与消息的语法定义遵循wsdlv1.0(互联网消息定义语言),也可遵循其它向上兼容的标准。2000年9月27日verisign、微软、webmethods发布xkms的1.0版草案并正式提交给w3c,预计到2001年底可以通过使用。有关xkms的详细内容可到http://www.verisign.com/rsc/wp/xml/xkms及http://www.w3.org/tr/xkms下载其白皮书与技术规范。
s2ml:s2ml是第一个基于xml实现互联网安全电子商务的工业标准,其规范的制定成员目前包括w3c和oasis。s2ml是完全开放免费的,使用s2ml可以实现顾客、供应商、销售商、合伙人之间认证、授权、特征摘要等信息的安全交换。s2ml是与工作流平台无关的,可用于biztalk、ebxml等框架中,s2ml同样是与网络协议无关的,它可与jms、http、soap等多种协议协同工作。
s2ml包括两个schema(nameassertion和entitlement)和一个基于xml的握手协议(服务的请求/相应),并由此提供一种架构可以在互联网上共享安全信息,实现安全认证、授权等服务,有关nameassertion和entitlement的简单描述如下:
◇nameassertion(名称声明):当一次认证成功后会生成一个名称声明,一个s2ml声明(assertion)描述某种类型的认证,认证者(如某个认证服务器),及被认证的分支(如某个用户或某个实体)。
◇entitlement(权利):entitlement是一个包含认证、授权、特征摘要等描述信息的数据集,在s2ml的白皮书描述中,一个entitlement类似于一个"授权令牌",entitlement的制定应包括(授权的)起始时间、生存周期及收件人地址,在s2ml中将entitlement数据打包插入一个发布了的授权(文件)中。
目前s2ml的版本为v0.8草案,有关s2ml的详细介绍可到http://www.verisign.com/及http://www.s2ml.org/下载其白皮书与技术规范。
xmltrustservices:是由微软、ariba、webmethods,及netegrity共同制定的
5.xmlsecuritysuite:这是ibm出的一套xml安全组件,它可以提供如下功能:
xml数据的元素级加密;
xml数据形式的规范化;
使用标记对xml资源进行数字签名;
实现asn.1数据与xml之间自动转换的翻译器;
为dom树节点建立hash值及判断两个dom树之间区别的domhash工具。
有关xmlsecuritysuite的更多信息可到下述的ibm官方网站中免费下载源程序与详细的技术文档:http://www.alphaworks.ibm.com/tech/xmlsecuritysuite。
6.authxml:authxml是一种采用xml数据格式的授权与认证规范,该技术的主要推崇者为互联网安全技术供应商securanttechnologies与outlooktechnologies,inc.。authxml实现的具体目标如下:
authxml应定义一种消息格式用于在不同的安全区域之间传递授权、认证、用户描述等信息;
authxml采用xml数据格式;
authxml独立于任何特定的安全模式;
authxml应具有良好的可扩展性;
目前authxml还处于草案阶段,有关authxml的详细描述以及authxml工作组的最新进展可到http://www.authxml.org/中查看。
7.http://www.nue.et-inf.uni-siegen.de/:这是由一家德国大学(universityofsiegen)建立的网站,其中有对xml安全的专题研究,如果你想了解有关最新xml安全研究的网络资源,可以到它的网页http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/xml_security.html上看看。
xml数据安全的本质仍是计算机数据安全,由于数据采用了xml格式,因此我们可以结合此特点衍生出各种符合应用实际需求的安全加密技术,xml数据安全不仅仅是一个技术问题,它是整个供应链系统安全的重要组成部分,只有从企业安全管理的高度加以重视,只有在日常工作的每一个操作细节加以规范,才能防微杜渐,万无一失。在一般情况下,灵活使用上述的加密方法与补充策略可以杜绝绝大多数安全方面的常见漏洞。不过,方法是死的,人是活的,如何结合实际情况,将这些安全策略合理地组合运用,也是一门非常大的学问。另外,对于应用系统的使用者与管理者而言,切忌因为应用系统中采取了较为完善的安全措施,就认为可以放松戒心,随意操作。要知道,无论是哪一类型的商业泄密,由于人为因素造成的损失都远远要比技术失误造成的多的多,也容易的多。
参考资料:
visualbasic6xml专业技术jamesbritt/teunduynstee人民邮电出版社
xml用户手册charlesf.goldfarb/paulprescod(美)人民邮电出版社
计算机网络(高级)胡道元清华大学出版社
internet协议手册daveroberts海洋出版社
windowsnt系统安全实用技术清华大学出版社
backofficeintranet解决方案指南stephenwynkoop(美)机械工业出版社
电子商务核心技术--安全电子交易协议的理论与设计梁晋等西安电子科技大学出版社
混合环境下的网络安全danblacharski(美)世界图书出版公司
应用密码学--协议、算法与c源程序施奈尔(美)机械工业出版社
网络安全技术内幕机械工业出版社
internet网络安全专业参考手册机械工业出版社
名词解释:
iana:互联网数字化专职机构(internetassignednumbersauthority)
nist:美国国家标准技术研究所(nationalinstituteofstandardtechnology)
nsa:美国国家安全局(nationalsecurityagency)
rsa:rsa公共秘钥算法(由rivest/shamir/adleman所提出)
rc:ronrivest秘钥算法(rivestcipher)
set:安全电子传输协议(secureelectronictransaction)
ssl:安全套接层协议(securesocketlayer)
des:数据加密标准(dataencryptionstandard)
idea:国际数据加密算法(internationaldataencryptionalgorithm)
gost:苏维埃政府密码标准(govemmentstandardoftheunionofsovietsocialistrepublics)
cast:cast对称秘钥算法(由carlisleadams/staffordtavares发明)
dsa:数字签名算法(digitalsignaturealgorithm)
pgp:私人加密工具包(prettygoodprivacy)
iiop:互联网对象请求代理协议(internetinter-orbprotocol)
soap:简单对象访问协议(simpleobjectaccessprotocol)
rpc:远程进程调用(remoteprocesscall)
pct:私人通信技术(privacycommunicatetechnology)
tlsp:传输层安全协议(transportlayersericutyprotocol)
pki:公钥基础设施(publickeyinfrastructure)
ipx:网间分组交换(internetworkpacketexchange)
spx:顺序分组交换(sequencepacketexchange)
xds:xml数字签名(xmldigitalsignatures)
xkms:xml秘钥管理规范(xmlkeymanagementspecification)
x-krss:xml秘钥登记服务规范(xmlkeyregistrationservicespecification)
x-kiss:xml秘钥信息服务规范(xmlkeyinformationservicespecification)
s2ml:安全服务标记语言(securityservicesmarkuplanguage)
ietf:互联网工程任务组(internetengineeringtaskforce)
wdsl:互联网服务定义语言(webservicesdefinitionlanguage)
moss:mime对象安全服务(mimeobjectsecurityservices)
msp:消息安全协议(messagesecurityprotocol)
s/mime:互联网邮件多用途扩展安全协议(securitymultipurposeinternetmailextensions)
pem:保密性增强邮件标准(privacy-enhancedmail)
:虚拟专用网(virtualprivatenetwork)
pptp:点对点通道协议(point-to-pointtunnelingprotocol)
cbc:加密块链接(cipherblockchaining)
cfb:加密反馈模式(cipherfeedbackmode)
ofb:输出反馈模式(outputfeedbackmode)
ah:验证头(authenticationheader)
esp:封装安全载荷(encapsulatingsecuritypayload)
ike:互联网密钥交换协议(internetkeyexchange)
iana:互联网号码分配当局(internetassignednumberauthority)