APP下载

永中Office设计中的安全创新

2018-02-07江歆皓

信息安全研究 2018年1期
关键词:永中编程语言文档

江歆皓

(永中软件股份有限公司战略业务发展部 江苏无锡 214135)

(jxh@yozosoft.com)

1 独创安全性设计理念

软件的独创性首先体现在设计理念上,而办公软件采用不同的文件结构,用“集成”的方式定义了一整套的数据结构.便形成了对基础办公软件应用从文件结构、使用体验、数据管理等方面全面的创新.永中Office也正是基于以上的设计理念和架构编写永中Office程序的.如何保证数据结构中的文件格式安全、确保数据对象的安全,是我们首先要解决的问题.

永中Office是采用Java语言开发的,Java是一种跨平台、面向对象的编程语言[1],永中Office集成应用,既采用该语言的自有特性也决定了软件的安全性.传统的过程式编程语言是以过程为中心以算法为驱动,面向对象的编程语言则是以对象为中心以消息为驱动[2].用公式表示,过程式编程语言为:程序=算法+数据;面向对象编程语言为:程序=对象+消息.现实世界中的对象均有属性和行为,映射到计算机程序上,属性则表示对象的数据,行为表示对象的方法(其作用是处理数据或同外界交互).在Java中绝大部分成员是对象,只有简单的数字类型、字符类型和布尔类型除外.而对于这些类型,Java也提供了相应的对象类型以便与其他对象交互操作.除此之外Java的多态性和单一继承性也为永中Office集成运行、应用中数据的相互调用创造了可能.

Java最初设计目的是应用于电子类消费产品,因此要求较高的可靠性.Java虽然源于C++,但它消除了许多C++不可靠因素,可以防止许多编程错误.首先,Java是强类型的语言,要求显式的方法声明,这保证了编译器可以发现方法调用错误,保证程序更加可靠;其次,Java不支持指针,这杜绝了内存的非法访问;第三,Java的自动单元收集防止了内存丢失等动态内存分配导致的问题;第四,Java解释器运行时实施检查,可以发现数组和字符串访问的越界;最后,Java提供了异常处理机制,程序员可以把一组错误代码进行统一管理,这样可以简化错误处理任务便于恢复.

由于网络应用程序开发多采用Java语言,因此对安全性有较高的要求.如果没有安全保证,用户从网络下载程序执行就非常危险.Java通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏.当Java字节码进入解释器时,首先必须经过字节码校验器的检查,然后,Java解释器将决定程序中类的内存布局,随后,类装载器负责把来自网络的类装载到单独的内存区域,避免应用程序之间相互干扰破坏.客户端用户还可以限制从网络上装载的类只能访问某些文件系统.上述几种机制结合起来,使得Java成为安全的编程语言.编程语言的这些安全属性,被广泛应用于永中Office产品中.从而确保了程序的安全可靠性.

作为一款通用软件,永中Office需要适应包括操作系统、硬件环境、用户自有应用系统等一系列较为复杂的使用环境.Java语言的多线程属性有效地解决了以上问题.线程被称作轻量进程,是比传统进程更小的可并发执行的单位.Java支持多线程.首先Java环境本身就是多线程的.若干个系统线程运行负责必要的无用单元回收、系统维护等系统级操作;其次,Java语言内置多线程控制,可以大大简化多线程应用程序开发.Java提供了一个类Thread,由它负责启动运行,终止线程,并可检查线程状态.Java的线程还包括一组同步原语.这些原语负责对线程实行并发控制.利用Java的多线程编程接口,开发人员可以方便地写出支持多线程的应用程序,提高程序执行效率.

原生编程语言的优势,给程序带来了很多创新性、安全性的使用体验,成为永中Office软件焕发生命力的源泉.

2 数据对象安全模块的形成

在面向对象的程序设计中,对象是系统中的基本运行实体,是代码和数据的集合.在“集成”的特定文件格式(eio)中,数据不是孤立存在的,而是被封装为对象,使程序变成一个面向对象的储藏库系统[3].在这个储藏库系统中,数据对象被根据不同的属性,又被系统分类定义成不同类别样式的数据对象组,从而生成了对文档数据的保护机制.

2.1 文档读写层数据安全保护

图1 安全读写

在办公软件程序中,所有的数据对象都是通过代码来控制读写,而不是简单地使用程序语言的序列化机制.因此,试图用一般的语言序列化机制来破解数据文件是完全不可能的.当数据文件以加密方式被保存时,数据对象也是以加密方式被保存下来,如图1所示.在面向对象的数据储藏库中有200多种不同类型的数据对象,这些对象均具有自己的特点,具有自己独特的数据域.数据对象类型在文件中都具有唯一标识,是一个整型值,如图2所示.对象类型繁多,为破解带来极大的困难.当试图破解而获取一个对象的标识时,它只是一个简单的整型值,无法得知这个整型值到底代表了哪种具体的数据对象.

图2 多类型多数值

2.2 多类型数据对象更安全

所有不同类型的数据对象,在定义时有一个共同特点——它们都具有多个(短)整型数组字段,在图3的这些数组中,通过[ID,Value]对的方式存储对象中一些数据.这些ID都是在程序中预定义的,ID区分为若干类型,例如纯数据ID、数据索引ID等.不同类型的ID,其对应的值(Value)的含义不同,例如,纯数据ID对应的值即为数据值;但数据索引ID对应的值表示的是一个索引,真正的数据将凭借这个索引来进一步获取.数据对象的复杂性表明,其(短)整型数组字段中数值的含义,通常只有在程序中才能获得正确的解释,假如对象被破解,将很难理解和解释(短)整型数组中值的含义.对象的数据,在存储和读入过程中,根据对象本身定义的逻辑,将会调整对象内数据字段的值.这意味着:程序运行过程中计算机内存中对象的数据和存储后文件中的数据是存在差异的.因此经过破解获取文件中的数据,未必是真实数据,通过动态调整,保证了文档数据的安全性.

图3 数据定义动态调整

2.3 特有文档结构自有安全

永中Office设计出基于面向对象的数据储藏库技术的特有文件结构,以确保文档的安全.如图4所示,图4中左侧部分,把文件结构简单描述为文件头和数据区,其中数据区中按表式结构存储数据,图4中右侧部分,表示2个表示结构(sheet_1和sheet_2),并表示了其中数据对象的一个关联结构.

图4 特有文件结构

数据表(sheet)的标识ID是动态分配的,其值取决于办公软件运行过程中,表管理器(sheet manager)的程序逻辑.而数据对象(data object)在数据表中的位置(row,cloumn)是动态分配的,其值取决于办公软件运行过程中,数据管理器(DOORS data manager)的程序逻辑.这些数据对象(data object)并非孤立的,数据对象之间通常具有引用关系.这种引用关系,并非编程语言中常用的对象引用,而是数据对象储藏库中的索引[4].程序运行时刻,数据对象的引用关系是比较复杂的,数据对象A可能引用了一些数据对象,如B,C,D等,数据对象B可能也引用了一些数据对象如E,F等……由此可见,从数据对象A开始,通过对象的引用关系在程序中,数据对象A即为数据储藏库的根结点,其他数据对象为子结点.数据对象A本身可能也是另外一个数据储藏库的一个子结点.根据前面讲的数据对象储藏库的复杂定义,这意味着,当试图破解文件中数据对象时,几乎无法确定该数据对象关联的其他数据对象的位置.

3 自主可控应用实践

拥有自主知识产权的核心技术是强国之道.随着国家自主可控[5]的推进,国产化生态环境已经越来越好,大家都已经认识到,国外的软硬件是存在安全风险的,更不能提可控.代码不是自己的,可能有这样那样的后门,风险很大.为实现安全可控的目标,办公软件需要拥有自主知识产权,取得专利权、著作权和商标权,每一行代码都自己写,没有漏洞、不留后门.在代码安全保障方面,作为通用软件需要为用户保存大量信息,这也是大家面临同一个“可能被攻击、破译”的问题,为保证自主研发的代码安全性,需对软件源代码加密,每次编译版本都生成不同的加密表,使用反编译技术只能获得完全没有可读性的代码片段.这也是永中Office办公软件应用在安全方面的另一层保障.

3.1 文档全生命周期安全

随着近些年IT系统应用的推广和发展,大量的OA等办公业务系统应用于政府、企事业单位,对文档全生命周期[6]的安全性管理要求越来越高,办公软件与应用系统结合后也具备了更多的对文档安全性控制能力.通过图5的演示我们解决了文档编辑加密与传输过程中的一些问题.

图5 编辑与加密

1) 文档编辑与加密

当用户将文档共享或者流转给其他用户时,可以对权限进行控制.(只读、读写、下载、修订等),办公软件可以根据用户角色或者文档拥有者赋予当前用户的权限,禁止或者启用打开、拷贝、截屏、保存、另存、修订等功能,保护文档的安全.后台记录操作过程形成日志,以供信息追溯.

办公软件可以对文档进行加密,可以多种加密方式混合使用(例如AES256,MD5等),采用超长度公共密钥[7]+私有密钥,理论上杜绝被破解的危险.通过权威机构认证第三方单位的控件对文档进行加密、解密,保证文档数据的安全性.打开文档必须使用密钥,拔出密钥无法打开文件,文档离开系统后就失效.

2) 文档传输

办公自动化系统支持SSL[8]加密访问.SSL协议支持数据加密传输可以增强系统安全性,通过网络传递的数据均会使用RSA算法进行不对称加密,可以完全杜绝数据包被截获后泄密的可能性,加上第三方权威的CA(Certificate Authority)认证支持,可以完全确保数据的传输安全.

3) 文档存储

传统的单一物理文件存储方式,一旦文件被窃取,所有内容均丢失,数据安全受到严重威胁.碎片化存储则没有这样的顾虑.如图6所示文件整体被切割成许多碎片,而且没有固定的切割规则,没有固定的切割数量,这样,即使碎片被窃取,也无法顺利组装成完整的文档.碎片化存储,适合于网络存储,用户身份需要严格认证,碎片组合成完整文档的规则存储在数据库中,文件服务器的安全防范措施提供有力的安全保障,JCR标准接口可以实现文件的碎片化处理、压缩处理和数据加密[9].

图6 碎片化存储

4) 文档使用限制

文档数据存储在服务器端,文件不允许下载到客户端.文档始终在系统的监管下流转、使用.即使通过某种途径获得文档数据也无法解密,不能正常打开.文档使用策略的应用,灵活有效地控制了文档的安全.如:设置文档的使用期限,过期后文档自动销毁;设置文档的阅读次数,达到阅读次数后文档自动销毁;设置文档密码,密码输错达到限定次数后,文档销毁等权限设置选项.

文档在生成和使用过程中,都要经历以上每个过程,永中Office除了依托程序自身的安全性,还通过以上手段保障文档在运行系统中的安全.

永中Office通过编程语言的选择、数据安全保障、存储方式处理等多层面设计程序运行模式,保障文档的安全.从安全角度讲,永中Office作为通用软件已经从代码结构上确保了其安全性,当针对目前复杂的运行环境,永中Office可能还需要作出更多的探索.把国密商密标准算法结合到Office中来,在Office中引入严格的身份验证[10],例如人脸识别、指纹识别、语音识别等,甚至可以以此作为增强型的加密措施,例如一个文档,限定这个文档只能由某人阅读,打开文档时用人脸识别技术验证身份,比现在的密码更加安全可靠.在Office扩展更多的安全控制功能,例如限制文档内容不能被复制粘贴、限制阅读次数、阅后即焚、限制打印份数等等.更深入地,可以做留痕,记录文档什么时间被谁打开、被谁修改、被谁打印等等.这可能都是未来我们需要探索和发展的方向.

[1]李刚. 疯狂Java讲义[M]. 2版. 北京: 电子工业出版社, 2014

[2]Eckel B. Java编程思想[M]. 北京: 机械工业出版社, 2007

[3]冷晔, 黄芳. 基于对象存储库的自定义对象的处理方法: 中国, CN200610007388.3[P]. 2008-10-08

[4]周屹, 李艳娟. 数据库原理及开发应用[M]. 2版. 北京: 清华大学出版社, 2013

[5]王可. 信息安全“自主可控”[OL]. (2014-04-05) [2017-11-06]. http://it.people.com.cn/n/2014/0405/c1009-24833631.html

[6]沈建新, 周儒荣. 产品全生命周期管理系统框架及关键技术研究[J]. 南京航空航天大学学报, 2003, 35(5): 565-574

[7]廖磊. 公共密钥和数字签名[J]. 电脑爱好者, 1998 (6): 62

[8]曾强. 网络安全协议SSL原理及应用[OL]. (2005-06-01) [2015-02-06]. https://wenku.baidu.com/view/8261d36ab 84ae45c3b358c7e.html

[9]杨伟. 几种加密算法的分析和比较 [J]. 科技信息, 2010 (27): 440-494

[10]李金库, 张德运, 张勇. 身份认证机制研究及其安全性分析[J]. 计算机应用研究, 2001, 18(2): 126-128

猜你喜欢

永中编程语言文档
浅谈Matlab与Word文档的应用接口
基于JavaScript编程语言之 闭包技术在焦点轮播上的应用
有人一声不吭向你扔了个文档
夏秋用桑蚕品种“永中×丰白”通过河南省蚕桑品种审定委员会审定
Java编程语言的特点与应用
浅谈不同编程语言对计算机软件开发的影响
Word文档 高效分合有高招
高职计算机编程语言课程教学方法的相关分析
Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
信永中和会计师事务所国际化发展取得新进展