目前中国国内“金税工程”经过几年的推广实施,在全国范围内己取得了巨大的经济效益和社会效益,在金税工程中,最重要的是对于开票系统数据的保护,为了防止开票系统受病毒感染或被人为地破坏,绝大部分的单位都被要求专机专用,从而来确保系统的安全和稳定。
但随着“金税工程”的深入推广,也暴露出了一些急待解决的问题∶首先,由于国税局对于企业的防伪税控开票系统有“专机专用”的要求,致使企业花费一万多元购买的防伪税控设备及计算机只能用于开具增值税发票巨大的资源浪费;其次,随着电子报税、出口退税等科技手段在企业中的应用以及企业财务管理的电子化,都必须依赖计算机处理,这必然会造成企业还需再投资一台电脑给财务人员来处理这方面的工作,这对企业来说,是一种重复的投资;最后,防伪税控的系统和数据,财务软件和数据以及电子报税系统和数据等都属于企业的重要资料,如何保证其安全性,使其不会因为财务人员的误操作、病毒等因素造成系统的崩溃,甚至重要数据资料的丢失,而影响企业的正常工作。
财税安全卡的硬件实现
财税安全卡的工作过程和工作原理是:利用PCI总线的扩展ROM机制,在安全卡上嵌入扩展程序,通过CH365的本地8位总线,接管并扩展BIOS的INT13H中断,实时监控系统的读写操作,根据设置进行过滤,确保读写操作的安全性,实现硬盘隔离和一机多用。相关硬盘系统引导分区等信息可以通过CH365的两线串行主机接口保存在EEPROM上,达到动态分隔硬盘空间的目的,将一个硬盘分成相互隔离互不干扰的多个硬盘空间。
PCI总线协议比较复杂,用户可以根据具体实际需求选择相应的开发方式。一般,PCI总线开发采用两种方式:一是采用CPLD来设计控制接口。它的最大好处是比较灵活,用户可以根据自己的需要开发出适合于特定功能的芯片,而不必实现PCI的全部功能。现在有许多生产可编程逻辑器件的厂商,如Xilinx的LogiCore和Altera的AMPP都提供经过严格测试的PCI接口功能模块,用户只要进行组合设计即可。由于PCI总线协议复杂,设计PCI控制接口难度较大,对于产品不大又有时限的工程项目来说,成本巨大。
二是采用通用PCI接口芯片,例如南京沁恒公司的CH365、AMCC公司的AMCCS5920和AMCCS5933,PLX公司的PLX9054和PLX9080等。通过专用芯片可以实现完整的PCI主控模块和目标模块的功能,将复杂的PCI总线接口转换为相对简单的用户接口,用户只要设计转换后的总线接口即可,它能实现PCI规范所要求的所有硬件接口信号和配置空间寄存器,专用接口芯片具有较低的成本和通用性,能够有效降低接口设计的难度,缩短开发时间,并能获得较好的数据传输性能。
第二种方法适合于小规模的情况,能够有效缩短开发时间以及成本投入,因此在设计财税安全卡上选择CH365 PCI接口芯片。CH365是一个连接PCI总线的通用接口芯片,支持I/O端口映射、存储器映射、扩展ROM以及中断。实现将基于32位PCI总线的从设备接口转换为主动并行接口:8位数据、16位地址、I/O读和写、存储器读和写。支持低电平有效的本地中断请求,支持中断共享。支持长度达240字节的I/O端口。支持本地硬件定址功能,自由选择I/O地址,并在指定地址实现I/O端口。基于CH365的财税安全卡硬件电路图如图1。
在本设计中,所使用的存储器是华邦公司的W27C512,64K容量。存储器容量根据安全卡扩展程序的大小选择更大的存储器,如128K等。EEPROM是Atmel公司的AT24C02,支持写保护功能,能够有效防止信息被篡改。图1的财税安全卡的硬件电路核心器件是PCI接口芯片CH365、W27C512和AT24C02,CH365的部分引脚连线直接与金手指(电路板和插槽之间的连接点)相连。
CH365通过MEM_RD与ROM芯片U2(27C512)连接。CH365支持EPROM和闪存,容量为32KB或者64KB,如果将SYS_EX用于A16地址线,则最大容量可达128KB。一般情况下CH365直接支持32KB容量的扩展ROM(即27C256芯片的容量),但可以在扩展ROM的程序中通过控制A15地址线支持64KB容量的ROM芯片。可选的下拉电阻R1用于CH365的工作模式设定,图中的数据线D0被连接了下拉电阻,所以系统复位后,地址线A15为低电平,从而选择U2的低32KB(偏移地址为0000H~7FFFH),而在需要读取U2的高32KB时(偏移地址为8000H~0FFFFH),可以通过写芯片控制寄存器的位0重新设定A15地址线来访问ROM的高字节。
另外,PCI扩展ROM的内容通常被BIOS复制到RAM内存中,所以需要设置CH365的扩展ROM基址以重新映射U2到存储器空间。
CH365通过SYS_EX与EPPROM芯片U3(型号是AT24C02)连接,CH365的SCL信号线可以选用SYS_EX或者A15,系统复位后的默认选择是A15,通常在A15用作地址线时选用SYS_EX,否则选用A15。因为SDA信号线同时是数据线D7,为了防止在SCL高电平期间由于SDA变化而产生不必要的误操作,通常借助于工作模式设定使SCL信号线(SYS_EX或A15)在系统复位后保持低电平。CH365的两线串行接口使用7位设备地址,可以同时连接多个设备。设备地址和命令寄存器的位7至位1为7位设备地址位,用以选择从设备;位0为命令位,置0代表写操作,置1代表读操作。本设计中连接一个设备,通过数据线D7保存相关的硬盘引导分区的信息,同时通过“LOCK”信号可以对设备进行写保护,防止信息篡改等。CH365的读写时序如图2。
财税安全卡的扩展程序设计
PC机中的扩展ROM相当于一个电子盘,如果在其中写入引导程序和应用程序,即使计算机没有硬盘和操作系统,扩展ROM中的引导程序和应用程序也能够控制计算机实现某些特定的功能。例如,无硬盘PC机用于工业控制,控制外部设备及作业流程等。
财税安全卡就是应用到PCI总线的扩展ROM,通过特定的扩展引导应用程序,在计算机启动进入硬盘时有效地接管和控制硬盘引导,以达到动态分隔硬盘空间将一个硬盘分成相互隔离,互不干扰的多个硬盘空间,可以根据用户需求引导进入相应的系统和使用相应的空间。
扩展引导应用程序主要包括PC引导控制权接管模块、动态隔离硬盘空间模块,多系统引导模块(其中包含I2C读写模块)。通过丰富扩展引导引用程序,可以实现基于BIOS级的系统分区备份、系统数据备份、系统拷贝等功能。
1. PC引导控制权接管的实现
在PC的BIOS自检中,硬件设备检测正常通过后,就开始把系统引导控制权即根据用户指定的启动顺序递交给软盘、硬盘或光驱启动。以从C盘启动为例,系统BIOS将读取并执行硬盘上的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的分区引导记录,而分区引导记录将负责读取并执行IO.SYS,这是DOS和Windows9x最基本的系统文件。
扩展ROM程序首次获得CPU控制权,修改系统自举中断INT19以便在引导操作系统前被初始化,重新编写新INT19中断服务程序,使用INT7B中断向量作为返回地址。
BOOT_ROM_INIT: PUSH DX;保存寄存器
PUSH BX
MOV DH, 80H;位7置1则自动检测主板的BIOS
MOV DL, 0FFH;指定初始化方式,为0FFH则自动检测
MOV BX, OFFSET ROM_INT19;指定新INT19程序的偏移地址_ROM_INT19,
CALL INIT_ROM;ROM初始化程序,返回DL为实际使用的初始化方式
POP BX
POP DX
RETF;ROM初始化完成后返回,必须是远程返回
2. 动态隔离硬盘空间的实现
可以利用硬盘特性“AddressOffsetMode”和“SetMax”来有效地缩小硬盘空间,使得动态隔离硬盘空间,其中通过获取硬盘I/O端口的基址来设置硬盘最大逻辑块寻址(LBA)地址。传统的缩小硬盘空间采用的是隐藏分区,通过修改系统分区表的系统标志位达到隐藏分区效果,此方法安全性低,不能有效地隔离硬盘,在财税安全方面达不到安全性能要求。
3. 多系统引导模块的实现
多系统引导根据用户选择启动相应的系统,去选择相应的引导程序,这里有别于计算机多重引导启动(逻辑隔离)原有的系统引导程序,它是简单的单分区单系统启动模式,即固定读入硬盘活动分区引导记录以实现对系统的引导,而活动分区是相对固定的。重写的系统引导程序实现了多分区多系统启动模式,可以将硬盘任一分区视作活动分区,读入该分区引导记录以引导系统,本设计中采用的是通过加载多重引导信息扇区,检验数据的有效性,在加载过程中动态设置硬盘分区信息。