一、CMK(Customer Master Key)
翻译
-
客户主密钥
-
也常称为:主密钥 / 根密钥
英文
- Customer Master Key
本质
-
用来保护其他密钥的密钥
-
不直接用于数据加解密
特点
-
长期存在
-
安全级别最高
-
一般存放在:
-
KMS(云密钥管理服务)
-
HSM(硬件安全模块)
-
本地安全文件(仅限低安全场景)
-
作用
-
只做一件事 :
👉 加解密 CEK
二、CEK(Column Encryption Key / Data Encryption Key)
翻译
-
列加密密钥
-
也可泛指:数据加密密钥
英文
-
Column Encryption Key
-
在某些体系中也叫 DEK(Data Encryption Key)
本质
- 真正用于数据加解密的密钥
特点
-
生命周期短
-
可轮换
-
明文通常不会落盘
-
使用时在客户端内存中存在
作用
-
对数据库列数据进行:
-
加密(INSERT / UPDATE)
-
解密(SELECT)
-
三、CMK 与 CEK 的关系(一句话版)
CMK 管 CEK,CEK 管数据
或者更直白:
CMK 不碰数据,CEK 不暴露主密钥
四、典型加解密流程(以 JDBC 客户端加密为例)
1️⃣ 初始化阶段
-
客户端生成 CEK
-
使用 CMK 加密 CEK
-
加密后的 CEK 存储在:
-
数据库系统表
-
或密钥配置表中
-
👉 数据库里永远不会有 CEK 明文
2️⃣ 写数据(INSERT / UPDATE)
-
JDBC 从数据库读取 加密的 CEK
-
调用 CMK 解密出 CEK(在内存中)
-
使用 CEK 加密列值
-
密文写入数据库
3️⃣ 读数据(SELECT)
-
JDBC 读取密文列
-
使用 CEK 解密
-
返回明文给应用
五、在 openGauss Client Logic 中的对应关系
| 概念 | openGauss 中对应 |
|---|---|
| CMK | CREATE CLIENT MASTER KEY |
| CEK | CREATE COLUMN ENCRYPTION KEY |
| 加密执行 | JDBC ClientLogic + JNI |
| 密钥存储 | LOCAL / KMS(通过 KeyAdpt) |