黃海平
摘 要:針對文件數(shù)字簽名在電子病歷應用中存在只能整體簽名、重復性簽名等諸多限制和問題,提出改用XML數(shù)字簽名。實現(xiàn)結果表明,XML數(shù)字簽名可支持多種方式的文檔數(shù)據(jù)轉換,可以實現(xiàn)對電子病歷進行部分和多方簽名驗證,并能提供清晰易讀的密鑰信息,更加便于簽名的自動檢驗處理。因此,在電子病歷的應用中,XML數(shù)字簽名較文件數(shù)字簽名在平衡安全性和數(shù)據(jù)庫空間節(jié)約性上具有明顯優(yōu)勢。
關鍵詞:空間節(jié)約XML;語言數(shù)字簽名
中圖分類號:TP311.52 文獻標識碼:A
1 引言
目前,隨著醫(yī)療信息化建設的不斷深入開展,國內的各個層級的醫(yī)院已經(jīng)普遍淘汰了紙質電子病歷,采用電子病歷系統(tǒng),而電子簽名法的誕生,意味著數(shù)字簽名技術將逐步保障電子病歷的安全性和保密性[1]。近年來,國內外醫(yī)療信息化科技工作者對數(shù)字簽名技術在電子病歷的應用方面做了諸多研究,尤其是防篡改和安全可靠保障的相關技術已經(jīng)比較成熟,在美國推出了《數(shù)字簽名法》[2-3],鼓勵信息行業(yè)采用數(shù)字簽名技術保證電子病歷的安全,國內學者開展了數(shù)據(jù)結構加密、數(shù)字水印等多種電子病歷加密方法[4-5],但是,更具應用潛力的XML數(shù)字簽名技術在電子病歷上的應用研究相對較少,本文著重從平衡安全性和數(shù)據(jù)庫空間節(jié)約性上,討論XML數(shù)字簽名技術在電子病歷的應用。
2 文件數(shù)字簽名和XML數(shù)字簽名的技術
原理
2.1 電子病歷XML數(shù)字簽名生成
電子病歷XML數(shù)字簽名算法生成過程中,針對要的簽名對象計算其摘要值,然后執(zhí)行簽名。XML數(shù)字簽名的形成分為兩部分操作,第一是形成Reference元素,第二是形成Signature元素[6]。
1.Reference 元素的生成:
步驟1:先用Transform對需要產生摘要的內容進行統(tǒng)一化處理;
步驟2:根據(jù)哈希函數(shù)產生摘要哈希值,可用于對數(shù)據(jù)的接收方進行摘要核對;
步驟3:創(chuàng)建一個 Reference 元素,作為父元素,子元素包含 DigestMethod、DigestValue元素??蛇x的Transforms元素中的子元素要先后順序處理。
2.Signature元素的生成:
步驟1:首先創(chuàng)建SignedInfo元素,并作為父元素,子元素包括SignatureMethod元素、CanolicalizationMethod元素以及若干個 Reference 元素。
步驟2:把步驟1創(chuàng)建的SignedInfo元素輸入到CanolicalizationMethod元素中,進行規(guī)范化的處理,輸出結果以便作為數(shù)字簽名的輸入內容,再結合KeyInfo中的信息進行數(shù)字簽名。
步驟3:創(chuàng)建Signature元素,把步驟2的結果賦值給SignatureValue 元素,同時將SignatureValue 元素連同Signedlnfo元素、Keylnfo 元素,三個元素作為子元素封裝到 Signature 元素中,在封裝式簽名的情況下,也可把Object元素也封裝進來。
圖1 電子病歷XML數(shù)字簽名過程流程圖
2.2 電子病歷XML數(shù)字簽名的驗證原理
電子病歷XML數(shù)字簽名的驗證是一個發(fā)送方封裝公鑰解密過程,具體是根據(jù)Reference元素里被簽名的文檔和被簽名的加密算法重新計算得出被簽名文檔的摘要,與發(fā)送方提供的摘要對比,如果一致則說明沒有被篡改[7]。驗證過程包括了引用驗證和簽名驗證兩個部分。
圖2 電子病歷XML數(shù)字簽名驗證過程流程圖
1.引用驗證給過程是首先用CanolicalizationMethod元素規(guī)范化處理SignedInfo元素;然后從中提取出數(shù)據(jù)源引用并作轉換處理,將這時的輸出作為Digest要處理的輸入生成數(shù)據(jù)摘要值;最后將 signedInfo元素中提取的DigestValue元素值與前面生成的摘要值兩兩匹配,一致則驗證完成。
2.簽名驗證流程是先從KeyInfo元素提取出驗證密鑰;然后通過SignatuerMethod元素的規(guī)范處理確定發(fā)送方使用的簽名算法。把收到的簽名值和經(jīng)過算法計算出來的SignatureValue元素值對照,一致則證明簽名正確[8]。
3 電子病歷XML數(shù)字簽名的設計和實現(xiàn)
3.1 電子病歷XML數(shù)字簽名的算法流程設計
步驟1:客戶端新建一份電子病歷文檔,對簽名的驗證端發(fā)送包含簽名者和病人身份信息的追加簽名請求;
步驟2:簽名驗證端提取追加簽名請求的簽名者和病人身份信息;
步驟3:簽名驗證端按照以下的步驟完成對簽名者的身份驗證:
1.簽名驗證端發(fā)送隨機信息給客戶端;
2.客戶端簽名者用私鑰對信息加密后反饋給簽名驗證端;
3.簽名驗證端向CA認證機構調用了簽名者的公鑰進行消息解密,并將結果與所發(fā)送的隨機消息比照。
圖3 數(shù)字簽名邏輯流程圖[9]
步驟4:若一致,則進行步驟5,不一致,則行步驟15;
步驟5:簽名驗證端通過身份驗證,建立遠程數(shù)據(jù)庫連接,通過對數(shù)據(jù)庫的查詢提取出簽名者和病人的身份信息,并把查詢結果反饋給客戶端;
步驟6:若查詢結果為空,則進行步驟7,若不為空,則進行步驟8;
步驟7:若查詢結果為空,證明是簽名者對病人的第一份簽名的病歷(不是要追加的病歷),客戶端直接用私鑰簽名后發(fā)送給簽名驗證端(具體案例內容見下面3.2.1的內容),首先簽名者用把要簽名的病歷代入哈希函數(shù),得出一個哈希值,也就是文章摘要,再用私鑰加密,形成數(shù)字簽名,然后,執(zhí)行步驟12;endprint
步驟8:如果查詢結果不為空,則表明這一份不是簽名者對該病人的初始病歷,簽名認證端遠程訪問數(shù)據(jù)庫,提取除去簽名信息的已有的電子病歷文檔,再重新發(fā)送給客戶端;
步驟9:客戶端將步驟1新建的電子病歷文檔追加到原有的電子病歷文檔中,并對復合后更新的電子病歷文檔進行簽名,再發(fā)送給簽名認證端保存;
步驟10:簽名認證端將追加后更新的電子病歷與原有的電子病歷對應部分進行比照;
步驟11:如果被篡改,則進行步驟15,如果沒有被篡改,則進行步驟12;
步驟12:簽名認證端通過CA認證機構調用了簽名者的公鑰對文檔簽名進行驗證,具體驗證過程如圖2所示,用公鑰解密將數(shù)字簽名轉化為哈希值,與接收的電子病歷代入哈希函數(shù)得出的哈希值,兩相比較;
步驟13:若一致,則執(zhí)行步驟14,若不一致,則執(zhí)行步驟15;
步驟14:將已簽名的更新后的電子文檔存入數(shù)據(jù)庫,并刪除原有的電子病歷文檔,避免空間的重復浪費;
步驟15:將結果反饋給客戶端。
3.2 基于XML數(shù)字簽名電子病歷的語言實現(xiàn)
為了實現(xiàn)圖3XML數(shù)字簽名邏輯流程圖步驟7 “直接簽名”需要新建一個XML電子病歷文檔medicalRecords類[10],該新建文檔經(jīng)過圖3流程圖“直接簽名”后,所形成醫(yī)生簽名了的“新建電子文檔”PatientCrecord類。
根據(jù)圖3的流程圖在原有已經(jīng)簽名電子病歷文檔的基礎上,追加內容并再次簽名的實現(xiàn)。
原簽名的電子病歷:
2014-01-20
xmldsig#sha 1”/> =
追加了2.1病歷內容以后數(shù)字簽名并在數(shù)據(jù)庫更新后的電子病歷文檔如下:
4 XML數(shù)字簽名與文件數(shù)字簽名的比較
分析
文件數(shù)字簽名是醫(yī)生針對整份電子病歷采用私鑰簽名存檔,表面看上去比較方便,但實際不易于數(shù)據(jù)庫的管理,因為存在多位醫(yī)生對同一份病歷進行重復性簽名,這對于存儲空間無疑是一種浪費,而XML數(shù)字簽名可以針對一份病歷中任一部分的內容進行簽名,比如醫(yī)生A對第一部分簽名,醫(yī)生B對第二部分,以此類推。因此,XML數(shù)字簽名在平衡安全性和數(shù)據(jù)庫空間節(jié)約性上具有明顯優(yōu)勢[11]。
另外,由于XML語言本身的可擴展性和開放性的特征,可以實現(xiàn)對XML文檔進行部分簽名和多方簽名,而文件的數(shù)字簽名[12],如下圖所示,只能對整個電子病歷文檔進行整體簽名。
圖4 文件數(shù)字簽名運行界面
同文件數(shù)字簽名對比,XML數(shù)字簽名可支持多種方式的文檔數(shù)據(jù)轉換,并對文檔特定部分進行簽名和驗證,并且其提供的密鑰信息的表示清晰易讀,更加便于簽名的自動檢驗處理[13]。下圖5,則是根據(jù)圖4所示的同一內容的電子病歷,其中一部分進行簽名。
圖5 XML數(shù)字簽名運行界面
參考文獻
[1] 高春芳,唐曉東,羅娟.電子病歷系統(tǒng)應用現(xiàn)狀及前景展望[J].醫(yī)療衛(wèi)生設備,2013,3:76-78.
[2] Zhang Wenji,Yang Jinshe. Discussion on the development trend of electronic Medical records management[J]. Journal of Practical Medical Techniques, 2013, (10): 124-125.
[3] Xue Manguo. The Research Development of Electronic Medical Records in China[J]. Chinese Hospital Management, 2012,25(02): 17-20.
[4] 陳海彪.對電子病歷存儲及簽名的研究[J].廣東科技,2013,7(14):43-47.
[5] 隋暖.基于數(shù)字簽名技術的移動公文流轉系統(tǒng)的研究與實現(xiàn)[D].山東:中國海洋大學,2014.
[6] 袁博.淺談電子病歷的數(shù)據(jù)安全控制策略[J].數(shù)字技術與應用,2014,7:185-185.
[7] 朱建娜.醫(yī)院信息化建設電子病歷法律效力如何保障[J].吉林醫(yī)學信息,2014,30(2):20-22.
[8] 梁方舟.數(shù)字簽名在門急診信息化中的應用研究[J].中國循環(huán)雜志,2013,8:102-107.
[9] 宋余慶,陳健美,馮江.一種基于XML的電子病歷數(shù)字簽名方法:中國,ZLCN102457508A [EB/P].2012.05.16.http://www.epub.sipo.gov.cn/
[10]馬錫坤,楊國斌,于京杰.國內電子病歷發(fā)展與應用現(xiàn)狀分析[J].計算機應用與軟件,2015,(1):10-12.
[11]任曉剛.數(shù)字簽名在醫(yī)院電子病歷中的應用研究[J].信息技術,2013,(1):118-120.
[12](04-O5).衛(wèi)生部統(tǒng)計信息中心關于征求《基于居民健康檔案的區(qū)域衛(wèi)生信息平臺技術規(guī)范(征求意見稿)》和《基于電子病歷的醫(yī)院信息平臺技術規(guī)范(征求意見稿)》意見的函Available:[EB/OL]http://www.moh.gov.cn/publicfiles/business/htmlfiles/mohwsbwstjxxzx/s8553/201203/54263.htm
[13]維克托·邁爾-舍恩伯格,肯尼思·庫克耶著,盛楊燕,周濤譯.大數(shù)據(jù)時代:生活、工作與思維的大變革[M].杭州:浙江人民出版社,2013:2-3.