全密态加密是一种数据加密技术,旨在确保数据在整个生命周期(包括传输、运算和存储)中始终保持加密状态,从而保护数据隐私。这种加密技术不仅涉及到数据的存储加密,还包括数据在处理过程中的加密,确保即使在数据传输和计算过程中,攻击者也无法获取有效的数据信息。全密态加密技术的实现依赖于特定的密钥管理机制,包括客户端主密钥(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));