1、物流信息系统及办公网络安全方案(加密机制)由于这套系统涉及到企业至关重要的信息,其在保密性、准确性及防篡改等安全方面都有较高的要求,因此,本系统着重设计了一套严密的安全措施。一、 一般措施 1、实体安全措施 就是要采取一些保护计算机设备、设施(含网络、通信设备)以及其他媒体免地震、水灾、火灾、有害气体和其他环境事故(如电磁污染)破坏的措施、过程。这是整个管理信息系统安全运行的基本要求。 尤其是机房的安全措施,计算机机房建设应遵循国标 GB288789 计算机场地技术条例和 GB9361 88计算机场地安全要求 ,满足防火、防磁、防水、防盗、防电击、防虫害等要求,配备相应的设备。 2、运行安全措
2、施 为保障整个系统功能的安全实现,提供一套安全措施,来保护信息处理过程的安全,其中包括:风险分析、审计跟踪,备份恢复、应急等。 制定必要的、具有良好可操作性的规章制度,去进行制约,是非常必要和重要的,而且是非常紧迫的。 3、信息安全措施 数据是信息的基础,是企业的宝贵财富。信息管理的任务和目的是通过对数据采集、录入、存储、加工,传递等数据流动的各个环节进行精心组织和严格控制,确保数据的准确性、完整性、及时性、安全性、适用性和共亨性。 制定良好的信息安全规章制度,是最有效的技术手段。而且不仅仅是数据,还应把技术资料、业务应用数据和应用软件包括进去。二、防病毒措施 计算机病毒泛滥,速度之快,蔓延之
3、广,贻害社会之大,为有史以来任何一种公害所无可比拟。从 CIH 到 红色代码和尼姆达,已充分说明了病毒的难以预知性、潜藏性和破坏性,另一方面也说明了防毒的重要性。 本系统中采用了卡巴斯基网络安全解决方案,运行在 Win2003 服务器上。 该软件包含卡巴斯基实验室最新的反恶意软件技术,这些技术结合了基于特征码的技术,主动防御和 Web 协助的保护,以实现有效和多层的防御。 利用基于云安全技术的卡巴斯基安全网络提供的自动更新,实现了对新兴威胁的快速响应。 三、内部网络安全 1、针对局域网采取安全措施 由于局域网采用的是以广播为技术基础的以太网,任何两个节点之间的通信数据包,不仅为这两个节点的网卡
4、所接收,也同时为处在同一以太网上的任何一个节点的网卡所截取。因此,只要接入以太网上的任一节点进行侦听,就可以捕获发生在这个以太网上的所有数据包,对其进行解包分析。从而窃取关键信息。这就是局域网固有的安全隐患。 为了解决这个问题,采取了以下措施: 1)网络分段 由于局域网采用以交换机为中心、路由器为边界的网络格局,又基于中心交换机的访问控制功能和三层交换功能 ,综合应用物理分段与逻辑分段两种方法,来实现对局域网的安全控制,其目的就是将非法用户与敏感的网络资源相互隔离,从而防止可能的非法侦听,这是一重要的措施。 2)以交换式集线器代替共享式集线器 由于部分网络最终用户的接入是通过分支集线器而不是交
5、换机,而使用最广泛的分支集线器通常是共享式集线器。这样,当用户与主机进行数据通信时,两台机器之间的数据包还是会被同一台集线器上的其他用户所侦听。如一种危险的情况是:用户 TELNET 到一台主机上,由于 TELNET 程序本身缺加密功能,用户所键入的每一个字符(包括用户名、密码、关键配置等重要信息),都将被明文发送,这就是一个很大的安全隐患。 因此,应该以交换式集线器代替共享式集线器,使单播包仅在两个节点之间传送,从而防止非法侦听。 2、强化 Server 端的安全措施 在 B/S 结构中, S 端的重要性是显而易见的。虽然 B/S 系统的安全已比较成熟,然而这种安全体系统中还有其潜在问题,尤
6、其是在一个复杂系统中,由于存在着大量的数据库实体及拥用不同操作权限的用户,存在多个用户对数据库实体的操作可以是增、删、改、查的任意组合。因此,即使用角色或工作组的方式为其授权,也会显得相当复杂,甚至存在着严重的安全漏洞。 针对这些状况,本系统采取了如下安全措施: 1) 内核级透明代理 与传统的 BS 安全模式不同,该系统所采取的解决方案是: 每个数据库应用只建立一个真正的数据库帐号,他具有对系统应用所涉及的所有数据实体进行操作的全部权限。与此同时,为每一位系统操作人员分别创建了一个“应用系统帐号”,实际上只数据库中创建的的名为 USERS 用户表里的一条记录。这样,每次应用程序在客户端执行时,
7、首先会以其真正数据库帐号登录数据库,然后执行自行编写的登录程序,与 USERS 表结合,实现就用系统登录。 这种安全体系使得应用系统成为数据库的代理用户,而应用系统的所有操作人员(包括系统管理员)则是数据库的间接用户;换言之,应用系统除了完成其应用逻辑之外,还将系统用户和数据库彻底隔离开来,成为数据库的一道坚固的“防火墙” 由于在这种安全体系中,真正的数据库帐号泄露及扩散的可能性几乎为零,所有的用户必须通过应用系统这一“单点” 访问数据库,所以可以得出结论只要应用程序是安全、可靠的,则整个系统是安全可靠的。 2) 增强的用户授权机制 由于在这种安全体系中,应用系统成为隔离用户和数据库的防火墙,
8、其本身就必须具务相当的安全特性。尤其是用户授权管理机制,其严密将直接影响整个系统的安全。 基于此,从功能出发将整个系统细分为若干个可分配的最小权限单元,这些权限具体表现在对数据库中所涉及的表、视图的数据操作(DML:插入 修改 删除、查询等)的划分上。然后再运用角色或工作组的概念,结合各种系统使用人员的工作性质,为系统创建了 4 类基本等级:系统管理员,高级操作员,一般操作员及简单操作员,并相应地为每个等级赋予了不同的权限,以此来简化权限管理工作。此外,为了增加系统安全管理的灵活性,授权管理模块还可以对属于某一等能用户的权限作进一步限制,达到所有权限均可任意组合的效果。 同时,为了进一步提高系
9、统管理员的工作效率,系统为系统权限,用户及每种等级所对应的默认权限组合都建立了数据字典,以便在不同的应用环境下,管理员都能方便地增加等,或改变某种等难的默认权限,此外,为了能暂时封锁某一帐号的使用,安全系统还提供了帐号冻结及解冻的功能。能过这种方式,在统一管理之下,又具有相录的灵活性,有助于系统管理员更为方便,更为严密地控制整个系统的安全。 3) 智能型日志 日志系统具有综合性数据记录功能 和自动分类检索能力。在该系统中,日志将记录自某用户登录时起,到其退出系统时止,这所执行的所有操作,包括登录失败操作,对数据库的操作及系统功能的使用。日志所记录的内容有执行某操作的用户保执行操作的机器 IP地
10、址 操作类型 操作对象及操作执行时间等,以备日后审计核查之用 在这个系统中,不仅可以分类检索日志内容,系统还能根据已记录的日志内容,通过智能型揄,自动找出可能存在的不安全因素,并实时触发相应的警告,信息以及时通知系统管理员及用户。 以下例举几个智能性检查。 潜在非法攻击检查 对于那些企图登录系统的黑客,在其三次登录指令性后,系统便会自行关闭。由于使用了智能型日志系统,系统管理员便会及时得知有非法用户攻击,尤其是针对同一帐号的攻击,在若干次尝试指失败以后,系统将会自动冻结该帐号。在与帐号持有人取得联系后,管理员便可以根据日志文件的具体内容,如攻击点的确切位置、攻击时间等,采取相应措施,如更改帐号
11、口令或封锁工作站,确保系统的安全性。 单帐号多用户检查 在同一时刻中,若有以同一帐号登录系统的用户出现,则说明某一帐号可能已被泄露,这在一定程度上将对系统安全构成威胁。为此系统将自动监视,统计这种情况度及时通知系统管理员,以杜绝帐号扩散的可能,防患于未然。 非工作时间操作检查 对于 8 小时工作时间之外的任何操作或是被管理定义成非工作时所执行的任何操作,智能型日志也会视之为可疑现象而警告系统管理员 4) 完善的备份及恢复机制 日志能记录任何非法操作,然而要真正使系统从灾难中恢复出来,还需要一套完善的备份方案及恢复机制 为了防止存储设备的异常损坏,本系统中采用了可热插拔的 SCSI 硬盘所组成的
12、磁盘容错阵列,以 RAID5 的方式进行系统的实时热备份。 为了防止人为的失误或破坏,本系统中建立了强大的数据库触发器以备份重要数据的删除操作,甚至更新任务。保证在任何情况上,重要数据均能最大程度地有效恢复。具体而言,对于删除操作,作者将被操作的记录全部存贮在备份库中。而对于更新操作,考虑到信息量过于庞大,仅仅备份了所执行的 SQL 语句。这样,既能查看到被的内容,又能相当程度地减小备份库存贮容量。 而在需要跟踪追溯数据丢失或破坏事件的全部信息时,则将系统日志与备份数据有机地结合在一起真正实现系统安全性。 四、广域网络的安全 由于广域网采用公网来进行数据传输,信息在广域网上传输时被截取和利用就
13、比局域网要大得多。本系统中涉及到无线网络部分和远程访问部分,因此,必须采取必要的手段,使得在广域网上的发送和接收信息时能够保证:除了发送方和接收方外,其他人是无法知悉的(隐私性) 传输过程中不被篡改(真实性) 发送方能确知接收方不是假冒的(非伪装性) 发送方不能否认自己的发送行为(不可抵赖性) 为达到以上目的,我们采用了以下措施: 1、加密技术的运用 加密技术的基本思想是不依赖于网络中数据通道的安全性来实现网络系统的安全,而是通过对网络数据的加密来保障网络的安全可靠性。数据加密技术可以分为三类,即对称型加密、不对称型加密和不可逆加密。 本系统中选用了不可逆加密,因为其不存在密钥保管和分发问题,
14、且由于本系统中需采取这种措施的数据量有限,所以这种加密方式是适用于系统的网络体系结构。 五、针对外网采取安全措施 这里所指的外网,是指本系统中与 Internet 的互联与外部一些企业用户部分。因为采用的是基于 TCP/IP 协议族,Internet 协议族自身的开放性极大地方便了各种计算机的组网和互联,并直接推动了网络技术的迅猛发展。但是由于在早期网络协议设计上对安全性的忽视,至使 Internet 在使用和管理上的无政府状态,逐渐使 Internet 自身的安全受到威胁。 外网安全的威胁主要表现在:非授权访问 、冒充合法用户、破坏数据完整性、干扰系统正常运行、利用网络传播病毒、线路窃听等。
15、针对上述情况,本系统采取了防火墙技术、入侵检测技术和网络防病毒技术相结合的方法。 6、针对物流信息系统源代码涉密机制1.Java 密码学结构设计遵循两个原则:(1)算法的独立性和可靠性。(2)实现的独立性和相互作用性。算法的独立性是通过定义密码服务类来获得。用户只需了解密码算法的概念,而不用去关心如何实现这些概念。实现的独立性和相互作用性通过密码服务提供器来实现。密码服务提供器是实现一个或多个密码服务的一个或多个程序包。软件开发商根据一定接口,将各种算法实现后,打包成一个提供器,用户可以安装不同的提供器。安装和配置提供器,可将包含提供器的 ZIP 和 JAR 文件放在 CLASSPATH 下,
16、再编辑 Java 安全属性文件来设置定义一个提供器。Java 运行环境 Sun 版本时, 提供一个缺省的提供器 Sun。下面介绍 DES 算法及如何利用 DES 算法加密和解密类文件的步骤。DES 算法简介DES(Data Encryption Standard)是发明最早的最广泛使用的分组对称加密算法。DES 算法的入口参数有三个:Key、Data、Mode。其中 Key 为 8 个字节共 64 位,是 DES 算法的工作密钥;Data 也为 8 个字节 64 位,是要被加密或被解密的数据;Mode 为 DES 的工作方式,有两种:加密或解密。DES 算法工作流程如下:若 Mode 为加密模
17、式,则利用 Key 对数据 Data 进行加密, 生成 Data 的密码形式(64 位)作为 DES 的输出结果;如 Mode 为解密模式,则利用 Key 对密码形式的数据 Data 进行解密,还原为 Data 的明码形式(64 位)作为 DES 的输出结果。在通信网络的两端,双方约定一致的 Key,在通信的源点用 Key 对核心数据进行 DES 加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的 Key 对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据在公共通信网中传输的安全性和可靠性。也可以通过定期在通信网络的源端和目的端同
18、时改用新的 Key,便能更进一步提高数据的保密性。利用 DES 算法加密的步骤(1)生成一个安全密钥。在加密或解密任何数据之前需要有一个密钥。密钥是随同被加密的应用程序一起发布的一段数据,密钥代码如下所示。【生成一个密钥代码】view plaincopy to clipboardprint?/ 生成一个可信任的随机数源 SecureRandom sr = new SecureRandom(); / 为我们选择的 DES 算法生成一个 KeyGenerator 对象 KeyGenerator kg = KeyGenerator.getInstance (“DES“ ); Kg.init (sr)
19、; / 生成密钥 Secret Key key = kg.generateKey(); / 将密钥数据保存为文件供以后使用,其中 key Filename 为保存的文件名 Util.writeFile (key Filename, key.getEncoded () ); / 生成一个可信任的随机数源SecureRandom sr = new SecureRandom();/ 为我们选择的 DES 算法生成一个 KeyGenerator 对象KeyGenerator kg = KeyGenerator.getInstance (“DES“ );Kg.init (sr);/ 生成密钥Secret
20、 Key key = kg.generateKey();/ 将密钥数据保存为文件供以后使用,其中 key Filename 为保存的文件名Util.writeFile (key Filename, key.getEncoded () ); (2)加密数据。得到密钥之后,接下来就可以用它加密数据。如下所示。【用密钥加密原始数据】view plaincopy to clipboardprint?/ 产生一个可信任的随机数源 SecureRandom sr = new SecureRandom(); /从密钥文件 key Filename 中得到密钥数据 Byte rawKeyData = Util
21、.readFile (key Filename); / 从原始密钥数据创建 DESKeySpec 对象 DESKeySpec dks = new DESKeySpec (rawKeyData); / 创建一个密钥工厂,然后用它把 DESKeySpec 转换成 Secret Key 对象 SecretKeyFactory key Factory = SecretKeyFactory.getInstance(“DES“ ); Secret Key key = keyFactory.generateSecret( dks ); / Cipher 对象实际完成加密操作 Cipher cipher =
22、Cipher.getInstance( “DES“ ); / 用密钥初始化 Cipher 对象 cipher.init( Cipher.ENCRYPT_MODE, key, sr ); / 通过读类文件获取需要加密的数据 Byte data = Util.readFile (filename); / 执行加密操作 Byte encryptedClassData = cipher.doFinal(data ); / 保存加密后的文件,覆盖原有的类文件。 Util.writeFile( filename, encryptedClassData ); / 产生一个可信任的随机数源SecureRand
23、om sr = new SecureRandom();/从密钥文件 key Filename 中得到密钥数据Byte rawKeyData = Util.readFile (key Filename);/ 从原始密钥数据创建 DESKeySpec 对象DESKeySpec dks = new DESKeySpec (rawKeyData);/ 创建一个密钥工厂,然后用它把 DESKeySpec 转换成 Secret Key 对象SecretKeyFactory key Factory = SecretKeyFactory.getInstance(“DES“ );Secret Key key =
24、 keyFactory.generateSecret( dks );/ Cipher 对象实际完成加密操作Cipher cipher = Cipher.getInstance( “DES“ );/ 用密钥初始化 Cipher 对象cipher.init( Cipher.ENCRYPT_MODE, key, sr );/ 通过读类文件获取需要加密的数据Byte data = Util.readFile (filename);/ 执行加密操作Byte encryptedClassData = cipher.doFinal(data );/ 保存加密后的文件,覆盖原有的类文件。 Util.write
25、File( filename, encryptedClassData ); (3)解密数据。运行经过加密的程序时,ClassLoader 分析并解密类文件。操作步骤如下所示。 【用密钥解密数据】view plaincopy to clipboardprint?/ 生成一个可信任的随机数源 SecureRandom sr = new SecureRandom(); / 从密钥文件中获取原始密钥数据 Byte rawKeyData = Util.readFile( keyFilename ); / 创建一个 DESKeySpec 对象 DESKeySpec dks = new DESKeySpec
26、 (rawKeyData); / 创建一个密钥工厂,然后用它把 DESKeySpec 对象转换成 Secret Key 对象 SecretKeyFactory key Factory = SecretKeyFactory.getInstance( “DES“ ); SecretKey key = keyFactory.generateSecret( dks ); / Cipher 对象实际完成解密操作 Cipher cipher = Cipher.getInstance( “DES“ ); / 用密钥初始化 Cipher 对象 Cipher.init( Cipher.DECRYPT_MODE,
27、 key, sr ); / 获得经过加密的数据 Byte encrypted Data = Util.readFile (Filename); /执行解密操作 Byte decryptedData = cipher.doFinal( encryptedData ); / 然后将解密后的数据转化成原来的类文件。 / 生成一个可信任的随机数源SecureRandom sr = new SecureRandom();/ 从密钥文件中获取原始密钥数据Byte rawKeyData = Util.readFile( keyFilename );/ 创建一个 DESKeySpec 对象DESKeySpec
28、 dks = new DESKeySpec (rawKeyData);/ 创建一个密钥工厂,然后用它把 DESKeySpec 对象转换成 Secret Key 对象 SecretKeyFactory key Factory = SecretKeyFactory.getInstance( “DES“ );SecretKey key = keyFactory.generateSecret( dks );/ Cipher 对象实际完成解密操作Cipher cipher = Cipher.getInstance( “DES“ );/ 用密钥初始化 Cipher 对象Cipher.init( Ciphe
29、r.DECRYPT_MODE, key, sr );/ 获得经过加密的数据Byte encrypted Data = Util.readFile (Filename);/执行解密操作Byte decryptedData = cipher.doFinal( encryptedData );/ 然后将解密后的数据转化成原来的类文件。 2.其总经办经由一个加密的 U 盘进行拷贝。将其进行档案密封处理。将上述代码与自定义的类装载器结合就可以做到边解密边运行,从而起到保护源代码的作用。结束语加密/解密是数据传输中保证数据安全性和完整性的常用方法,Java 语言因其平台无关性,使用 DES 算法加密 Java 源码在一定程度上能保护软件的产权。 本文由中国物流有限公司四川分公司保留最终解释权。信息部2016.5.4