全密態加密
更新時間 2025-02-05 09:37:18
最近更新時間: 2025-02-05 09:37:18
分享文章
本頁介紹天翼云TeleDB數據庫中全密態加密。
全密態加密是一種數據加密技術,?旨在確保數據在整個生命周期(?包括傳輸、?運算和存儲)?中始終保持加密狀態,?從而保護數據隱私。?這種加密技術不僅涉及到數據的存儲加密,?還包括數據在處理過程中的加密,?確保即使在數據傳輸和計算過程中,?攻擊者也無法獲取有效的數據信息。?全密態加密技術的實現依賴于特定的密鑰管理機制,?包括客戶端主密鑰(?CMK)?和數據加密密鑰(?CEK)?的使用,?其中CMK用于加密CEK,?而CEK則用于加密用戶數據,?從而形成一個完整的數據加密體系。
全密態加密方案
全密態加密的實現原理是用戶發起查詢任務指令,在客戶端按照與數據相同的加密策略(加密算法,加密密鑰等)完成加密。參數加密完成后整個查詢任務被變更成?個加密的查詢任務并發到數據庫服務端。查詢得到的結果仍然為密?,并最終返回客戶端進?解密。其核心在用戶自己持有數據加解密密鑰且數據加解密過程僅在客?側完成,數據以密?形態存在于數據庫服務側的整個生命周期過程中,并在數據庫服務端完成查詢運算。
開啟全密態加密
您可參考如下操作開啟全密態加密。
管控側操作:
- 以用戶名和密碼登錄TeleDB-DCP管理控制臺。
- 進入TeleDB-DCP控制臺管理頁面,開通實例。您可參考《安裝部署》中實例服務初始化及實例開通章節開通實例。
- 在實例開通頁面,填寫基本信息頁面,打開KMS開關,選擇KMS機器。
說明KMS開啟后無法關閉,選擇后無法更改。
數據庫側操作:
- 在安裝?錄下新建 etc/localkms ?錄?于存儲CMK?件。
- psql使?-C開啟全密態。
psql -dxxx -pxxx -hxxx -C
- 創建主密鑰CMK。
CREATE CLIENT MASTER KEY cmk_1 WITH (KEY_STORE = LOCALKMS , KEY_PATH = "kms_1", ALGORITHM = SM2);
- 創建數據密鑰CEK。
CREATE COLUMN ENCRYPTION KEY CEK_1 WITH VALUES (CLIENT_MASTER_KEY = cmk_1,ALGORITHM = SM4_SM3);
- 創建加密表,指定加密列。
CREATE TABLE creditcard_info ( id_number int,name text encrypted with (columns_encryption_key = cek_1, encryption_type =DETERMINISTIC), credit_card varchar(19) encrypted with (columns_encryption_key = cek_1,encryption_type = DETERMINISTIC)); - 執?SQL(僅?持SELECT、UPDATE、INSERT、DELETE)。
使用示例
-- 創建CMK主秘鑰
CREATE CLIENT MASTER KEY cmk12 WITH (KEY_STORE = localkms, KEY_PATH ="localkms-1" , ALGORITHM = SM2);CREATE CLIENT MASTER KEY cmk2 WITH (KEY_STORE = localkms, KEY_PATH = "localkms-1" , ALGORITHM = SM2);
-- 創建CEK數據秘鑰
CREATE COLUMN ENCRYPTION KEY cek1 WITH VALUES (CLIENT_MASTER_KEY = cmk1, ALGORITHM = SM4_SM3);CREATE COLUMN ENCRYPTION KEY cek2 WITH VALUES (CLIENT_MASTER_KEY = cmk2, ALGORITHM = SM4_SM3);DROP CLIENT MASTER KEY cmk1 CASCADE
-- 創建加密表,col1未加密,col2使?cek1加密,col3和col4使?cek2加密
CREATE TABLE IF NOT EXISTS tbl1 (col1 INT,col2 INT ENCRYPTED WITH (COLUMNS_ENCRYPTION_KEY = cek1, ENCRYPTION_TYPE =DETERMINISTIC),col3 TEXT ENCRYPTED WITH (COLUMNS_ENCRYPTION_KEY = cek2, ENCRYPTION_TYPE = DETERMINISTIC),col4 VARCHAR(20) ENCRYPTED WITH (COLUMNS_ENCRYPTION_KEY = cek2, ENCRYPTION_TYPE = DETERMINISTIC));