楊博文, 翟之博, 徐 湘, 徐 丹, 謝昆明
(湖北工業大學計算機學院, 湖北 武漢 430068)
在過去的十年中,互聯網設備已經取代了老式的臺式機和醫療設備。隨著物聯網技術的進步,各種手持和可穿戴的設備(例如,平板電腦、智能手表和智能手環)可以充當傳感器和監視器。通常,這些設備安放在患者的身體上或患者居住的地方,收集實時數據,將它們發送到遠程服務器,然后發送到客戶端。診斷和應急決策可以根據接收到的信息和個人電子健康記錄進行。然而,無線通信的自然缺陷引起了人們對電子健康服務中隱私保護的極大關注。由于醫療數據在不安全的公共網絡傳輸,患者的隱私容易受到多種攻擊。
本文提出了一種實用的認證密鑰協商方案,能夠滿足電子健康系統的安全需求和計算需求。主要功能如下:
服務器上的安全認證:在提出的方案中,醫療服務器負責檢查用戶的有效性。為了防止服務器知道密碼,使用異或操作將隨機字符串與其組合,然后在服務器端匹配兩個屏蔽字符串,而不是將真實密碼與之匹配。因此,醫療服務器可以驗證密碼,而不存儲和獲得具體值。
強大的隱私保護:在存儲設備中,智能卡、數據庫受到隨機數的保護,以確保只有用戶擁有真正的密碼。針對匿名性和不可追蹤性,提出了一種打破傳輸消息聯動的動態機制。數據庫和智能卡的相關值將在每次成功登錄后更新??梢宰C明方案在真實或隨機模型下是語義安全的。
效率:所提出的方案是輕量級的,因為只用到了哈希函數。所以該系統擁有較高的安全性和高效性。
首先,用戶選擇用戶名IDu,并輸入口令PW。生成一個隨機數r0,分別與IDu和PW連接并獲得對應哈希值,用戶端可以將兩個值hID和hPW發送給服務器S。服務器在收到用戶發送過來的消息后,產生一個隨機數r1,并且計算P=h(hID||x)和R=P?h(hID||r1),其中x是服務器S的秘鑰。然后服務器將hID、hPW儲存在數據庫中,并將R,r1,h(·)儲存在用戶的智能卡中。最后,服務器通過安全手段,將智能卡交予用戶。當用戶拿到智能卡時,計算verify=h(IDu||r0||PW||r1),Z=h(IDu||PW||r1)⊕r0,并將verify,Z儲存到智能卡中,從而完成注冊階段,具體過程見圖1。

圖 1 注冊階段
階段一:登錄時,用戶首先需要插入智能卡,并輸入自己的用戶名IDu和口令PW。智能卡會自動計算r0′ =Z?h(IDu||PW||r1),verify′ =h( IDu||ro′||PW||r1)。由于用戶智能卡中儲存有verify,那么只需比較verify′和verify是否相等即可驗證用戶輸入的用戶名和口令的正確性。若不等,則提示用戶用戶名或口令輸入錯誤,若相等則繼續執行后續步驟。智能卡產生一個隨機數r2,并計算hID′ =h(IDu||r0′),P′ =R?h(hID′||r1),Q=P′?r2?h(PW||r0′), S=Q?hID′,T=h(hID′||r2||p′)。最后,用戶將消息{Q,S,T}通過公共信道發送給服務器。
階段二:服務器在收到用戶發送過來的消息后,計算得到hID″ =Q?S,并通過hID″搜索數據庫,得到對應的hPW。然后計算P″ =h(hID″||x),r2′ =Q?P″?hPW,并驗證之前接收的T是否等于h(hID″||r2′||P″)。若不相等,則服務器拒絕此次登錄請求;若相等,則服務器產生兩個隨機數r3,r4,并計算v1=P″?r3,v2=h(P″||r2′||r3||r4),v3=h(v1||r2′)?r4,SK=h(P″||r2′||r3||r4)。最后,服務器將消息{v1,v2,v3}發送給用戶。
階段三:用戶接收到服務器的返回消息后,可以使用自己的已知數據計算出r3′,r4′的值,并檢查v2是否與h(P′||r2||r3′||r3′)相等。若不等,則用戶立即結束此次登錄過程,并重新執行階段一中的流程;若相等,用戶計算得到{Znew,verifynew},并使用{Znew,verifynew}代替智能卡中的值{Z,verify}。最后用戶計算得到與服務器端的SK相同的會話密鑰,具體過程見圖2。

圖 2 登錄和認證階段
這一部分,將通過分析一些可能的攻擊來討論和證明筆者提出的協議的安全性。
重放攻擊:方案中,如果黑客監聽到用戶合法的登錄請求消息{Q、S、T}并記錄下來,并在某一時刻向醫療服務器S發送這一消息。黑客會通過服務器的驗證且獲得消息{v1、v2、v3}進行下一步的智能卡端的驗證,但此時黑客并沒有上一次用戶卡中隨機數r2′的值。他將會在用戶端驗證v2的過程中失敗,因此黑客不能構建與醫療服務器S或用戶U的獨立連接。
離線秘鑰猜測攻擊:假設黑客攔截用戶U和醫療服務器S之間傳輸的所有消息,并發起離線秘鑰攻擊。因為發送的信息并不直接包含用戶的ID和密碼,黑客不能通過截獲的消息確定他猜到的每個密碼是否正確。因此,如果沒有對應用戶的智能卡,就不能成功執行離線秘鑰攻擊。
離線密碼猜測攻擊:因為用戶U和醫療服務器S之間在公共信道上傳輸消息,黑客可以獲取消息{Q、S、T、v1、v2、v3},但是隨機數r2′的值黑客未知,由于公式和哈希函數的存在,黑客不能在有限的時間內計算出用戶的密碼PW的值,甚至用戶名ID的值。因此黑客不能猜測出用戶U密碼的值。
去同步攻擊:在所提出的方案中,醫療服務器S計算SK后,向用戶發送確認消息{v1、v2、v3}。如果用戶接收到確認消息,則它將計算的SK存儲為共享會話密鑰。如果這個過程被阻塞,用戶將不會在給定時間內接收確認消息。在這種情況下,用戶將刪除SK并重新啟動登錄和身份驗證過程。因此,在重啟身份驗證過程中,用戶和服務器就會使用新的共享會話密鑰。因此,所提出的方案能夠抵抗去同步攻擊。
偽裝攻擊:一方面,黑客可以偽裝成合法用戶U向服務器端S發送偽造的消息{Q、S、T},但是他不能通過服務器的驗證,因為他沒有正確的ID,PW和R的值。另一方面,黑客可以偽裝成服務器端來接受正常用戶合法的消息{Q、S、T},并向用戶端發送偽裝的消息{v1、v2、v3}。但是,黑客缺乏此用戶在真正的服務器上對應的hID,R和P的值,他不能通過在用戶端對V2的驗證。因此,本方案能抵御黑客的偽裝攻擊。
內部攻擊:假設黑客可以在服務器的數據庫端獲取大量用戶的hID,R和P的值,因為隨機數r0的存在,黑客不能計算得出用戶正確ID和PW的值,也不能得出重要的數據信息Z的值。因此,本方案能阻擋黑客的內部攻擊。
先假設使用一個哈希函數運行的時間為Th,其他類型的操作如生成隨機數、拼接、異或的所需時間相較于運行一個哈希函數的時間而言太小,可以忽略不記,所以在性能分析中忽略了此輕量級操作類型的耗時。在經過分析之后,列出表1描述方案的性能分析。

表1 方案的性能分析 Th
從表1中可以看出:方案在注冊階段,用戶端耗時4 Th,服務器端耗時2 Th,總共用時6 Th;在登陸階段,用戶端耗時11 Th,服務器端耗時5 Th,總共用時16 Th。運行一次哈希函數所需要的時間大概是0.1 ms。在大多數情況下,注冊和登陸階段,方案耗時都在2 ms之內。
通過性能分析,可以得出結論:本方案在實際的應用中具有高效性。
本文提出了一種基于動態認證機制的密鑰協商方案,用于保障電子健康系統的用戶隱私。傳統的身份口令表被動態驗證表代替,以提供不可追蹤性,從而可以完全保留用戶的匿名性。此外,方案只采用了輕量級的哈希和異或操作,與其他相關方案相比,降低了計算成本和通信成本。因此,所提出的方案可以成功地滿足電子健康系統的能量消耗和安全需求。