• 沒有找到結果。

第四章、 系統設計

4.1 系統架構

圖 4 顯示 CryptDB 系統架構,其中有四個角色,包含客戶端、應用伺服器、代理 伺服器及一般關聯式資料庫。比較於一般 client and server 系統,CryptDB 系統多增加了 兩個可信任的第三方認證者,分別是 application server 及 MySQL proxy server。利用 application server,使用者與 MySQL proxy server 之間溝通。並且使用者及 SQL 資料庫 之間增加了 MySQL proxy server,可以減輕使用者的計算及傳輸負擔。

 Application server

Application server 是指終端機,使用者只要在終端機下指令的方式,與資料庫 的代理伺服器連線,以便可以建立資料庫、資料表以及查詢資料,包含插入、更新、 到要特殊處理的指令,例如:create table book ( id integer, name enc text ),此建立資 料表指令的 name 欄位中,找到 enc( encryption ) 時,代表 book 資料表中的 name 資料欄位之後要做特殊處理。代理伺服器會 name 欄位分別建立成 keyword search、

order preserving 以及 add 三個資料欄位。代理伺服器會把之後使用者插入到 book 資料表的 name 欄位內容分別用不同加密方式加密後分別儲存到三個 keyword search、order preserving 以及 add 欄位。相對地,如果建立以明文方式儲存的資料

圖 4 系統架構

代理伺服器接收到 SQL 查詢指令後利用 Annotated Schema 中自訂的 C++library 加 密資料。並且利用 User-Defined Functions,把 SQL 查詢指令改寫成自訂的欄位格式後傳 送資料到資料庫。使用者要查詢資料時,代理伺服器利用 Annotated Schema 中自訂的 C++library 解密資料之後改寫使用者傳送的 SQL 查詢指令,最後把解密後的資料傳送給 使用者。由於 CryptDB 系統處理文字資料型態時,因資料欄位中只儲存 keyword 而限制 keyword 長度為 15bytes。每 15bytes 的資料長度利用 delimiter 隔開後才能把文字資料儲 存到資料庫。我們想要在 Annotated Schema 中加上資料完整性檢查功能,必須要能夠儲 存完整的整份資料而不是文件中的資料被 delimiter 隔開。因此我們從 Annotated Schema 中,移除 keyword search、order preserving 以及 add 功能,達到能夠儲存完整的整份資 料,且加上完整性驗證的功能達到資料完整性驗證的功能。為了區分 CryptDB 系統與我 們修改後的差別,需要特殊處理的欄位中的指令 enc(encryption)改成 ic(integrity check)。

系統架構中,介紹惡意資料庫管理者外洩資料給其他非授權者的威脅,代理伺服器 從應用伺服器接收到的 SQL 查詢指令改寫,也就是加密使用者想要保護隱密資料的內 容。CryptDB 系統保證,資料庫管理者不會得到加密資料的金鑰。因此 CryptDB 系統可 以防範好奇又資料庫存取權限最高的資料庫管理者或是外部攻擊者不會以明文方式獲 得敏感性資料,也確保使用者的隱私資料不會外洩給任何人。我們的目標要達到資料的 隱密性以外資料的完整性以及資料可得性。代理伺服器接收到插入、或是更新等的 SQL 查詢指令時,利用自己的私密金鑰加密使用者資料,並且改寫成加密後自訂的資料欄位 格式寫入資料庫。此方法允許像明文資料庫系統上做 SQL 查詢一樣,可以做加密資料

的 SQL 查詢。由於 CryptDB 系統想要處理多種不同功能,因此作者提出了新加密資料 方式( onions of encryption )。為了達到更高的安全性,此加密方式除了加密要特殊處理 的資料內容以外也一併加密了資料表以及資料欄位名稱。因此會出現了幾個問題,第七 章節特別介紹會出現的兩個問題。因此 onions of encryption 修改成簡單的 AES 加密方式。

雖然我們的加密資料方式不會隱藏資料表名稱、資料欄位名稱、資料表的結構、資料筆

mysql -u lichun -ppassword -h 140.113.207.138 -P 3307 cryptdbtest

其中-u 代表 user account,後面輸入的 lichun 為使用者帳號、-p 代表 user password,

後面輸入的 password 為使用者密碼、-h 代表 host(要連線的資料庫 IP),後面輸入的 140.113.207.138 為要連線的資料庫 IP、-P 代表 Port,3307 為代理伺服器的 port(資料庫 的 port 預設為 3306)、最後 cryptdbtest 為要連線的資料庫名稱),透過這樣的方式,使用 者透過代理伺服器與資料庫溝通。如果透過使用者介面登入時,我們幫使用者設計好介

圖 5 資料完整性驗證的系統流程

表時有著 ic 指令欄位中的資料內容產生認證碼及加密資料,並且把原來的 SQL 查詢封包格式改寫成新增認證碼的欄位後密文資料與認證碼一併儲存 到資料庫。

第三階段:我們設計的使用者介面上顯示出資料表中儲存的所有 primary key 的欄位,

而使用者可以選取 primary key 欄位後面的下載、驗證完整性、更新以及刪 除資料的功能,透過 Web server 送出使用者想要查詢的訊號。

第四階段:代理伺服器收到 SQL 查詢指令後改寫成當初儲存到資料庫時的資料結構格 式,再把 SQL 查詢指令傳送到資料庫。

第五階段:代理伺服器從資料庫接收到加密資料及認證碼後先把資料解密,且產生證 明碼( proof )。為了避免重送攻擊,產生認證碼使用的參數,每次以亂數方 式產生。產生完證明碼後驗證此證明碼,並檢查結果及解碼後的明文一併傳 送給 Web server。

第六階段:Web server 收到檢查結果後利用網頁訊息視窗,顯示驗證結果。如果使用者 要下載資料時,解密後的檔案傳送給使用者。並且上傳、更新以及刪除資料 成功時,透過網頁訊息視窗顯示完成這些查詢的結果。

相關文件