胡海瑞 李業芹 厲菲菲

【摘要】? ? 智能卡已經在醫療行業得到了廣泛的應用,但主要用于對患者進行身份識別,卡片并不存儲關鍵就診信息,使得不同醫院之間的就診信息并不能共享。本文提出了基于智能卡的門診病歷存儲的文件系統設計和安全訪問控制機制,使得患者的病歷信息可以安全的存儲在卡片上,解決了不同醫院的就診信息無法共享的問題。
【關鍵詞】? ? 智能卡? ? 病歷存儲系統? ? DES算法
引言:
為了解決資源配置不均衡問題,我國一直積極推進分級診療服務體系建設。當前不同醫院的病歷系統并不相通,患者轉診后,早期的病歷信息并不能被當前醫院獲取。如何使患者的病歷信息在不同醫院之間正常共享,成為了醫療行業急需解決的問題。
一、智能卡工作原理
本文中智能卡是指內部有微處理器芯片(CPU)、工作存儲器(RAM)、程序存儲器(ROM)、數據存儲器(EEPROM,FLASH等)和串行通信單元等模塊,這些模塊集成在一塊集成電路中,保證安全性。智能卡即可以是支持7816的接觸式卡,又可以是支持14443的非接觸卡,也可以是兩者都支持的雙界面卡。
1.1文件系統
數據在智能卡內部以文件的形式組織,智能卡的文件系統要實現的主要功能包括:空間的管理維護;數據的有效存儲;數據的查找和定位;數據的修改和維護。智能卡內部樹狀文件系統結構如圖1,卡內的文件分為3種不同的類型,其中:MF為主文件,ADF為應用文件,EF為基本數據文件。
1.2通信協議
終端設備和智能卡之間的通信過程都是基于命令/響應的方式處理,遵循ISO/IEC 7816-4協議。終端發送一條命令給智能卡(命令APDU),卡片處理完畢產生一個應答回送給終端(響應APDU)。在接到一條命令前,卡不會主動傳送數據。命令APDU由4字節長的必備頭后跟一個可變長的命令數據域組成。響應APDU由返回的數據域和兩字節的狀態字組成。
二、門診病歷存儲系統設計
2.1文件系統設計
為更好的和已經發行的社保卡、醫院診療卡兼容,本存儲系統被設計成主文件下一個獨立應用文件目錄(ADF)和卡上已經存在的其他應用共存。ADF下的基本文件包括:
(1)key文件:用于存放安全控制的密鑰,個人化完成后不允許讀取或更改;
(2)EF01文件,用于存放卡片基本信息,如卡片狀態、發卡方標識、應用類型標識、應用序列號等。經過安全認證后可以讀取和更新;
(3)EF02文件,用于存放持卡人基本信息,如姓名、身份號、性別、年齡等。經過安全認證后可以讀取和更新;
(4)EF03文件,循環記錄文件,用于記錄32條病歷索引信息,和32個病歷文件一一對應,每條記錄包括就診時間、就診單位、對應病歷文件地址等信息。經過安全認證后可以讀取,系統自動更新;
(5)病歷數據區:整個數據區占用空間為1M Bytes,劃分為32個病歷文件,每個病歷文件為32K Bytes,用于存放單次門診就醫信息。病歷文件由文件頭和病歷信息組成,文件頭用于存放病歷文件長度和每個病歷組成部分的信息長度。經過安全認證后可以讀取和更新。病歷文件數據格式:病歷總長度(2字節)+基本信息長度(2字節)+主訴信息長度(2字節)+現病史部分信息長度(2字節)+查體情況信息長度(2字節)+中醫診斷信息長度(2字節)+西醫診斷信息長度(2字節)+診療意見信息長度(2字節)+基本信息(不定長)+主訴(不定長)+現病史(不定長)+查體情況(不定長)+中醫診斷(不定長)+西醫診斷(不定長)+診療意見(不定長)。
2.2 安全機制
發卡人根據自身的主密鑰和每張智能卡的卡片序列號分散出本張卡片的子密鑰(8 Bytes),在個人化過程中裝載到key文件中,key文件裝載后不允許讀取或更改。在卡片工作過程中,終端和卡片根據隨機數(8 Bytes),從子密鑰派生出相應的過程密鑰(8 Bytes),用來加密報文數據和產生報文的鑒別碼(MAC)。本系統中密鑰分散、加密數據、產生報文的鑒別碼(MAC)均使用基于64位分組的DES加密算法。
產生報文鑒別碼的方法:由APDU 命令的所有元素(包括命令頭)產生。(1)以‘0x1111111111111111為初始變量;(2)按照CLA、INS、P1、P2、Lc、命令數據域的順序,串聯形成一個長數據塊;(3)將該長數據塊分成多個8字節的短數據塊;(4)如果最后一個短數據塊的長度不足8字節,則在后邊加上‘0xFF,如果此時達到8字節長度,則轉入(5),否則繼續添加‘0x11,直至該短數據塊為8字節;(5)對重組后的數據塊使用子密鑰派生出的過程密鑰,進行64位分組的DES 鏈式加密;(6)從加密后的最后數據塊結果左側,取4字節為本報文的鑒別碼。
報文數據可靠性要求對明文數據進行加密:(1)用1個字節表示數據的長度,放在原數據塊的最前面,數據重組為:明文數據的長度(1字節)+明文數據;(2)將第(1)步中生成的長數據塊分成多個8字節的短數據塊;(3)如果最后一個短數據塊為8字節,轉入第(4)步;如果不足8字節,在后邊添加‘0xFF;如果長度已達8字節,轉入第(4)步;否則續添加‘0x11,直至該短數據塊為8字節;(4)對重新組裝后的數據塊使用子密鑰派生出的過程密鑰,進行64位分組的DES 塊式加密;(5)計算結束后,所有加密后的數據塊依照原順序連接在一起。卡片或終端按照對應流程進行解密計算,可以得到原明文數據。
2.3 命令設計
(1)SELECT 命令:通過AID(應用標識)來選擇IC卡中的ADF,數據域為ADF的AID。響應數據域為8字節的卡片序列號。
(2)LOAD KEY命令:用于個人化時裝載卡片子密鑰,數據域為8字節子密鑰,裝載完成后卡片不再支持該命令。
(3)GET CHALLENGE 命令:請求一個產生過程密鑰的隨機數。響應報文數據域為8字節隨機數。
(4)GET DATA命令:如果一條響應報文,無法返回所有數據,需要終端通過GET DATA命令獲取剩余信息。
(5)READ BINARY 命令:用于讀取二進制文件的內容(或部分內容),數據域為報文MAC。返回數據為密文的文件信息。
(6)UPDATE BINARY 命令:用于更新二進制文件的內容,數據域為密文數據+MAC。
(7)READ RECORD 命令:用于讀取循環記錄文件,數據域為報文MAC。返回數據為密文的文件信息。
(8)READ CASE命令:用于讀取病歷文件,數據域包括需要讀取病歷文件的位置(2字節)+數據長度(2字節)+報文MAC(4字節)。返回數據為密文的文件信息。如果一條響應報文,無法返回所有數據,需要終端通過GET DATA命令獲取剩余信息。
(9)UPDATE BINARY 命令:用于更新病歷文件,數據域為密文+MAC;原明文包含需要更新病歷文件的位置(2字節)+數據長度(2字節)+需更新信息。
三、卡片工作流程
3.1個人化
終端通過Select 命令選中ADF后,如果卡片返回的響應數據為初始數據8字節‘FF,則表示該卡片為從未使用過的空白卡,可以對卡片進行個人化。使用load key 命令將分散的子密鑰寫入卡片中。然后根據GET CHALLENGE命令返回的隨機數計算出過程密鑰,并通過符合安全機制的update Binary指令將該卡片的其他個人化數據寫入EF01、EF02文件,從而完成個人化。
3.2病歷信息讀取流程
通過符合安全機制的READ RECORD 指令獲取本卡片的病歷信息索引,根據索引信息終端選擇需要讀取的病歷文件的具體內容。使用READ CASE命令讀取病歷文件,如果一條響應報文,無法返回所有數據,卡片通過響應狀態字提示終端,終端則通過GET DATA命令獲取下一條響應信息,直至所有響應數據全部獲取完畢。所有響應數據都是根據2.2的方法加密后的數據。
3.3病歷信息寫入流程
通過符合安全機制的READ RECORD 指令獲取本卡片的病歷信息索引,根據索引信息終端選擇需要更新的病歷文件的具體內容。使用UPDATE CASE命令更新病歷文件,通過命令P1,P2來標識本次更新一共有多少條指令,本條為第幾條指令。卡片為本流程設置數據緩沖區,保障所有更新指令全部成功執行,或任何一條指令也沒有執行。防止因為卡片意外掉電引起的數據混亂。更新成功后,卡片自動更新該病例文件對應的EF03文件中的記錄。
四、結束語
本文首先對智能卡應用原理進行了介紹,提出了基于智能卡的門診病歷存儲文件系統設計,可以方便快捷的將患者的病歷信息存儲在卡片上。為了防止終端與卡片的通信過程被惡意第三方監聽或篡改,本文提出保護報文數據可靠性和完整性的安全機制,避免泄露患者信息。本文提出的設計可以有效解決在智能卡上存儲門診病歷信息的問題。
參? 考? 文? 獻
[1] ISO/CEI 7816:2006
[2]中國人民銀行 中國金融集成電路(IC)卡電子錢包電子存折卡片規范(V0.8-20080325)
[3] ISO 16609-2012
[4]朱錚濤,曾江翔.基于網絡實現SIM卡信息寫入的控制系統設計.計算機工程設計.2009.30