第三章 詢答式即時稽核系統
第四節 證據縮減
保存所有證據一定可以發動且完成稽核的動作,不過事實上因為證據的數量
會無限成長,所以雲端服務提供商希望可以做證據縮減(Short cut)。假設我們可
以產生出所有檔案的 Partial Hash Chain,就可以對所有的檔案做稽核的動作,因
此雲端服務提供商只需要保存可以讓稽核順利完成的部份證據即可。
由稽核的特性我們可以知道 Partial Hash Chain 都是由最後一筆證據開始往
前驗證而產生的。比較直覺的解法是從最後一筆證據開始往前選取,直到選取的
證據讀寫的檔案包含所有的檔案後,剩下沒被選取到的檔案即是可以刪除的檔案。
上述方法留下來的證據即可產生所有檔案要稽核時所需要的 Partial Hash Chain,
圖三-7 及圖三-8 為其示意圖。在圖三-7 中,任何稽核皆只會向前驗證到第三筆
證據,並不會在向前做驗證的動作,因此第三筆證據前面的證據可以刪除,
如圖三-8。
圖三-7 證據縮減前的證據
圖三-8 證據縮減後的證據
假設 SP 內保存的檔案非常多,為了檢查證據縮減後留下的證據包含所有的
檔案,發動證據縮減可能會耗時一段時間而卡住服務。且證據縮減也不能保證每
次都可以成功。假設第一筆證據所服務的檔案之後都沒有再被讀寫過,則沒辦法
刪除任何一筆證據,也就是證據縮減失敗的狀況。又因為沒辦法確保每次證據縮
減都可以成功,所以何時要發動證據縮減也是一個問題。
由於從最後一筆證據來做證據縮減會遇到上述的問題,因此我們換了一個方
向來做證據縮減。從第一筆證據檢查該證據是否可以刪除,如此一來可以先快速
的檢查證據縮減是否會失敗以決定是否發動證據縮減,並且把檢查的步驟打散在
每次的請求服務動作以提升速度,方法如下:
Step 1: 每次 SP 產生新的證據時,SP 會把上一個讀寫該次產生的證據所讀寫 的檔案的證據標示為可刪除。這邊指的標記可以是產生一個對映證據
的陣列或者其他方法,只要沒有更改證據內容皆可。
Step 2: 檢查第一筆證據是否可以刪除(IH 在第一筆證據刪除時一併刪除)。倘 若第一筆證據可以刪除則刪除,持續檢查下一筆證據是否可以刪除,
直到無法刪除。至此,證據縮減結束。
圖三-9 為一證據縮減的範例,圖三-9(a)為 SP 的初始狀態,SP 內共有 F1、
F2、F3 共三個檔案,四個證據,閃電符號即是標記為可刪除的標記。以圖三-9(a) 為例,第二筆證據讀寫了檔案 F2 後,在第四筆證據又對檔案 F2 進行讀寫,因此
檔案 F2 最新的雜湊值應記錄在第四筆證據,第二筆證據應標示為可刪除,如圖
中的閃電標記。圖三-9(b)為圖三-9(a)狀態後某個裝置讀寫了檔案 F3,SP 加入該
F1 F2 F3 F2 IH
F1 F2 F3 F2
IH F3
圖三-9(a)證據縮減範例-1(初始狀態)
圖三-9 (b)證據縮減範例-2(讀寫F3後)
圖三-9 (c)證據縮減範例-3(讀寫F1後)
F2 F3 F1
次讀寫 F3 的證據後,將上一次讀寫 F3 的證據標示為可刪除,由於第一筆證據還
無法刪除,所以無法進行證據縮減,五個證據皆須保留。圖三-9(c)為圖三-9(b)狀
態後有另一個裝置讀寫檔案 F1,SP 加入該次讀寫 F1 的證據後,將上一次讀寫
F1 的證據標示為可刪除,此時證據的前三筆皆標示為可刪除,因此只需保留後 三筆證據即可完成所有檔案的稽核。證據縮減完後,SP 保留的證據如
圖三-9(c)。
即便有了上述的證據縮減方法,還是可能遇到稽核的效能下降的問題。假設
SP 內有 N 個檔案,因為 SP 保存的證據讀寫的檔案必須包含所有的檔案,所以
SP 最少需儲存 N 個證據。當 N 越大時,每次稽核所產生的 Partial Hash Chain 平
圖三-9 證據縮減範例
均長度就會變長,稽核的效能就會越低。
原本證據只串接成一條雜湊鏈,現在將它分割成 K 條雜湊鏈,將每個檔案
的檔名取 Hash 再取 k 的餘數,使得每一個檔案都對應到唯一的雜湊鍊上。
圖三-10 為證據分割前後的示意圖,如圖三-10(b)分割後,只要有讀寫檔案 F1
的證據都串接在第一條雜湊鏈上。
共K條
F1 F1
IH
F2 F2
IH
FK Fk
IH
F1 F2 F3 Fk
IH
圖三-10(a) 分割證據前
圖三-10(b) 分割證據後 圖三-10 分割證據前後