凌茂天,趙亞輝
(同濟大學浙江學院 浙江 嘉興 314051)
隨著醫院建設企業級的計算機網絡系統在我國的快速發展,數據安全和信息保密在醫療系統中逐漸成為重要研究課題。任何用于數據庫管理的計算機軟、硬件及網絡系統都不能確保是絕對安全的,存在系統代碼缺陷和邏輯流程不合理的漏洞,因此往往會被他人利用,進而竊取、篡改重要資料。為了防止個人信息被不法分子利用,需要通過對數據文件進行加密,以達到數據安全存儲的目的[1]。
但是以往多數基層醫院在將電子病歷信息從本地計算機傳送至中央計算機系統上和存儲過程中,未曾對明文文件或數據按加密算法進行處理。不法分子利用收集到的患者個人信息進行詐騙、騷擾等違法行為,或者通過已知信息進一步挖掘更多私密信息擾亂社會秩序的安全穩定。針對這一問題,基于不少學者在密碼學的高級加密標準Rijndael 加密法上做出的研究[2]和基于FPGA 多通道同步事實高速數據采集[3]的研究下,本文提出了一種AES 加密算法在電子病歷記錄信息載體加密上的應用,能夠較為有效地解決當前系統中存在的部分安全隱患。
現代密碼系統存在理論上的安全問題,即使有絕對安全的算法,也沒有絕對安全的系統。目前得到廣泛應用的多為非對稱加密、對稱加密和單向加密。AES 加密算法為對稱式加密,加密與解密使用相同的密鑰。不同于前任標準DES,AES 在軟件、硬件上都能快速地進行加、解密。根據現階段常見的攻擊技術進展而言,目前AES 加密算法是一種相對安全且不易破解的加密方式。該算法易實現、效率高、速度較快的特點也是本次應用中選取AES 算法實現電子病歷加密上傳的緣由。AES 算法是單鑰密碼算法,采用了混淆、擴散的原理,涉及字節替換、行位移、列混淆、輪密鑰加。加密方式是一個迭代分組密碼,將明文分塊后映射到4×4 狀態矩陣中,若明文分組長度更大,狀態矩陣則會相應增加更多的列,迭代次數的值取決于矩陣列數和密鑰列數。標準的AES 算法采用串行結構,處理明文分組時使用同步操作的方式。即只有當前一個指令執行完畢之后,才可以執行下一個指令。該密鑰有3 種長度,分別為128 位、192 位、256 位,對應迭代次數分別為10、12、14?,F階段的應用中大部分采用的是128 位密鑰。在本文中明文分組固定長度為128bit,密鑰長度為128bit,輪迭代次數10 次。同時AES 加密過程的逆操作為解密過程,加、解密過程對稱,但是變換過程中所使用的常量矩陣有所不同。AES 算法加、解密工作流程見圖1。
AES 的S 盒運算是獨立作用于狀態字節的一種非線性變換,它包括兩個數學操作,且該變換可逆。它將輸入字節高4 位作為S-box 行值,低4 位作為列值,對應元素作為輸出,將輸入的每一字節映射為其他字節。最后產生的S 盒為一個16×16 個字節的矩陣。本文代碼中使用的S盒見圖2。
加密和解密的過程中,分別需要Nr+1 個由主密鑰擴展的子密鑰,在本文中即需要11 個子密鑰。由于輪密鑰都是基于種子密鑰擴展形成,因此各組密文具有一定的相關性。將從初始輸入的子密鑰拷貝,并按一維數組排列成4*Nk 矩陣。對Nk 列進行位移變換,將輸入的4 個字節循環左移一字節,再進行字節代換。最后與上一密鑰的第1列做異或運算即兩序列按位相加模二,得到新子密鑰的第1 列密鑰。2、3、4 列則直接由前一列和上一子密鑰做模二運算得到。
FPGA(Field Programmable Gate Array),即現場可編輯門陣列,是0 種半定制、可編程的邏輯陣列,并可根據需求來設計芯片的功能。
典型的FPGA 包含3 類資源及可編程邏輯功能塊,用戶可編程I/O 塊和布線資源。FPGA 架構將基本元素、附加的計算和數據存儲塊結合在了一起,提高了器件的計算密度和效率?,F階段的FPGA 的存儲單元有分布式DRAM 和寫入輸出需要時鐘的內嵌的塊BRAM[3]??紤]到加、解密在單位時間內的最大通量(bit/s)以及消耗和穩定性問題,在本文的應用中使用到了Altera 公司的Cyclone IV,采用該系列可以在不影響性能的情況下有效降低系統總成本。
Cyclone iv GX 系列芯片內部資源通常由以下幾部分組成:(1)基本的邏輯單元(LE);(2)嵌入式存儲資源(embedded memory);(3)嵌入式乘法器(embedded multipliers);(4)通用鎖相環資源(PLL);(5)豐富的用戶IO(user I/O pins) ;(6)全局時鐘網絡;(7)高速收發器(transceivers,up to 3.125 Gbps);(8)PCIE硬件IP 核(PCIe hard IP block);(9)多用鎖相環(MPLL);(10)高速外部存儲器接口(external memory interfaces)。
其特點有6 k 到150 k 的邏輯單元(LE/LC),最高有6.3 Mbit 的嵌入式內存,有最高360 個18×18 乘法器。并且決定使用高速電路設計中的完全展開流水線結構,使每個時鐘脈沖都接受下一條處理數據的指令[4],在此基礎上完成AES 算法的硬件設計。
由于解密部分的密鑰異或模塊中,所使用的密鑰與密鑰擴展運算的順序是相反的。所以采取先將運算得出的10 輪密鑰擴展結果進行存儲,在輪變換時又進行讀取再運算的方法。
AES 算法通量=(分組長度×最大工作頻率)/所需時鐘數
加密速率=通量/可編程邏輯單元消耗量
FPGA 的IP 內核模塊是一種預先設計好,或者已經驗證過具有某種確定功能的集成電路、器件或部件。IP 核分為3 種,既軟核、硬核、固核。一個基于FPGA 的系統設計,大部分功能模塊均可使用已經設計好的IP 內核。在設計本文項目時,根據實際情況利用VHDL 語言對系統功能及行為進行構筑,并優化系統框架,不包括具體物理層面信息。使用預處理單元,通過軟核的控制對數據分組進行處理,實現數據分組的加、解密過程。因為加密解密使用的密鑰拓展模塊是相同的,所以為了降低邏輯資源消耗,可以令加、解密的部分共用一個密鑰拓展模塊。過程狀態中的邏輯模塊狀態轉換描述見圖3。字節代換模塊則是采用了FPGA內部存儲資源,存儲S盒查找表的配置數據,進行設計。
不同醫院電子病歷的內容有所差異,數據大小差別較大,但通過實際查看不同醫院的病歷模板可知,在電子病歷各項信息中,病人的個人敏感信息通常只存在于電子病歷首頁。而病歷首頁雖然不同醫院的格式模板不相同,但是記錄的信息內容大同小異。醫院在病案室歸檔和上報時著重于首頁信息,故而為了避免進行大量無效的數據加密,進而對加密效率造成影響,本文的加密僅針對電子病案的首頁。
鑒于Python 語言的優點,該算法使用Python 編程實現,將算法中每一部分在編程中都將視為一個類,每一部分對應的相應功能都在類中進行實現。
算法設計步驟:(1)輸入密鑰、明文數據文件,將明文數據分組行數為m,分組個數為n。(2)將m行數據進行加密計算,直至n次后讀到文件結尾。(3)利用get 函數獲取返回的數據文件加密結果。
由于條件受限的原因,算法的調用并沒有在醫院的管理系統中實際實現。在模擬環境的測試時受到一些學者的啟發,將該算法編寫為庫類,把程序的模塊相互劃分開形成獨立的文件[5]。運行時通過動態鏈接的方法調用該算法,在項目中引用AES.dll 文件,實現正常調用。測試環境參數見表1。

表1 測試環境參數
在實現加解密系統的時候,密鑰存儲是繞不過的問題[6]。如果將密鑰信息直接存儲在數據庫中,無疑是種不安全的做法。通常的密鑰存儲方式有3 種。本文選擇記錄介質存儲法來保存算法密鑰,在文件加密后,將密鑰信息保存在文件外的方法,即加密時將對應密鑰存入數據庫,再在數據庫中增加一個記錄。解密時根據路徑,在數據庫中查詢相應密鑰進行解密。
為了方便醫院人員使用,采用記錄介質存儲法將密鑰存儲在數據庫中的方式。雖然一定程度上提升效率和操作可行性,又減少了密鑰管理的硬件花費與復雜程度,但依舊存在著不小的密鑰泄露風險。本文在密鑰存儲管理機制的程序設計及運用中還有很多不足之處。
數據通過程序加密解密傳入系統或數據庫,通過數據庫接口來調用密鑰信息。該程序在連接中起到作用,故而程序運行無需展示到前端界面。選取某醫院的一份電子病歷首頁模板,對其進行加密測試。
圖4 為加密后密文內容,圖5 為明文內容,測試密鑰為1235698742569870。數據加密的過程中考慮到醫院數據在單位時間內成功地傳送數據的吞吐量較大,在數據上傳時,還需要進一步考慮到數據加密對醫院信息系統數據效率的影響,以及其占用資源消耗。筆者將未加密情況下的數據與加密后數據做出對比,對比實驗數據采用云南某醫院處方表:實驗樣本明文數據大小為161 MB,加密后大小為161 MB,估算信息總量在3 600 條。隨著實驗數據量逐步增多,由于運用了加密算法的系統增加了數據處理任務,導致一定程度上功耗較高、吞吐量受限。故而加密數據相較于未加密數據,在上傳時速率有一定的影響,但兩者比較中考慮到后期的穩定性和安全性,AES 加密算法仍占有優勢,對于AES 算法在速率上提升的進一步優化方式有待討論研究。
在網絡快速發展的當今社會,保障醫療數據安全、不泄露患者隱私是確保醫院公信力的重中之重?;鶎俞t院的數據管理中還存在著許多隱患有待解決,本文聚焦于醫院數據管理的其中一點——電子病案的加密實現。關注到患者的個人信息安全,將密碼學中AES 加密算法結合到實際運用中,根據對比不同密碼學算法的優缺點,可分析出AES 算法在運用中的合適性和可行性特點。本文在針對電子病歷首頁上傳提出的AES 加密算法在實際中的應用,是確保數據安全的一種手段,極大地防止不法分子對個人私密信息的竊取行為,同時也沒有因為進行信息加密而損失效率,綜上所述本次研究具有很高的實用價值。
但以上僅局限于理論和實驗環境中,離實際使用還存在一定差距,還需要更多的數據和實驗支撐,才能逐步運用和實現。本文僅針對這一方向做出部分研究,密鑰生成和存儲都是基于目前已提出和實現的技術進行的,并未進一步改進,因此在效率和安全性上還有極大的改進空間。