Technical Manager
2001 年 6 月
布式多层系统是目前在企业级大中型应用中最流行的架构,而XML则是计算机数据处理的最新技术,强强联手能产生多大的化学效应;作为新的数据处理标准,XML的通用性与开放性勿庸置疑,不过对于传统成熟的开发模式,XML的价值是在于锦上添花,还是将取而代之;作为一名开发人员,我们相信通过XML可以整合与优化系统的总体性能,为了实现这个目标,在设计中要采取哪些步骤,又需要注意哪些误区……本篇就B2B供应链系统应用模型的设计为实例,试图为上述疑问寻求解答。
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有权利在其它计算机上登陆,否则就有可能是其他人恶意假冒身份。
客户端安装节点控制。通常,每个子系统的客户端安装节点数都是限定的,其限定数可以由管理员在数据库中设置。如某工厂的采购计划员一共有八个,那么,在数据库中就可以设采购订单子系统的安装节点数为八个,每安装一个客户端,数据库中的相应记录减一,当计划员人数改变时,数据库中相应字段的最大值也应改变。
选择合适的防火墙。这是最基本的安全保护措施,虽然它与我们的开发并没有什么直接的关联,但却是必不可少的一关。不管你在设计过程中关于数据的安全保密考虑得有多周全,如果实际应用时忘了使用防火墙,那么你所作的一切努力就都是白费心机。因为哪怕一个最简单的特洛伊木马也能将你计算机中曾发生过的一切记录下来,并传给远程的偷窥者,要知道,目前绝大多数的企业内部网都有至少一个外部接口,更何况那个监视你计算机端口或投放木马的人很可能就是你身边的某个同事。使用防火墙的主要目的就是为了预防外部计算机对本机端口的侦听,过滤恶意的数据包传递,对不合理的计算机操作及有木马嫌疑的软件行为进行报警。目前市场上较为成熟的防火墙软件有Check Point公司的FireWall-1 3.0;Elron 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(中国网络安全响应中心)等网站上了解更多信息。
XML安全的标准及网络资源等
以下是一些有关XML数据安全技术标准、工具的简介及网络资源链接。
- XDS:XDS是由W3C和IETF联合制定的基于XML的互联网数字签名规范,在XML-DSig工作组中有来自W3C、MIT、IETF的安全技术专家,目前他们正在加紧对XDS草案的修改工作,有关XDS技术的详细描述可查看网址 http://www.ietf.org/rfc/rfc2807.txt。
- W3C XML Encryption
- WG:正如你所看到的,这也是W3C下的一个工作小组,其任务就是负责制定XML数据的加密与解密标准,该小组的主页为 http://www.w3.org/Encryption/2001,目前XML Encryption最新版本的草案已于2001年4月21日分布,有关该草案的建议与疑问可发信到 xml-encryption@w3.org联系。
- 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兼容。
XKMS规范是使用XML Schema定义的,其默认的通讯协议为SOAP V1.1,其服务与消息的语法定义遵循WSDL V1.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(Name Assertion 和 Entitlement)和一个基于XML的握手协议(服务的请求/相应),并由此提供一种架构可以在互联网上共享安全信息,实现安全认证、授权等服务,有关Name Assertion和Entitlement的简单描述如下:- Name
- Assertion(名称声明):当一次认证成功后会生成一个名称声明,一个S2ML声明(Assertion)描述某种类型的认证,认证者(如某个认证服务器),及被认证的分支(如某个用户或某个实体)。
- Entitlement(权利):Entitlement是一个包含认证、授权、特征摘要等描述信息的数据集,在S2ML的白皮书描述中,一个Entitlement类似于一个"授权令牌",Entitlement的制定应包括(授权的)起始时间、生存周期及收件人地址,在S2ML中将Entitlement数据打包插入一个发布了的授权(文件)中。
目前S2ML的版本为V0.8草案,有关S2ML的详细介绍可到 http://www.verisign.com及 http://www.s2ml.org下载其白皮书与技术规范。
XML TRUST Services:是由微软、Ariba、webMethods, 及Netegrity共同制定的 - XML Security Suite:这是IBM出的一套XML安全组件,它可以提供如下功能:
-
- XML数据的元素级加密;
- XML数据形式的规范化;
- 使用标记对XML资源进行数字签名;
- 实现ASN.1数据与XML之间自动转换的翻译器;
- 为DOM树节点建立HASH值及判断两个DOM树之间区别的DOMHASH工具。
- AuthXML:AuthXML是一种采用XML数据格式的授权与认证规范,该技术的主要推崇者为互联网安全技术供应商Securant
- Technologies与Outlook Technologies,Inc.。AuthXML实现的具体目标如下:
- AuthXML应定义一种消息格式用于在不同的安全区域之间传递授权、认证、用户描述等信息;
- AuthXML采用XML数据格式;
- AuthXML独立于任何特定的安全模式;
- AuthXML应具有良好的可扩展性;
- http://www.nue.et-inf.uni-siegen.de:这是由一家德国大学(University of Siegen)建立的网站,其中有对XML安全的专题研究,如果你想了解有关最新XML安全研究的网络资源,可以到它的网页 http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/xml_security.html上看看。
XML数据安全的本质仍是计算机数据安全,由于数据采用了XML格式,因此我们可以结合此特点衍生出各种符合应用实际需求的安全加密技术,XML数据安全不仅仅是一个技术问题,它是整个供应链系统安全的重要组成部分,只有从企业安全管理的高度加以重视,只有在日常工作的每一个操作细节加以规范,才能防微杜渐,万无一失。在一般情况下,灵活使用上述的加密方法与补充策略可以杜绝绝大多数安全方面的常见漏洞。不过,方法是死的,人是活的,如何结合实际情况,将这些安全策略合理地组合运用,也是一门非常大的学问。另外,对于应用系统的使用者与管理者而言,切忌因为应用系统中采取了较为完善的安全措施,就认为可以放松戒心,随意操作。要知道,无论是哪一类型的商业泄密,由于人为因素造成的损失都远远要比技术失误造成的多的多,也容易的多。
Visual Basic 6 XML专业技术 | James Britt/Teun Duynstee | 人民邮电出版社 |
XML用户手册 | Charles F.Goldfarb/Paul Prescod(美) | 人民邮电出版社 |
计算机网络(高级) | 胡道元 | 清华大学出版社 |
Internet协议手册 | Dave Roberts | 海洋出版社 |
WindowsNT系统安全实用技术 | 清华大学出版社 | |
BackOffice Intranet解决方案指南 | Stephen Wynkoop(美)机械工业出版社 | |
电子商务核心技术--安全电子交易协议的理论与设计 | 梁晋等 | 西安电子科技大学出版社 |
混合环境下的网络安全 | Dan Blacharski(美) | 世界图书出版公司 |
应用密码学--协议、算法与C源程序 | 施奈尔(美) | 机械工业出版社 |
网络安全技术内幕 | 机械工业出版社 | |
Internet网络安全专业参考手册 | 机械工业出版社 |
IANA: | 互联网数字化专职机构(Internet Assigned Numbers Authority) |
NIST: | 美国国家标准技术研究所(National Institute of Standard Technology) |
NSA: | 美国国家安全局(National Security Agency) |
RSA: | RSA公共秘钥算法(由Rivest/Shamir/Adleman所提出) |
RC: | Ron Rivest秘钥算法(Rivest Cipher) |
SET: | 安全电子传输协议(Secure Electronic Transaction) |
SSL: | 安全套接层协议(Secure Socket Layer) |
DES: | 数据加密标准(Data Encryption Standard) |
IDEA: | 国际数据加密算法(International Data Encryption Algorithm) |
GOST: | 苏维埃*密码标准(Govemment Standard of the Union of Soviet Socialist Republics) |
CAST: | CAST对称秘钥算法(由Carlisle Adams/Stafford Tavares发明) |
DSA: | 数字签名算法(Digital Signature Algorithm) |
PGP: | 私人加密工具包(Pretty Good Privacy) |
IIOP: | 互联网对象请求代理协议(Internet Inter-ORB Protocol) |
SOAP: | 简单对象访问协议(Simple Object Access Protocol) |
RPC: | 远程进程调用(Remote Process Call) |
PCT: | 私人通信技术(Privacy Communicate Technology) |
TLSP: | 传输层安全协议(Transport layer sericuty protocol) |
PKI: | 公钥基础设施(Public Key Infrastructure) |
IPX: | 网间分组交换(Internetwork Packet eXchange) |
SPX: | 顺序分组交换(Sequence Packet eXchange) |
XDS: | XML数字签名(XML Digital Signatures) |
XKMS: | XML秘钥管理规范(XML Key Management Specification) |
X-KRSS: | XML秘钥登记服务规范(XML Key Registration Service Specification) |
X-KISS: | XML秘钥信息服务规范(XML Key Information Service Specification) |
S2ML: | 安全服务标记语言(Security Services Markup Language) |
IETF: | 互联网工程任务组(Internet Engineering Task Force) |
WDSL: | 互联网服务定义语言(Web services Definition Language ) |
MOSS: | MIME对象安全服务(MIME Object Security Services) |
MSP: | 消息安全协议(Message Security Protocol) |
S/MIME: | 互联网邮件多用途扩展安全协议(Security Multipurpose Internet Mail Extensions) |
PEM: | 保密性增强邮件标准(Privacy-Enhanced Mail) |
VPN: | 虚拟专用网(Virtual private network) |
PPTP: | 点对点通道协议(Point-to-Point Tunneling Protocol) |
CBC: | 加密块链接(Cipher Block Chaining) |
CFB: | 加密反馈模式(Cipher Feedback Mode) |
OFB: | 输出反馈模式(Output Feedback Mode) |
AH: | 验证头(Authentication Header) |
ESP: | 封装安全载荷(Encapsulating Security Payload) |
IKE: | 互联网密钥交换协议(Internet Key Exchange) |
IANA: | 互联网号码分配当局(Internet Assigned Number Authority) |
关于作者 郭路,杭州大学计算机系92届本科应用专业,曾先后就职于浙江省纺织经贸总公司计算机中心、思能软件、华企、飞时达等软件公司,担任技术主管,主要从事于企业 MIS、GIS、ERP 及电子商务项目的开发管理和系统分析,对 IBM、微软、SUN、Autodesk 等公司的企业级产品有较深的研究及理解。 mailto:gl2_public@sina.com |