• 沒有找到結果。

-10-

成。版本號證明 VP 是根據挑戰 C 得知欲驗證的欄位索引{𝑖}𝑖∈𝑄,透過 計算出對應的 欄位雜湊值的輔助驗證資訊{Ω(𝑤𝑖)}𝑖∈𝑄,最後 VP 即為被挑選的雜湊值以及輔助驗證資 訊的集合,VP=({𝑤𝑖}𝑖∈𝑄, {Ω(𝑤𝑖)}𝑖∈𝑄)。接著 TP 分成兩部分計算,τ = (∑𝑖∈𝑄𝛽𝑖𝑖) 𝑚 𝑑 𝑝,

μ = (∑𝑖∈𝑄𝛽𝑖⋅ 𝐹𝑖) 𝑚 𝑑 𝑝,TP=(τ μ)。最後此演算法輸出結果為 P=(VP,TP)。

4.1.5 CheckProof( , , 𝑟𝑜𝑜𝑡,C,P) → 0/1

此驗證演算法將機密金鑰 ,機密係數 ,機密資訊 𝑟𝑜𝑜𝑡,挑戰 C 以及證明 P 當 作輸入參數。我們驗證正確與否也是分為兩階段,第一部分是驗證挑選的{𝑤𝑖}𝑖∈𝑄是否正 確,方法是透過證明 P 中的 VP 裡的{𝑤𝑖}𝑖∈𝑄以及 {Ω(𝑤𝑖)}𝑖∈𝑄去計算出此 MHT 的根節點 值 ′𝑟𝑜𝑜𝑡,我們比對 ′𝑟𝑜𝑜𝑡𝑟𝑜𝑜𝑡是否一樣,若是一樣,根據 MHT 的驗證方式,我們能 確 認 {𝑤𝑖}𝑖∈𝑄的 正 確 性 。 我 們 確 定 挑 選 的 {𝑤𝑖}𝑖∈𝑄無 誤 之 後 , 第 二 部 分 使 用 者 計 算 σ = ( ⋅ 𝜇 + ∑𝑖∈𝑄𝛽𝑖 ⋅ 𝑤𝑖+ ∑𝑖∈𝑄𝛽𝑖𝑖) 𝑚 𝑑 𝑝,比對σ是否與 TP 中的τ一樣。最後若是兩 部分的驗證都通過,此演算法輸出 1 表示驗證成功。若是任其一驗證有誤,則輸出 0 表 示驗證失敗。

4.2 驗證架構的建造

如圖 3 所示,我們的驗證協定包括兩個部分:初始化階段以及驗證階段。在初始化 階段使用者產生金鑰以及病歷欄位資訊的標籤,上傳病歷欄位資訊後,使用者便可選擇 將使用者端的資料刪除。使用者在驗證階段確保病歷資料是否正確的儲存在伺服器上。

-11-

圖 3 驗證架構示意圖

4.2.1 初始化階段

使用者執行金鑰產生演算法 KeyGen 得到機密金鑰 以及機密係數 。接下來執行 標 籤 產 生 演 算 法 TagGen 得 到 病 歷 欄 位 資 訊 標 籤 集 合 T = { 𝑖}𝑖∈[1 𝑛], 雜 湊 值 集 合 = {𝑤𝑖}𝑖∈[1 𝑛],病歷版本編號集合V = {𝑣𝑖}𝑖∈[1 𝑛]以及 MHT 根節點的值 𝑟𝑜𝑜𝑡。完成之 後 將 所 有 病 歷 欄 位 資 訊 F = {𝐹𝑖}𝑖∈[1 𝑛], 對 應 的 標 籤 T = { 𝑖}𝑖∈[1 𝑛], 對 應 的 雜 湊 值 = {𝑤𝑖}𝑖∈[1 𝑛]和病歷版本編號集合V = {𝑣𝑖}𝑖∈[1 𝑛]上傳至伺服器。上傳後使用者可以選擇 將使用者端的F T ,V 刪除,只需要保留機密金鑰 ,機密係數 ,MHT 根節點的值

𝑟𝑜𝑜𝑡,以及病歷欄位個數 n。

4.2.2 驗證階段

使用者執行挑戰產生演算法 ChallGen 得到挑戰C = {𝑖 𝛽𝑖}𝑖∈𝑄,將 C 傳給伺服器。

伺服器收到 C 之後,執行證明產生演算法 ProofGen 產生 P=(VP,TP),隨後將 P 傳給 使用者。

-12-

當使用者收到 P 之後,執行驗證演算法 CheckProof 檢查 P 的正確性並且產生驗證 結果。倘若驗證結果為 1,我們可以確信伺服器確實擁有使用者挑選的欄位資訊;反之,

儲存在伺服器上的欄位資訊可能遭受竄改。

4.3 動態驗證的演算法以及建造

我們提出的架構可讓使用者修改在伺服器上的病歷欄位資訊,接下來我們會說明我 們的演算法以及建造方法。如圖 4 所示。

圖 4 動態的驗證架構示意圖

4.3.1 病歷資料更新

使用者要修改病歷之前先傳送要修改的病歷欄位索引 i 給伺服器,伺服器收到後會 回傳病歷版本編號𝑣𝑖以及雜湊值𝑤𝑖。為了確保病歷版本編號𝑣𝑖是正確的,使用者依據 , i 以及𝑣𝑖計算出𝑤′𝑖,比對與伺服器傳來的𝑤𝑖是否一樣。接著才執行 Modify 演算法來修病 歷,方法如下:

Modify(𝐹𝑖 𝑣𝑖 𝑛) → ( 𝑖 𝑟𝑜𝑜𝑡 𝑣𝑖). 此演算法是修改病歷的演算法,輸入參數 為新的病歷欄位資訊𝐹𝑖,病歷版本編號𝑣𝑖,機密金鑰 ,機密係數 以及病歷欄位個數

-13-

-14-

表格 2 消耗成本比較

使用者持 有資訊

伺服器計算證明 傳輸成本 使用者計算驗證 結果

CPoR[3] , k 𝜏 𝜇 𝜏 𝜇 𝜏

我們的架構 , k,R 1. {𝛺(𝑤𝑖)}𝑖∈𝑄 2. 𝜏 𝜇

𝜏 𝜇 {𝑤𝑖}1≤𝑖≤𝑛 1. {𝑤𝑖}𝑖∈𝑄 2. 𝜏

-15-

相關文件