李 鋒 李 明
(東華大學計算機科學與技術學院 上海 201620)
?
基于ARM的安全打印機的設計與實現
李 鋒 李 明
(東華大學計算機科學與技術學院 上海 201620)
隨著信息時代的到來,信息安全已經成為全球關注的熱點問題。打印作為最常用的信息共享方式之一,在給人們工作生活提供極大便利的同時,由于打印帶來的信息泄密也給企事業單位造成了不可估量的損失。針對打印安全問題,設計的安全打印機采用了ARM Cortex-A8處理器S5PV210作為硬件平臺,Linux作為軟件平臺,實現了二維碼生成,二維碼水印的嵌入,打印審計,打印控制以及打印記錄的功能。系統通過向涉密文件中嵌入二維碼水印信息可以做到打印文檔的后期追蹤和回收,實現了整個打印流程的閉環處理。
信息安全 安全打印 S5PV210 二維碼 水印 追蹤
目前在國外打印安全問題已經引起了極大的關注,特別是在大型的企業單位和政府機構中,部署了相應的安全打印方案來避免因打印帶來的機密信息泄露[1]。然而在國內的政府機關和企事業單位中,除了部分涉密單位,其中大部分都沒有對打印安全給予足夠的重視,打印環境存在眾多的漏洞。打印泄密不僅可能會對企業帶來巨大的經濟損失,還是導致政府機關信息泄露的重要渠道,給政府信息安全帶來潛在危害。
為滿足企事業單位以及政府機構對安全辦公的需求,本文設計并實現了一種安全打印機。它通過讀取RFID卡來確認打印者的身份做到打印前期的授權控制,在打印過程中對即將打印的打印文檔添加相應的二維碼水印作為打印文檔的唯一標示,而在打印結束后將打印信息寫入到數據庫中進行記錄,實現整個打印過程中的閉環處理。一旦發生泄密事件,可以通過提取泄密文檔中的二維碼水印信息,很快就能追溯到責任人。同時,在進行機密打印文檔的回收時,通過掃描回收文檔中的二維碼,即可對服務器數據庫中的已打印記錄進行自動檢索。
安全打印機的系統結構如圖1所示,安全打印機在傳統的打印流程上加入了更多的安全控制環節。首先用戶在發起打印任務前需得到打印授權。在管理制度上保障打印的安全。打印文檔經過加密后發往打印機,打印服務器通過底層的驅動程序發給打印設備進行打印保障通信安全。打印任務發起后,安全打印機會對打印文檔進行處理,根據打印文檔的名字、版本、所有者、文檔修改時間、打印時間、打印人員和打印文檔的頁碼等信息,經過加密編碼處理后,形成二維碼,并以水印的形式嵌入到打印文檔中。完成對打印文檔標示,便于打印物后期處理和安全跟蹤審計。打印機在接受打印內容,完成打印前,必須要通過身份讀取器,對打印者的身份進行認證。打印完成后,此次打印的打印時間,打印內容,打印份數,以及打印用戶等記錄都會被寫入打印服務器端的數據庫中。

圖1 安全打印機系統結構
該系統從管理制度、設備管理、通信安全、打印介質跟蹤多個環節,實現打印的安全管理。并為打印的文檔的回收、銷毀跟蹤,和泄密的追查等方面,做好了技術準備。該系統中打印文檔的標示實現是一個重要環節。
水印技術是實現對文檔標示的常用技術,水印一般有可見水印和不可見水印兩種[2]。不可見水印對文檔標示,隱密性強,不容易被破壞,但是該水印嵌入和識別算法復雜,誤識率高,不適合嵌入式系統中實現;可見水印嵌入容易,但也存在著識別困難,不具備隱秘性,且信息量少,在標示串和水印圖像間難于對應。
二維碼是將字符串以圖形的形式給予表現,其實現和識別算法都成熟簡單,因此二維碼適合作為文檔標示水印。但是由于二維碼不具備加密功能,為實現標示的隱秘性,我們需要先把標示串經過加密編碼后,再把密文形成二維碼。
作為打印出的文檔的唯一標示碼,二維碼中的信息可以精確定位到打印文檔的每一頁。主要包括的信息有:
(1) 打印文檔信息:文件名稱、文檔版本號、頁碼。
(2) 打印時間信息:文檔修訂時間、打印時間。
(3) 打印人員信息:文檔所有人員工號、打印人員工號。
(4) 其他信息:打印機編號、備注。
二維碼原始信息數據封裝格式如圖2所示。

圖2 二維碼源信息數據封裝格式
二維碼信息并不會以明文方式存儲在二維條碼中,而是通過DES進行加密后變為密文,這樣可以保證在有人非法取得二維條碼后也無法直接獲取其中的信息內容。DES加密算法是一種對稱加密算法[3],由IBM研究并公開發表的,它以64位為分組單位對原始數據信息進行加密。加密時采用美國國家安全局設計的8個S-盒(S:Substitution)和P-置換(P:Permutation),并經過16輪的迭代后產生64比特的密文信息。為了對得到的原始信息進行DES加密,首先,原始信息通過utf8編碼轉換后得到編碼后的字節數組,然后由DES加密算法對轉換后的字節數組進行加密。
為了保證打印安全,安全打印機在打印文檔中嵌入二維碼水印來實現打印文檔的跟蹤。二維條碼是用某種特定的幾何圖形按一定規律在平面(二維方向上)分布的黑白相間的圖形記錄數據信息的符號。二維碼與一維碼不同的是它可以在縱向和橫向兩個方位同時表達信息,能夠具有更多的信息含量。二維條碼可以分為矩陣式和堆疊式二維條碼[4,5]。目前世界上主流的二維條碼,有QR碼(快速響應矩陣碼)、PDF417碼、Data Matrix碼、Code 49等。
為不影響打印內容,可見水印是嵌入到打印內容后面的,這樣二維碼水印在掃描識別時,會出現較多的誤碼,為保證二維碼能被較好的識別,系統采用容錯性較高的PDF417二維碼作為二維碼水印方案。
PDF417二維條碼是堆積層結構,由符號字符組成,作為PDF417條碼表示信息的基本單位,它由4個條和空構成,自左到右從條開始,每個條或空包括1-6個模塊,其中4個條和4個空的總模塊數為17。符號結構如圖3所示。

圖3 PDF417結構圖
其中每一層包括:a為左空白區;b為起始符;c為左行指示符號字符;d 為1至30個數據符號字符;c為右行指示符號字符;f 為終止符;g 為右空白區。
PDF417二維條碼具有信息容量大,編碼范圍廣以及譯碼可靠性高等優點。可以容納1850個大寫字母或者2710個數字或1108個字節,它采用了目前世界上最先進的RS錯誤碼控制碼技術,糾錯能力非常強大,這種隱含在符號內的糾錯碼極大地保證了譯碼正確率,并有效提高譯碼速度和可靠性,即使出現二維碼部分信息丟失,也可以譯碼成功,有效提高了其抗干擾能力和可靠性[6]。RS碼用于突發差錯的校驗,針對水印通常會表現為連續的位受到干擾,采用RS碼非常有效。PDF417碼共擁有9個錯誤糾正等級,每種錯誤糾正等級所包含的錯誤糾正碼字也不同,糾錯等級越高需要的錯誤糾正碼字越多,當糾錯等級為8時,可以將符號受污染達到50%的信號重新復現出來。在掃描提取二維碼水印的過程中,倘若出現部分掃描信息丟失,利用PDF417碼的錯誤控制碼可以進行自糾正,提高了容錯率。
考慮到二維碼信息包含的信息量和可靠性,本系統采用了糾正等級為4,它的可存放資料量為1072字節,可以容納如圖2所示的字節信息,同時能夠有32位的糾正碼數。對于要編碼的二維碼源信息,在經過DES加密之后,密文信息由PDF417編碼生成二維條碼圖形。我們采用了開源的iText庫用于創建和生成二維碼條碼,使用iText提供的API可以實現文檔頁面布局、對文檔進行加密、生成二維碼和水印嵌入等功能。
水印能夠為打印文檔提供唯一的信息標識,是文檔控制和文檔回收的重要依據。為了能使二維碼條碼能以水印嵌入到打印文檔中,通過iText的pdfStamper類提供的getoverContent方法獲得當前文檔的頂層圖層,然后將二維條碼圖像嵌入文檔內容上層。
考慮到文檔內容可能導致水印圖片在提取過程中的不完整,我們將水印分別嵌入在左上角,中間和右下角三個位置。通常,打印文檔在左上角和右下角是空白區,因此選擇其作為水印嵌入區域進一步保證了二維碼信息能夠可靠地得到提取。
在PDF417二維條碼二維碼的識別過程中,起始符(圖3中b區)是重要的定位區,為了提高識別效率,在水印嵌入時,系統首先對打印文檔進行分析,尋找豎向空白較大區域作為二維碼水印嵌入的起始區。為了確定水印灰度,系統首先對打印內容灰度進行灰度直方統計,選擇概率最低的灰度作為水印灰度。為提高水印識別正確率,我們在同一頁打印稿中,會加入3~4個二維碼水印。
安全打印機的設計思路是基于S5PV210的嵌入式平臺,打印文檔被嵌入二維碼水印后通過網絡傳輸給由S5PV210構成的打印服務器進行打印輸出并記錄。作為一款低功耗、低價格、高性能的嵌入式處理器,S5PV210能夠滿足本系統中對CPU高速度和高穩定性的需求。S5PV210使用了Cortex-A8架構(主頻為1 GHz)設計而成,具有極其豐富的外設[7]。由S5PV210構成的打印服務器端包含了打印驅動模塊、打印控制模塊、打印記錄模塊三大模塊部分,如圖4所示。

圖4 打印服務器結構
(1) 打印控制模塊
打印控制模塊作為本系統中極為重要的一部分,它的主要功能是整個打印流程的規劃以及故障處理機制。用戶在將打印文檔發送到打印服務器之后,服務器端進行解密并在本地保存,但是并不會立即對打印文檔進行打印,而是等待讀取用戶RFID卡的信息進行認證。如果認證失敗,則此次打印請求不會被服務器端受理。若身份信息認證通過,在服務器端保存的文檔經過打印驅動層的處理后發往打印機進行打印。在打印過程中,會專門創建一個偵聽線程read_status_thread偵聽打印機的狀態信息。若打印機在打印過程中發生故障,故障發生時,本次打印的相關打印信息會被現場保護起來。類似缺少紙張這種可恢復故障,相應的故障代碼會被發往打印用戶客戶端,用戶在添加完紙張后可以選擇繼續執行本次未完成的打印任務。而像紙張卡機等不可恢復的故障,服務器端將結束此次打印任務,并將故障信息及時反饋給打印用戶。
(2) 打印驅動模塊
打印驅動的主要功能是接收來自PC端加密后的打印作業,解密并轉換為打印機可以識別的圖像數據。接著用打印機控制語言PJL將打印作業的頁面布局,打印選項等設置信息發送給打印機。
打印驅動由Ghostscript,foo2zjs和libusb三個部分組成。Ghostscript在打印工作中扮演著極為重要的角色,它將打印文件轉為為適應各種類型打印機的光柵文件。為了能在S5PV210平臺上正常工作,需要對ghostscript進行交叉編譯。在ghostscript的多個版本中,考慮到與linux2.6.35內核版本的兼容性,選擇了8.70版本的ghostscript。另外一個重要的組成部分就是foo2zjs,foo2zjs是一款開源的打印機驅動,它支持使用ZjStream協議的打印機。在本系統中,foo2zjs的作用是將經過ghostscript轉換后的文檔最終轉換為ZjStream數據流提供給打印機進行打印輸出。經過過濾器轉換完成的打印文檔最終要通過usb通信發送給打印機,本系統采用了libusb庫而舍棄了linux內核自帶的usblp驅動[8]。通過libusb庫提供的API[9],就可以實現與usb打印機通信完成打印內容的傳送以及獲得打印機的狀態。
(3) 打印記錄模塊
為了完整地記錄每次打印的歷史信息,需要在服務器端部署數據庫,同時考慮到嵌入式資源的有限性,系統采用了Sqlite這款開源的嵌入式關系數據庫。Sqlite能夠實現自包容、零配置、支持事務的SQL數據庫引擎,具有使用方便、結構緊湊、高效和可靠的特點[10]。Sqlite提供了相應的c函數接口,通過這些接口即可執行標準的sql語句。打印結束后,本系統會將該次打印的時間,打印用戶名,打印文件名,打印頁數以及打印份數等打印信息寫入數據庫文件中。無論是打印正常結束,還是由于發生了不可恢復的故障導致打印中途退出,相應的信息都會被保存起來。在后期的打印審計過程中,管理者能夠方便地查詢存儲在服務器端的打印記錄,以做到打印后期的安全控制。
利用本文設計并實現的安全打印機,對測試文檔進行打印測試。原始的二維碼信息為:16 測試文檔.pdf 0001 20 20150409 20150502 0001 0001 03 作為測試,其中文檔名長度為16,打印文檔名為測試文檔.pdf,文檔版本號0001,頁碼20,文檔修訂時間2015.04.09,打印時間2015.05.02,文檔所有人員工號0001,打印人員工號0001,打印機編號03,備注信息作為測試。原始明文信息經過加密后,轉換后的密文信息為:31 32 20 E6 B5 8B E8 AF 95 E6 96 87 E6 A1 A3 20 20 30 30 30 31 20 32 30 20 32 30 31 35 30 38 30 39 20 32 30 31 35 30 39 31 30 20 30 30 30 31 20 30 30 30 31 20 30 33 20 E6 B5 8B E8 AF 95 E7 94 A8 E4 BE 8B。加密后的密文經過處理后生成最終的pdf417二維碼并嵌入到打印文檔中,打印結果如圖5所示。同時,打印服務器將此次打印記錄存入到數據庫中。打印文檔的二維碼水印信息在被提取處理過程時,利用PDF417編碼中的糾錯碼能夠還原丟失的信息,得到了二維碼加密信息后經過DES算法解密后成功得到了原始的二維碼信息:16 測試文檔.pdf 0001 20 20150409 20150502 0001 0001 03 作為測試。從實驗結果可以得出,本系統在有干擾時,依然能夠準確獲取二維碼的原始信息,表現出較高的可靠性。

圖5 打印文檔結果
本文闡述了基于ARM的安全打印機的研究和實現,通過對打印文檔嵌入經過加密的二維碼水印,能夠唯一標示打印文檔的有關信息。在打印安全方面,系統既有打印前期的身份認證機制,也有打印中期對打印文檔的加密,水印嵌入和二維碼添加的處理,還有打印后期的打印記錄功能,做到了整個打印過程的閉環處理。與其他市面上的安全打印機相比,本文設計的安全打印機具有低成本,方便部署,以及容易擴展的優點,有著較為廣闊的應用前景和實用價值。
[1] 孫芳,牛賀群,田忠.一種安全增強型打印機研究綜述[C]//天津市電子學會2013年年會論文集,天津,2013:46-48.
[2] 陳霞,王希常,劉江.一種魯棒的文檔圖像數字水印算法[J].信息技術與信息化,2010(1):39-42.
[3] 李聯.信息安全中的DES加密算法[J].現代電子技術,2005,28(9):118-120.
[4] 周曉偉.二維條碼識別技術研究[D].上海交通大學,2007.
[5] Zhong X,Lai Z,Chen Y,et al.Application of Evolutionary Encryption 2D Barcode Generation Technology in Agricultural Product Quality and Safety Traceability System[J].Asian Agricultural Research,2014,6(8):76-82.
[6] 李麗萍,周子堯,袁堅威.PDF417二維條碼的識別及應用[J].數字技術與應用,2014(6):141-142.
[7] Sun H P,Gao Z G,Chen L N.Designof Intelligent Public Transportation VehicleTerminal Based on S5PV210[J].Applied Mechanics & Materials,2014,596:735-738.
[8] 寶華.Linux 設備驅動開發詳解[M].人民郵電出版社,2008.
[9] 徐家.Linux下USB視頻設備用戶空間驅動研究與開發[D].浙江大學計算機科學與技術學院,2010.
[10] 倪天龍,張賢高,王培.數據庫 SQLite 在嵌入式系統中的應用[J].單片機與嵌入式系統應用,2005 (10):35-37.
DESIGN AND IMPLEMENTATION OF ARM-BASED SAFE PRINTER
Li Feng Li Ming
(School of Computer Science and Technology,Donghua University,Shanghai 201620,China)
With the arrival of information era,information security has become a hot issue with global concerns.As one of the most commonly used means of information sharing,printing brings huge convenience to our work and daily life,but also causes immeasurable losses to the enterprises and institutions due to information leakage brought about by it.To solve the problem of printing security,the safe printer we designed uses S5PV210 of ARM Cortex-A8 processor as the hardware platform,and Linux as software platform,it implements the functions of two-dimensional code generation,two-dimensional code watermark embedment,print audit,print control and print recording.The system can achieve late track and retrieval of the printing files through embedding 2D watermark information into the classified files and thus realises the closed-loop treatment of entire printing process.
Information security Secure printing S5PV210 Two-dimensional code Watermark Tracking
2015-07-18。李鋒,副教授,主研領域:嵌入式系統,物聯網,移動APP開發。李明,碩士生。
TP309
A
10.3969/j.issn.1000-386x.2016.11.071