目前中國(guó)國(guó)內(nèi)“金稅工程”經(jīng)過(guò)幾年的推廣實(shí)施,在全國(guó)范圍內(nèi)己取得了巨大的經(jīng)濟(jì)效益和社會(huì)效益,在金稅工程中,最重要的是對(duì)于開票系統(tǒng)數(shù)據(jù)的保護(hù),為了防止開票系統(tǒng)受病毒感染或被人為地破壞,絕大部分的單位都被要求專機(jī)專用,從而來(lái)確保系統(tǒng)的安全和穩(wěn)定。
但隨著“金稅工程”的深入推廣,也暴露出了一些急待解決的問(wèn)題∶首先,由于國(guó)稅局對(duì)于企業(yè)的防偽稅控開票系統(tǒng)有“專機(jī)專用”的要求,致使企業(yè)花費(fèi)一萬(wàn)多元購(gòu)買的防偽稅控設(shè)備及計(jì)算機(jī)只能用于開具增值稅發(fā)票巨大的資源浪費(fèi);其次,隨著電子報(bào)稅、出口退稅等科技手段在企業(yè)中的應(yīng)用以及企業(yè)財(cái)務(wù)管理的電子化,都必須依賴計(jì)算機(jī)處理,這必然會(huì)造成企業(yè)還需再投資一臺(tái)電腦給財(cái)務(wù)人員來(lái)處理這方面的工作,這對(duì)企業(yè)來(lái)說(shuō),是一種重復(fù)的投資;最后,防偽稅控的系統(tǒng)和數(shù)據(jù),財(cái)務(wù)軟件和數(shù)據(jù)以及電子報(bào)稅系統(tǒng)和數(shù)據(jù)等都屬于企業(yè)的重要資料,如何保證其安全性,使其不會(huì)因?yàn)樨?cái)務(wù)人員的誤操作、病毒等因素造成系統(tǒng)的崩潰,甚至重要數(shù)據(jù)資料的丟失,而影響企業(yè)的正常工作。
財(cái)稅安全卡的硬件實(shí)現(xiàn)
財(cái)稅安全卡的工作過(guò)程和工作原理是:利用PCI總線的擴(kuò)展ROM機(jī)制,在安全卡上嵌入擴(kuò)展程序,通過(guò)CH365的本地8位總線,接管并擴(kuò)展BIOS的INT13H中斷,實(shí)時(shí)監(jiān)控系統(tǒng)的讀寫操作,根據(jù)設(shè)置進(jìn)行過(guò)濾,確保讀寫操作的安全性,實(shí)現(xiàn)硬盤隔離和一機(jī)多用。相關(guān)硬盤系統(tǒng)引導(dǎo)分區(qū)等信息可以通過(guò)CH365的兩線串行主機(jī)接口保存在EEPROM上,達(dá)到動(dòng)態(tài)分隔硬盤空間的目的,將一個(gè)硬盤分成相互隔離互不干擾的多個(gè)硬盤空間。
圖1:財(cái)稅安全卡硬件電路圖。 |
PCI總線協(xié)議比較復(fù)雜,用戶可以根據(jù)具體實(shí)際需求選擇相應(yīng)的開發(fā)方式。一般,PCI總線開發(fā)采用兩種方式:一是采用CPLD來(lái)設(shè)計(jì)控制接口。它的最大好處是比較靈活,用戶可以根據(jù)自己的需要開發(fā)出適合于特定功能的芯片,而不必實(shí)現(xiàn)PCI的全部功能?,F(xiàn)在有許多生產(chǎn)可編程邏輯器件的廠商,如Xilinx的LogiCore和Altera的AMPP都提供經(jīng)過(guò)嚴(yán)格測(cè)試的PCI接口功能模塊,用戶只要進(jìn)行組合設(shè)計(jì)即可。由于PCI總線協(xié)議復(fù)雜,設(shè)計(jì)PCI控制接口難度較大,對(duì)于產(chǎn)品不大又有時(shí)限的工程項(xiàng)目來(lái)說(shuō),成本巨大。
二是采用通用PCI接口芯片,例如南京沁恒公司的CH365、AMCC公司的AMCCS5920和AMCCS5933,PLX公司的PLX9054和PLX9080等。通過(guò)專用芯片可以實(shí)現(xiàn)完整的PCI主控模塊和目標(biāo)模塊的功能,將復(fù)雜的PCI總線接口轉(zhuǎn)換為相對(duì)簡(jiǎn)單的用戶接口,用戶只要設(shè)計(jì)轉(zhuǎn)換后的總線接口即可,它能實(shí)現(xiàn)PCI規(guī)范所要求的所有硬件接口信號(hào)和配置空間寄存器,專用接口芯片具有較低的成本和通用性,能夠有效降低接口設(shè)計(jì)的難度,縮短開發(fā)時(shí)間,并能獲得較好的數(shù)據(jù)傳輸性能。
第二種方法適合于小規(guī)模的情況,能夠有效縮短開發(fā)時(shí)間以及成本投入,因此在設(shè)計(jì)財(cái)稅安全卡上選擇CH365 PCI接口芯片。CH365是一個(gè)連接PCI總線的通用接口芯片,支持I/O端口映射、存儲(chǔ)器映射、擴(kuò)展ROM以及中斷。實(shí)現(xiàn)將基于32位PCI總線的從設(shè)備接口轉(zhuǎn)換為主動(dòng)并行接口:8位數(shù)據(jù)、16位地址、I/O讀和寫、存儲(chǔ)器讀和寫。支持低電平有效的本地中斷請(qǐng)求,支持中斷共享。支持長(zhǎng)度達(dá)240字節(jié)的I/O端口。支持本地硬件定址功能,自由選擇I/O地址,并在指定地址實(shí)現(xiàn)I/O端口。基于CH365的財(cái)稅安全卡硬件電路圖如圖1。
在本設(shè)計(jì)中,所使用的存儲(chǔ)器是華邦公司的W27C512,64K容量。存儲(chǔ)器容量根據(jù)安全卡擴(kuò)展程序的大小選擇更大的存儲(chǔ)器,如128K等。EEPROM是Atmel公司的AT24C02,支持寫保護(hù)功能,能夠有效防止信息被篡改。圖1的財(cái)稅安全卡的硬件電路核心器件是PCI接口芯片CH365、W27C512和AT24C02,CH365的部分引腳連線直接與金手指(電路板和插槽之間的連接點(diǎn))相連。
CH365通過(guò)MEM_RD與ROM芯片U2(27C512)連接。CH365支持EPROM和閃存,容量為32KB或者64KB,如果將SYS_EX用于A16地址線,則最大容量可達(dá)128KB。一般情況下CH365直接支持32KB容量的擴(kuò)展ROM(即27C256芯片的容量),但可以在擴(kuò)展ROM的程序中通過(guò)控制A15地址線支持64KB容量的ROM芯片??蛇x的下拉電阻R1用于CH365的工作模式設(shè)定,圖中的數(shù)據(jù)線D0被連接了下拉電阻,所以系統(tǒng)復(fù)位后,地址線A15為低電平,從而選擇U2的低32KB(偏移地址為0000H~7FFFH),而在需要讀取U2的高32KB時(shí)(偏移地址為8000H~0FFFFH),可以通過(guò)寫芯片控制寄存器的位0重新設(shè)定A15地址線來(lái)訪問(wèn)ROM的高字節(jié)。
圖2:CH365的讀寫時(shí)序。 |
另外,PCI擴(kuò)展ROM的內(nèi)容通常被BIOS復(fù)制到RAM內(nèi)存中,所以需要設(shè)置CH365的擴(kuò)展ROM基址以重新映射U2到存儲(chǔ)器空間。
CH365通過(guò)SYS_EX與EPPROM芯片U3(型號(hào)是AT24C02)連接,CH365的SCL信號(hào)線可以選用SYS_EX或者A15,系統(tǒng)復(fù)位后的默認(rèn)選擇是A15,通常在A15用作地址線時(shí)選用SYS_EX,否則選用A15。因?yàn)镾DA信號(hào)線同時(shí)是數(shù)據(jù)線D7,為了防止在SCL高電平期間由于SDA變化而產(chǎn)生不必要的誤操作,通常借助于工作模式設(shè)定使SCL信號(hào)線(SYS_EX或A15)在系統(tǒng)復(fù)位后保持低電平。CH365的兩線串行接口使用7位設(shè)備地址,可以同時(shí)連接多個(gè)設(shè)備。設(shè)備地址和命令寄存器的位7至位1為7位設(shè)備地址位,用以選擇從設(shè)備;位0為命令位,置0代表寫操作,置1代表讀操作。本設(shè)計(jì)中連接一個(gè)設(shè)備,通過(guò)數(shù)據(jù)線D7保存相關(guān)的硬盤引導(dǎo)分區(qū)的信息,同時(shí)通過(guò)“LOCK”信號(hào)可以對(duì)設(shè)備進(jìn)行寫保護(hù),防止信息篡改等。CH365的讀寫時(shí)序如圖2。
財(cái)稅安全卡的擴(kuò)展程序設(shè)計(jì)
PC機(jī)中的擴(kuò)展ROM相當(dāng)于一個(gè)電子盤,如果在其中寫入引導(dǎo)程序和應(yīng)用程序,即使計(jì)算機(jī)沒(méi)有硬盤和操作系統(tǒng),擴(kuò)展ROM中的引導(dǎo)程序和應(yīng)用程序也能夠控制計(jì)算機(jī)實(shí)現(xiàn)某些特定的功能。例如,無(wú)硬盤PC機(jī)用于工業(yè)控制,控制外部設(shè)備及作業(yè)流程等。
財(cái)稅安全卡就是應(yīng)用到PCI總線的擴(kuò)展ROM,通過(guò)特定的擴(kuò)展引導(dǎo)應(yīng)用程序,在計(jì)算機(jī)啟動(dòng)進(jìn)入硬盤時(shí)有效地接管和控制硬盤引導(dǎo),以達(dá)到動(dòng)態(tài)分隔硬盤空間將一個(gè)硬盤分成相互隔離,互不干擾的多個(gè)硬盤空間,可以根據(jù)用戶需求引導(dǎo)進(jìn)入相應(yīng)的系統(tǒng)和使用相應(yīng)的空間。
擴(kuò)展引導(dǎo)應(yīng)用程序主要包括PC引導(dǎo)控制權(quán)接管模塊、動(dòng)態(tài)隔離硬盤空間模塊,多系統(tǒng)引導(dǎo)模塊(其中包含I2C讀寫模塊)。通過(guò)豐富擴(kuò)展引導(dǎo)引用程序,可以實(shí)現(xiàn)基于BIOS級(jí)的系統(tǒng)分區(qū)備份、系統(tǒng)數(shù)據(jù)備份、系統(tǒng)拷貝等功能。
1. PC引導(dǎo)控制權(quán)接管的實(shí)現(xiàn)
在PC的BIOS自檢中,硬件設(shè)備檢測(cè)正常通過(guò)后,就開始把系統(tǒng)引導(dǎo)控制權(quán)即根據(jù)用戶指定的啟動(dòng)順序遞交給軟盤、硬盤或光驅(qū)啟動(dòng)。以從C盤啟動(dòng)為例,系統(tǒng)BIOS將讀取并執(zhí)行硬盤上的主引導(dǎo)記錄,主引導(dǎo)記錄接著從分區(qū)表中找到第一個(gè)活動(dòng)分區(qū),然后讀取并執(zhí)行這個(gè)活動(dòng)分區(qū)的分區(qū)引導(dǎo)記錄,而分區(qū)引導(dǎo)記錄將負(fù)責(zé)讀取并執(zhí)行IO.SYS,這是DOS和Windows9x最基本的系統(tǒng)文件。
擴(kuò)展ROM程序首次獲得CPU控制權(quán),修改系統(tǒng)自舉中斷INT19以便在引導(dǎo)操作系統(tǒng)前被初始化,重新編寫新INT19中斷服務(wù)程序,使用INT7B中斷向量作為返回地址。
BOOT_ROM_INIT: PUSH DX;保存寄存器
PUSH BX
MOV DH, 80H;位7置1則自動(dòng)檢測(cè)主板的BIOS
MOV DL, 0FFH;指定初始化方式,為0FFH則自動(dòng)檢測(cè)
MOV BX, OFFSET ROM_INT19;指定新INT19程序的偏移地址_ROM_INT19,
CALL INIT_ROM;ROM初始化程序,返回DL為實(shí)際使用的初始化方式
POP BX
POP DX
RETF;ROM初始化完成后返回,必須是遠(yuǎn)程返回
2. 動(dòng)態(tài)隔離硬盤空間的實(shí)現(xiàn)
可以利用硬盤特性“AddressOffsetMode”和“SetMax”來(lái)有效地縮小硬盤空間,使得動(dòng)態(tài)隔離硬盤空間,其中通過(guò)獲取硬盤I/O端口的基址來(lái)設(shè)置硬盤最大邏輯塊尋址(LBA)地址。傳統(tǒng)的縮小硬盤空間采用的是隱藏分區(qū),通過(guò)修改系統(tǒng)分區(qū)表的系統(tǒng)標(biāo)志位達(dá)到隱藏分區(qū)效果,此方法安全性低,不能有效地隔離硬盤,在財(cái)稅安全方面達(dá)不到安全性能要求。
3. 多系統(tǒng)引導(dǎo)模塊的實(shí)現(xiàn)
多系統(tǒng)引導(dǎo)根據(jù)用戶選擇啟動(dòng)相應(yīng)的系統(tǒng),去選擇相應(yīng)的引導(dǎo)程序,這里有別于計(jì)算機(jī)多重引導(dǎo)啟動(dòng)(邏輯隔離)原有的系統(tǒng)引導(dǎo)程序,它是簡(jiǎn)單的單分區(qū)單系統(tǒng)啟動(dòng)模式,即固定讀入硬盤活動(dòng)分區(qū)引導(dǎo)記錄以實(shí)現(xiàn)對(duì)系統(tǒng)的引導(dǎo),而活動(dòng)分區(qū)是相對(duì)固定的。重寫的系統(tǒng)引導(dǎo)程序?qū)崿F(xiàn)了多分區(qū)多系統(tǒng)啟動(dòng)模式,可以將硬盤任一分區(qū)視作活動(dòng)分區(qū),讀入該分區(qū)引導(dǎo)記錄以引導(dǎo)系統(tǒng),本設(shè)計(jì)中采用的是通過(guò)加載多重引導(dǎo)信息扇區(qū),檢驗(yàn)數(shù)據(jù)的有效性,在加載過(guò)程中動(dòng)態(tài)設(shè)置硬盤分區(qū)信息。