張澤宇 郭宜家 劉宇航 劉子馨 趙鎧塬



摘要:隨著國內“數字化醫院”建設的蓬勃發展,各醫療部門對于電子病歷系統的需求也在迅速增長,因此電子病歷的安全性問題也越加突出。根據該問題對滿足安全性的電子病歷管理系統進行了設計與實現。文章采用C/S架構完成了電子病歷信息管理系統的基本功能,包括數據讀寫、查找、分類等。為了保障其安全性,本項目組研究了 XML的相關安全技術規范標準,將電子病歷信息寫入XML文件中進行存儲傳輸。通過AES加密、多重數字簽名以及權限管理等方法滿足電子病歷的機密性需求、認證、完整性與抗抵賴性需求。
關鍵詞:電子病歷系統;信息系統;安全性;加密;解密
電子病歷(Electronic Medical Record,EMR)也叫計算機化的病案系統或基于計算機的患者記錄,是指以電子化方式管理的有關個人醫療、保健和健康狀態的信息,是用電子設備保存、管理、傳輸和重現數字的患者醫療記錄。電子病歷系統是指支持病歷信息的采集、存儲、處理、傳輸、保密的系統。
近年來,IT技術和電子病歷的研究應用發展較快,通過電子病歷實現醫療信息的共享,已經成為各國醫院信息化程度的指標之一。我國對于電子病歷應用較晚,所以目前的技術水平仍然處在不斷提高的階段,存在的問題仍然較多。例如我國電子病歷軟件環境不是很成熟,缺乏統一的電子病歷信息標準等。然而目前最主要的是電子病歷的安全性問題,想使電子病歷擁有足夠的法律效力,其安全性一定要得到保證。電子病歷是技術性的數據信息,屬于電子數據的一種,在計算機上篡改或刪除比較容易,且不留痕跡,其證據效力很難保證,因此電子病歷的安全性就顯得更為重要[1]。
1 電子病歷信息管理系統的實現
1.1 系統架構與開發模型
本系統使用的C/S架構進行完成。用戶通過與客戶端的界面進行交互,完成相應的需求。系統分為3個主要部分,分別為數據顯示部分(客戶端)、業務邏輯部分(服務器端及數據訪問層)和數據庫,服務器端使用了Linux語言進行完成。其中數據顯示部分用來實現“電子病歷系統”的用戶界面,為用戶操作提供請求平臺,將操作請求發送給業務邏輯部分,將用戶請求的數據結果以文字或表格等形式顯示給用戶,該部分選擇了無需配置使用環境的C#語言進行編寫。數據顯示部分與業務邏輯部分的數據傳遞使用了安全外殼協議(Secure Shell, SSH),并且對數據進行了安全散列算法(Secure Hash Algorithm, SHA)加密和數字簽名,保證了數據傳輸的安全性和完整性,系統架構如圖1所示。
業務邏輯部分包括服務器及數據庫連接。服務器接收到數據顯示層(view)發來的訪問請求后,根據不同的操作請求,控制跳轉,通過數據訪問層實現對數據庫的增刪查改操作,對數據庫返回的信息進行處理,再向數據顯示層返回訪問結果。數據庫部分實現對數據的存儲,并根據數據訪問層發來的語句進行相應的操作,再將數據結果返回給業務邏輯部分,如圖2所示。
1.2 系統需求分析
本系統要對不同數據來源的病人信息統一與集成管理。本系統需要做到在保證安全性的情況下對系統進行有序高效的管理,同時要求系統具有良好的易用性、穩定性和擴展性。本系統主要需要實現以下幾部分:用戶部分、醫生部分、電子病歷管理以及檢索與數據分析,該系統的具體模塊功能如圖3所示。醫生模塊主要實現對病人基本信息的改動,增加或刪除病人,改變病人的就診狀態,并且保證醫生可以隨時打印病人的病歷。病歷模塊就是含有病人的基本信息以及住院信息,能夠自行按照時間排序,在處理過后進行存檔,以便隨時調用。在數據元素的管理上,為了在現有系統上方便對所有頁面上的數據項更好地管理,本系統在數據庫表中保存了數據項在頁面上的控件ID、數據屬性等信息。在安全性方面電子病歷需要滿足機密性、完整性與抗抵賴性,并且可以使其具有法律效益。系統的性能需求需要包括運行時間,系統的安全性,界面的友好性等。對于電子病歷而言,首先要確定系統的容量,確保有足夠的容量處理數據。其次要考慮到系統的響應時間、處理時間以及高峰期間其允許偏離范圍。同時為提高系統的可靠性必須采用模塊化和結構化設計以提高系統的容錯能力。最后要有適應用戶特點的智能化人機交互界面,以便用戶能夠更加簡便地操作系統[2]。
1.3 系統E-R圖與表結構設計
本系統的實體類型包括病歷、住院病歷擴展表、病人、醫生、科室、醫院。一份病歷擁有多份住院病歷擴展表,包括該住院期間的日常檢查、醫生查房結果等,除此之外,每個病歷實體包括該次就診得到的處方、診斷結果、化驗結果、影像結果等,完整記錄了病人的單次就診記錄。醫生、科室、醫院3個實體類型在數據庫中對應醫生信息表;病人和住院病歷擴展表在數據庫中則分別對應病人個人信息表和病人住院信息表[3],系統E-R圖如圖4所示。
本系統主要有3個表,分別為用戶表(user)、病人病歷信息(patient_info)、病人基本信息(patient)。另外還有一些輔助基本信i管理的表如藥物表(Medicine)、西醫主訴表(West Description)等。其中的病歷信息我們使用病人身份號作為主鍵并與病人基本信息相關聯,在病歷信息表中存儲病人信息的XML文件路徑,為了確保安全性服務器存儲的文件當然也是被加密過的。用戶表則是對使用軟件的用戶進行管理,其中利用數字代表不同的權限。表中大部分基本元素是采用int型(自增量或手動增量),有效地節省了磁盤的存儲空間。
2 電子病歷安全性
2.1 電子病歷加密與解密本系統采取常用“數字信封”技術的方式同時在加密技術上選擇安全性比較高的高級加密標準(Advanced Encryption Standard,AES),加密方式。本文接下來將對如何利用加密方式保證電子病歷的安全進行討論。首先為了保證電子病歷信息的規范化以及便于后期的傳輸與管理,將電子病歷的相關信息以XML文檔的方式存儲,接著對XML文件進行加密。RSA加密算法在加密過程中首先對密鑰進行初始化,獲得跟處理密鑰相關的RSA公鑰和私鑰,使—抓蝴)用KeyPairGenerator類的工廠方法獲得生成RSA密鑰的算法,從中獲取密鑰對放在Map中以便使用。由客戶端使用對稱密鑰Key加密存儲電子病歷信息的XML文件,同時使用和服務器協商好的RSA公鑰通過base64解碼后加密該對稱密鑰Key,將這兩個數據項通過信道傳送給服務器。服務器接收到被加密處理過后的電子病歷信息之后,先用自己的RSA私鑰對對稱密鑰Key解密,再用該對稱密鑰Key解密已被加密的電子病歷文件。加密中首先使用SHA3-512HASH函數對電子病歷文件內容求消息摘要,接著使用AES算法進行加密,密鑰長度為256 bits,使用OFB模式(Output Feedback)即輸出反饋模式:明文模式被隱藏;分組密碼的輸入是隨機的;用不同的IV,一個密鑰可以加密多個消息;明文很容易被控制竄改,任何對密文的改變都會直接影響明文;填充方案選擇了PKCS5Padding,明確定義了Block的大小是8位。解密首先定義對已被加密處理過的文件輸入流和對解密后的電子病歷的文件輸出流,對已被加密處理過的電子病歷文件的文件頭進行檢驗并進行解密。通過對電子病歷的加解密作為保障其安全性的第一步[4]。加解密流程如圖5所示。
2.2 多重數字簽名
為了保證電子病歷信息傳輸的完整性、醫生的身份認證同時防止交易中的抵賴行為發生,本系統對電子病歷進行了多重數字簽名。簽名流程如圖6所示,其工作原理是首先醫師生成自簽名證書,根據相應用使用的簽名算法生成密鑰對,并將其存在密鑰庫文件中,由客戶端對該醫生負責的電子病歷文件進行數字簽名,服務器進行驗證,來保證在傳輸途中電子病歷沒有被篡改。同時考慮到一份病歷可能需要多個
醫師進行審閱,同時醫師的等級有所不同,因此使用結構化多重數字簽名對電子病歷進行簽名認證。在結構化簽名方案中,不同用戶按照事先指定的簽名結構進行簽名。密鑰庫作為存儲數字簽名及驗證的公鑰和私鑰的地方,是個受信任機構。正式的數字簽名工作需要從密鑰庫文件中取出私鑰,首先用hash算法求取該電子病歷文件的消息摘要值,使用私鑰加密消息摘要值最后用加密的消息摘要值和源文件組成數字簽名文件。
驗證工作首先由服務器從密鑰庫文件中取出公鑰,用hash算法對已被數字簽名的電子病歷文件重新計算消息摘要,同時把加密后的消息摘要使用公鑰解密,把新生成的消息摘要和解密后的消息摘要進行比對,如果相同,則驗證通過,證明電子病歷未被篡改,反之,則驗證失敗,證明電子病歷被修改過[5]。
2.3 電子病歷權限管理
最后本文就電子病歷的權限進行了研究與討論。考慮到醫院接觸病人病歷的人員較多,不同等級與不同科室之間的醫師對不同病人具有的權限也不同,所以對醫師的權限進行明確的劃分也是電子病歷系統的一個主要問題。首先對于不同等級的醫師而言,實習醫師對病歷進行的操作需要有主治醫師的簽名才可以完成,本身只具備讀權限。住院醫師對患者住院部分具有讀寫權限,同時可以對患者出院轉院等信息進行修改,對于其他信息包括主治意見等僅具有讀權限。主治醫生對于病人的基本病理情況、病情診斷等具有讀寫權限。最后的主任醫師對于病人的信息具有讀寫權限,同時可以對病人的病歷進行管理與整合。對于不同等級的醫師,在得到上一級醫師的簽名時才可以進行超過本身權限的操作,而其他不同科室的醫生如檢驗等只能針對自己科室的相關內容對病歷進行錄入修改等。明確的權限保證了病歷能夠保證電子病歷的真實可靠,出現問題后可以根據權限追責,避免出現無人負責的醫療糾紛等問題。
3 結語
隨著當前時代的發展,數字化醫院已經成為醫院發展的必由之路,而電子病歷系統的應用是數字化醫院的標志之一,也是醫院實現現代化、智能化、科學化、規范化的管理的必然產物。而電子病歷的安全性問題也將越來越突出,本文通過實現對電子病歷存儲傳輸的加密,多重數字簽名的驗證以及確定明確的權限等級來保證電子病歷的安全性,同時保障其法律效益。然而關于電子病歷的安全性還涉及很多其他方面,隨著技術的成熟,電子病歷系統將最終應用于各大醫院并實現跨平臺的信息共享,為解決醫療糾紛和處理醫患關系提供巨大的幫助。
[參考文獻]
[1]CHRIS K,STEPHEN M.ASP.NET XML高級編程一C#篇[M].劉爽,譯北京:清華大學出版社,2003.
[2]徐迎曉.JAVA安全性編程實例[M].北京:清華大學出版社,2003.
[3]陳樂君,石銳,李初民.基于XML多重簽名的電子病歷安全機制[J].計算機科學,2007(12):136-138.
[4]施陽,張海燕,戴德偉.基于JavaEE的畢業設計管理系統設計與實現[J].軟件導刊,2015(2):86-88.
[5]王延青.電子病歷與醫院信息化管理[J].中國衛生統計,2006(4):381.