姚銘業 王華彬 張瑞霞



摘要:該系統設計實現了一個面向PDF文檔的電子印章系統,在本系統中,數字證書與電子印章進行關聯來保證電子印章的有效性與安全性。主要關聯方式為把數字證書認為是電子印章的一部分。通過數字證書來認證蓋章人的身份,并通過電子印章中的信息摘要來驗證PDF文檔的完整性。經過在Linux系統平臺的測試,實現了電子印章的制作、蓋章、撤章、以及驗證等功能。
關鍵詞:PDF;電子印章;數字證書;Linux
中圖分類號:TP311 ? ? ? ?文獻標識碼:A
文章編號:1009-3044(2019)15-0124-03
1 背景
我國于2005年4月1日正式實施《電子簽名法》,對電子印章進行了詳細的定義。電子印章是電子形式的數據,是用來識別簽名人的身份和表明簽名人認可該數據電文內容的數據。與物理印章不同的是,電子印章還具有防篡改、安全、保密等特性[1]。PDF文檔遵守PDF格式的文件,所以PDF文檔與平臺無關,傳統的印章主要用于對文檔進行身份的驗證,傳統印章經過幾千年的發展已經有了一套非常完善的印章真偽驗證體系。如今,計算機慢慢融入人們的生活,政府機關和社會上不可避免地開始使用電子文檔作為主要信息傳輸媒介。而電子文檔的安全驗證就成了不可避免的問題。傳統印章無法在電子文檔上蓋章,這一現狀限制了電子文檔的發展。而PDF文檔能夠很好地解決這一問題,也就是說無論是Windows平臺,Linux還是Android。所有平臺上的PDF文檔格式都相同,解析器只需要按照PDF的渲染格式來渲染PDF就好,也就是說無論什么平臺上的PDF文檔所看到的結果都一樣[2]。
2 系統的總體設計
系統的整體模塊層次圖,如圖1所示。
PDF文檔操作模塊的接口主要3種,分別是PDF文檔的打開和關閉、PDF文檔頁面的縮放和PDF文檔頁面跳轉。PDF印章操作模塊有4種,分別是制作電子印章、蓋章、驗證印章和撤章。
3 系統的詳細設計與實現
3.1 PDF文檔操作模塊
1)設計
用于對PDF文檔進行基本操作,主要包括打開文件、關閉文件、對文件頁面進行調整、定位頁碼、保存文檔。對這些基本操作進行設計,包括時序圖和協作圖。基于篇幅,本節主要給出打開文件時序圖和打開文件協作圖,分別如圖2和圖3所示。
2)實現
基于開源庫Poppler實現對PDF文檔的加載和提取圖片映射,使得pdf文檔能與圖片的形式顯示。在打開文檔的同時,新建一個線程用于文件目錄的加載。將已讀的頁面進行緩存,可減少對重復頁面的加載,在進行頁面跳轉的時候首先檢查是否有頁面圖片已緩存,若已有緩存則從中進行加載顯示,若沒有則調用Poppler庫的類和方法進行加載。頁面的縮放功能則是通過設置圖片大小重新在顯示界面進行顯示。文檔的保存是通過Poppler庫進行文檔備份的創建,然后將備份輸出到指定文件目錄下。
3.2 電子印章操作模塊
電子印章操作模塊主要通過CA證書來管理電子印章。利用CA證書來確保用戶信息的有效性。將電子印章與PDF文檔的信息摘要組織成電子簽章。信息摘要以及用戶密碼利用哈希算法來獲取,可以保證用戶密碼以及信息摘要不被破解,保證了電子印章的有效性以及PDF文檔的完整性。電子印章的有效性以及安全性同時通過RSA算法來保證。將電子印章的基本信息利用RSA算法加密,在對證書信息使用私鑰加密后必須要對應的公鑰來解密。驗證者不需要知道電子印章的公鑰具體信息,從而保證了電子印章的安全性。
通過對PDF文檔的分析,知道其是通過交叉引用表實現對文檔間接對象的查找和讀取,通過增量更新來實現對文檔的修改。根據這兩點,我們決定通過交叉引用表和文件尾獲取到PDF文件的目錄結構,通過獲取到的目錄和交叉引用表的結合獲取要蓋章頁面的間接對象。然后通過重寫頁面間接對象的Contents屬性和/XObject屬性,將原Contents中的間接對象取出,用自己新建的間接對象代替,該間接對象用于存放原內容間接對象和新增的印章間接對象。在/XObject的字典中添加一項/Seal屬性用于引用印章圖片的間接對象,構造完這些間接對象后寫一個增量更新的交叉引用表用于給PDF閱讀器正常讀取文件;之后在文件尾的%%EOF后另起一行寫入印章的信息。由于印章信息并沒有設置任何間接對向,不會對PDF文檔本身造成影響,只要修改文件尾的文件總長度包含證書信息即可。
對于撤章功能則采用增量更新的方式實現,這樣可以保證隨意撤除任意印章,為了能修改印章的是否可讀取編號,采用將文檔信息和已有印章信息讀取出來,修改后重新寫會去,這也確保了蓋章后的印章不能用增量更新的方式修改,如果用增量更新的方式修改,在撤章的時候就會被抹掉。
PDF印章各個操作模塊設計采用時序圖和關系圖,圖4和圖5分別給出了制作電子印章的時序圖和關系圖。
4 系統測試
進入軟件后用戶點擊打開文件按鈕即可選擇PDF文件所在位置,蓋章成功后的主界面,如圖6所示。驗證印章如圖7所示。
5 總結
本系統使得Linux系統也有了相應的PDF文檔的電子印章制作及應用系統,但同時由于印章的寫入方法,與Adobe公司的規范不同,使用其他公司的PDF閱讀器只能看到印章,而不能對印章進行任何操作,只有使用本軟件才能對印章進行驗證和撤除。開發軟件的進階版即區塊鏈版本,蓋章的記錄都是公眾可以查詢到的,也確保其公開透明,容易獲得公眾的認可。
參考文獻:
[1] 國務院.《電子簽名法》工業和信息化部[EB/OL] .(2015-08-31)[2018-11-25]http://www.miit.gov.cn/n1146285/n1146352/n3054355/n3057254/n3057259/c3868973/content.html.
[2] 國際化標準組織. PDF format become ISO standard[EB/OL].(2010-01-01)[2018-11-25]. https://www.iso.org/news/2008/07/Ref1141.html.
【通聯編輯:代影】