『堅如磐石的 PieCloudDB』:透明加密模組的設計與實現

語言: CN / TW / HK
導讀:2月17日,由中國開源軟體推進聯盟PostgreSQL分會&中科院軟體所&CSDN聯合舉辦的“中國 PostgreSQL 資料庫生態大會”盛大召開。拓數派(OpenPie)作為冉冉升起的新一代雲原生分散式資料庫廠商,受邀參加本屆大會。 

本文為演講的文字版摘要,主要內容包括: 

  • 透明加密的設計思路 
  • 透明加密模組的架構 
  • 三級金鑰的實現 
  • 金鑰管理的實現 

分享嘉賓:PieCloudDB 資深技術專家 王淏舟 

回訪視訊: http://www.bilibili.com/video/BV1X54y1w76L/ 

PPT連結: http://openpie.com/download/PostgresConf_PieCloudDB_Database_Unbreakable.pdf 

 

一、資料安全的重要性 

今年來,關於資料安全的政策和熱點新聞層出不窮。無論是政府、企業或是各個廠商都對資料安全給予了很高的重視。過往的案例表明,如果出現敏感資料的洩露或丟失,將給企業和使用者帶來巨大的損失。 對於雲上使用者來說,雲上資料的安全更是其最關注的需求之一。 

作為一款存算分離的雲原生資料庫產品,PieCloudDB 做到了三大區域的安全特性設計,全鏈路地保證使用者資料安全,包括: 

  • 雲原生安全 
  • 儲存安全 
  • 計算安全 

其中,針對雲原生安全,PieCloudDB 實現了傳輸層加密和快取資料加密。作為一款雲原生的 eMPP(彈性大規模平行計算)資料庫,資料會在不同節點間進行傳輸,因此對於傳輸過程的資料加密至關重要。在執行使用者查詢時,PieCloudDB 會生成相應的快取資料,用以加速查詢結果的生成。快取資料中會包含一部分的使用者資料,對快取資料的加密將更好的保證使用者的資料安全。 

針對儲存安全,元資料作為資料庫的「心臟」,一旦出現丟失或損壞,將導致資料庫的不可用。為此,PieCloudDB 實現了對於元資料的持久化儲存。PieCloudDB 的使用者資料被多副本加密儲存,以保證使用者資料的徹底安全。 

針對計算安全,PieCloudDB 採用 eMPP 存算分離架構,並支援ACID,在叢集單一節點或更多節點失效的情況下,不會造成使用者資料的丟失或損壞。 

本文將著重介紹 PieCloudDB 是如何通過透明加密模組實現雲原生安全層的快取資料加密,和儲存安全層的使用者資料加密儲存的。 

二、PieCloudDB 透明加密設計思路 

PieCloudDB 打造的透明加密模組讓資料從傳統的明文儲存轉為加密儲存,可以有效地防止資料被系統運維人員直接讀出,保證儲存在資料檔案中的資料安全。透明加密是指金鑰生成、金鑰管理和加解密過程由資料庫管理系統自動完成,使用者無感知。也就是說,透明加密的加密和解密過程對使用者來說就是透明的,使用者讀寫資料非常方便,資料寫入自動加密,讀取自動解密。此外,PieCloudDB 的透明加密模組不依賴於公有云/私有云/系統自帶的加密,真正實現了自主可控,同時滿足資料安全審計和業務安全審計等使用者合規需求。 

PieCloudDB 透明加密模組的設計和實現過程中,研發團隊充分考慮和總結了使用者需求與技術挑戰,讓透明加密模組實現了以下幾個特性: 

  • 使用者側,PieCloudDB 透明加密模組符合審計流程,做到使用者無感知,能夠與使用者業務擬合,無需對業務進行改變。 
  • 研發側, PieCloudDB 透明加密模組作為一個獨立模組,與資料庫儲存模組結合,不影響核心迭代,方便後續擴充套件,無歷史包袱。 

三、PieCloudDB 透明加密的實現細節 

PieCloudDB 透明加密模組採用目前主流的多級金鑰機制和有效的金鑰管理機制防範了資料洩露風險,確保了使用者的資料安全。每個租戶資料完全隔離,擁有獨立的金鑰體系。 

金鑰管理的實現 

在 PieCloudDB 中,主金鑰是由使用者自主生成、儲存與控制的,保存於使用者的信任域中,PieCloudDB 的透明加密模組不會嘗試訪問主金鑰,確保主金鑰的安全。 

此外,PieCloudDB 的最小加密單位為資料頁,每個資料頁都由單個金鑰進行加密。加密金鑰支援輪換,可以按一段時間、或某些條件進行新的金鑰的輪換,來最大化保證資料安全。同時,在輪換時,需要避免中斷服務,無需停機。 

PieCloudDB 採用三級金鑰機制,輪換上級金鑰無需重新加解密資料,只需加解密金鑰。同時,PieCloudDB 透明加密模組支援按頁/按表輪換金鑰,避免整個使用者叢集停機輪換金鑰,最大限度的減少對使用者業務的影響。 

金鑰儲存是透明加密模組中非常重要的部分,一旦金鑰丟失,資料將無法解密,從而徹底無法訪問。PieCloudDB 透明加密模組的所有次級金鑰均進行了持久化儲存,保證金鑰的安全,底層頁級金鑰與資料共存,資料多副本備份,防止頁級金鑰的丟失造成無法挽救的損失。此外,由於頁級金鑰可能會很大,頁級金鑰與資料的共存,也能避免在訪問金鑰時頻繁訪問持久化儲存,減少查詢的延遲。 

PieCloudDB 多級金鑰

在多級金鑰的過程中,使用者會在使用者信任域中建立主金鑰,並儲存在信任域中。任何情況下,主金鑰都會被保持在使用者信任域中。當建立新的租戶時,透明加密模組會建立新的租戶金鑰,將金鑰送進信任域中,用主金鑰進行加密,並將加密後的金鑰儲存在 PieCloudDB 的持久化儲存區域中。 

當用戶建立表時,PieCloudDB 的透明加密模組會自動生成表金鑰,由租戶金鑰進行加密,並存儲在 PieCloudDB 的持久化儲存區域中。 當有資料寫入、需要建立一個新的資料頁時,透明加密模組會建立一個新的頁金鑰,由表金鑰進行加密,並將加密後的頁金鑰儲存和資料一起儲存在資料儲存區域中。選擇儲存到資料儲存區域而非持久化儲存區域中,是為了減少持久化儲存區域的訪問密度,減少持久化儲存區域的負載,降低使用者查詢延遲,提升效能。當對頁進行刪除時,會將對應的金鑰一併刪除。 

透明加密的模組化實現 

PieCloudDB 透明加密採用模組化的實現。優化器、執行器將不會感知到透明加密模組的存在。在持續並行開發優化器、執行器等資料核心模組時,無需考慮對透明加密模組的適配。當進行升級時,雙方也不耦合,符合雲原生解耦的特性。 

此外,透明加密模組完美支援 PieCloudDB 的儲存引擎「簡墨」,最大化利用儲存效能,減少加密導致的效能損失。根據實測資料,透明加密導致的效能損失對使用者查詢造成的效能影響微乎其微,可忽略不計。 

根據使用者需求,PieCloudDB 實現了可插拔加密演算法庫,針對不同的硬體,能夠支援不同的加密演算法,充分利用硬體加速。PieCloudDB 提供了多種型別的高強度加密演算法,包括DES、AES、RC4等。同時,針對國內使用者,增加了對國密標準的支援,符合審計流程和合規要求。此外,為了做到真正的自主可控,加密演算法做到了可選。 

PieCloudDB 透明加密模組與使用者原有業務完全擬合。在透明加密後,不會對原有使用者的查詢\業務造成影響,使用者無需對原有業務進行更改,做到開箱即用。外圍元件也無需針對透明加密模組進行適配,例如使用ETL工具對資料進行匯入時,資料會自動加密;匯出接入ETL時,資料已經自動完成解密。不會發生 ETL 讀到加密的資料導致任務的失敗的情況,ETL 也不會感知到透明加密模組的存在。 

透明加密的實現 

  • 透明加密元件架構 

首先,我們來了解一下 PieCloudDB 透明加密元件的架構,當用戶發起一個查詢請求時, PieCloudDB 優化器會生成執行計劃樹,執行器將根據此計劃樹進行執行。當需要訪問資料時,執行器將訪問 PieCloudDB 儲存引擎「簡墨」提供的儲存介面,通過儲存介面訪問資料,並對資料進行查詢、插入等操作。PieCloudDB 在儲存介面與資料訪問中間添加了一層透明加密元件。元件位於儲存介面的下面,從而做到了優化器和執行器對模組的無感知。 

PieCloudDB 的透明加密元件包括三個模組:加密模組、金鑰管理模組、和函式介面。為了實現加密演算法庫的可插拔,加密模組獨立於金鑰管理模組,使 PieCloudDB 能夠針對不同的透明加密演算法庫提供不同的介面,並保證內部的加密流程的統一性。這樣的設計也可以減少 bug 的產生、讓整個開發流程更順滑,使使用者的行為也更加的統一。 

透明加密元件架構 

  • 租戶金鑰的生成和讀取 

租戶金鑰的生成主要分為以下幾個步驟。當租戶建立請求,PieCloudDB  透明加密模組將使用強隨機演算法生成新的主金鑰,儲存在使用者信任域中。主金鑰會對其進行加密,生成租戶金鑰。整個加密過程是在使用者的信任域中完成的。PieCloudDB 不會嘗試訪問主金鑰。使用者信任域返回加密的租戶金鑰後,會被儲存在持久化儲存區域中。 

 

租戶金鑰的生成 

當需要使用租戶金鑰時,PieCloudDB 透明加密模組會將加密後的金鑰從持久化儲存區域讀出,送入使用者信任域中,使用主金鑰將加密後的金鑰進行解密,並將解密後的金鑰儲存在金鑰儲存區中。此外,PieCloudDB 透明加密模組還在這裡設定了定時器,在經過一定時間後,金鑰會被自動銷燬,避免對解密金鑰的持有,減少金鑰洩露風險。 

租戶金鑰的讀取 

  • 次級金鑰的生成與讀取 

包括表金鑰和頁金鑰在內的次級金鑰的生成方式與租戶金鑰類似。當用戶發起查詢請求時,PieCloudDB 透明加密模組將使用強加密演算法隨機生成金鑰,並用上級金鑰進行加密,並存儲到相對應的儲存區域。 

次級金鑰的生成 

當需要進行次級金鑰的讀取時,與租戶金鑰的讀取過程類似,PieCloudDB 透明加密模組會將資料從對應的儲存區域將加密後的金鑰讀取出,用上級金鑰進行解密。 

頁級金鑰的處理會有所不同,解密後的頁級金鑰會被儲存在記憶體,而非儲存區域中,避免對儲存區域造成負擔。定時器的存在,會讓金鑰在一段時間後徹底從記憶體中銷燬。在此過程中,透明加密模組也會為金鑰新增隨機值,避免金鑰從記憶體中被讀取,減少洩露風險。任何金鑰都不會被儲存在磁碟或緩衝區域,避免金鑰因為某種不可控因素而洩露。 

次級金鑰的讀取 

通過透明加密等安全模組,PieCloudDB 實現了檔案級別的安全性保護,有效避免了資料的洩露,為使用者打造了更加可靠的資料安全堡壘。