第五章、 系統實作
5.1 代理伺服器及終端機上的結果資訊
5.1.1 建立資料表、插入及查詢資料
在關聯式資料庫系統上建立資料表時,使用的 SQL 查詢指令為 create table book( filename text, filedata blob );
此時,資料庫中建立了 book 名稱的資料表,其中包含 text 型態的名稱為 filename 的欄 位以及 blob 型態的名稱為 filedata 的欄位。之後插入資料到此資料表時,資料內容都以 明文方式儲存。為了區分建立明文及密文資料表的差別,之後想要檢查完整性的欄位中 加上( ic )指令。filedata 欄位內容想要檢查完整性時,欄位名稱及檔案型態之間要加上一 個 ic,如圖 8 所示。此時,代理伺服器會把 SQL 查詢封包攔截下來後改寫成增加兩個 加密資料時需要的 IV ( initialization vector ) 欄位(也就是要檢查完整性的欄位名稱接著 加上 salt ( filedatasalt ) )及認證碼 ( integrity_tag )欄位後在資料庫建立資料表。因此資料 庫建立完成的資料表欄位中,明文資料表建立時的兩個欄位 filename、filedata 變成四個 欄位 filename、filedata、filedatasalt 以及 integrity_tag。其中,不需要加密的欄位( filename ) 資料型態為依照使用者傳送的 SQL 查詢指令中的型態、需要加密資料的欄位型態及認 證碼( integrity_tag )欄位型態都預設為 blob 的型態、IV ( initialization vector )的欄位為 unsigned big integer 的型態。
圖 8 建立資料表及改寫欄位內容
圖 9 插入資料
使用者插入資料到資料庫時,使用的 SQL 查詢指令為 insert into book values (‘file.txt’, ‘test’ );
代理伺服器攔截 SQL 查詢封包後取出對應到 filedata 欄位的資料內容產生認證碼及加密 filedata 欄位的資料。圖 9 顯示 filedata 欄位的資料( test ) 產生認證碼( integrity_tag )的 結果。認證碼的內容中逗點前面的值為 metadata(Tm)的值、逗點後面的值為 W 的值。接 著代理伺服器把攔截下來的原本資料內容( ‘file.txt’, ‘test’ )改寫成(‘file.txt’, X’8D7DB
….40A’, 11071……0743, X’323230……….340A’),其中第一個 filename 欄位在建立資 料表時已經決定以明文方式儲存,因此對應到 filename 欄位的資料是 file.txt,不需要加 密或是改寫而放回原來的值、第二個欄位為插入 filedata 欄位的資料 ( test )加密後編碼 成 16 進位方式的結果、第三個欄位是利用 AES-CBC mode 的技術,加密資料時參與的 IV ( initialization vector )值,這值以亂數方式產生並寫到代理伺服器新增的 filedatasalt
圖 10 產生證明碼過程
欄位、第四個欄位是產生好的認證碼的欄位以 16 進位方式編碼,最後把改寫後的 SQL 查詢指令傳送到資料庫。
當使用者想要驗證資料表 book 中儲存的 filename 等於 file.txt 的資料完整性時,使 用的 SQL 查詢指令為
select * from book where filename=‘file.txt’;
代理伺服器攔截此 SQL 查詢封包後把*改寫成 book 資料表中的所有欄位,包含 filename、
filedata、filedatasalt 以及 integrity_tag,之後把此 SQL 查詢指令傳送到資料庫查詢符合 的資料。資料庫回傳 book 資料表中 filename 等於 file.txt 的資料,圖 10 中顯示 Results from
server 底下的資料為資料庫回傳的資料。filename 欄位以明文儲存而回傳資料 file.txt 也 是以明文方式回傳。filedata 欄位是以密文方式儲存,而回傳資料時以亂碼方式呈現。
filedatasalt 欄位中儲存著加解密資料時,AES-CBC mode 中會參與的 IV,而最後一個欄 位是運算證明碼時需要參與的認證碼。saltfromserver 是 filedatasalt 欄位中的值。代理伺 服器利用 IV( filedatasalt ) 及 master key 解密資料,圖 10 顯示 decrypted data 是資料庫 回傳的 filedata 欄位資料解密後的結果。完整性驗證過程中,要產生一些亂數來計算證 明碼,其中 s 為從 ZN*中隨機選擇、c 為 n 個區塊資料中選擇一個區塊資料、利用 s 計 算 gs 等於 gs、使用 k1 做 pseudorandom permutation 與 k2 為計算係數值使用。最後產 生證明碼( proof ),其中包含四個數值,第一個數值為資料個數、第二個為資料的總共 資料區塊個數、第三個則是 PDP 中產生 proof 值的 T、最後一個數值為 的值。圖 11 顯 示取出 proof 的所有參數產生驗證結果,check result 等於 1 是驗證結果為正確, 否則表 示非授權使用者包含惡意資料庫管理者或是外部攻擊者有修改使用者的資料或是認證
圖 11 驗證證明碼過程
圖 13 資料已被修改後驗證完整性
圖 14 資料已被修改後終端機上查詢的結果
碼。最後可以看到符合使用者查詢資料解密後的結果(Decrypted results),並且代理伺服 器把結果回傳給使用者。圖 12 是終端機上顯示符合使用者要查詢的資料結果。