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