------ 在无原生 TDE 支持下,如何实现等保三级与信创合规的静态数据保护
关键词:PostgreSQL TDE、透明数据加密、安当TDE、pg_tde、SM4、等保三级、信创、达梦兼容
一、问题背景:PostgreSQL 原生不支持 TDE
截至 PostgreSQL 16,官方仍未提供内核级透明数据加密(TDE)能力。这意味着:
- 所有数据文件(
base/、pg_wal/、global/)均以明文形式存储在磁盘; - 即使设置了强访问控制,一旦磁盘被盗、虚拟机镜像被复制、备份文件泄露,数据即完全暴露;
- 不符合《等保2.0》8.1.4.3 条款:"应采用密码技术保证重要数据在存储过程中的保密性"。
⚠️ 注意:
pgcrypto扩展仅支持应用层字段加密,非透明;- 表空间加密、文件系统加密(如 LUKS)无法满足"数据库感知"审计要求。
二、可行方案对比
| 方案 | 原理 | 优点 | 缺点 | 合规性 |
|---|---|---|---|---|
| 1. 应用层加密 (如 pgcrypto) | 应用调用 pgp_sym_encrypt() 加密字段 |
灵活、细粒度 | 需改代码、索引失效、性能差 | ❌ 不满足"透明"要求 |
| 2. 文件系统加密 (LUKS / BitLocker) | OS 层加密整个磁盘或分区 | 无需改 DB | DB 无法感知加密状态,审计困难 | ⚠️ 部分满足(需额外证明) |
| 3. 第三方 TDE 插件 (如 Cybertec pg_tde) | 修改 PG 内核,在 I/O 层加解密 | 透明、性能较好 | 社区版不稳定,商业版收费高 | ✅ 满足 |
| 4. 驱动级透明加密 (如 安当 TDE) | 在 OS I/O 驱动层拦截读写 | 无侵入、支持所有 PG 版本 | 需部署驱动 | ✅✅ 强合规 |
✅ 推荐路径 :
信创/政企场景 → 选择驱动级 TDE ;
互联网/云原生场景 → 评估 pg_tde 商业版。

三、方案一:开源社区方案 ------ pg_tde(Cybertec)
3.1 技术原理
- 修改 PostgreSQL 存储管理器(smgr),在
mdread/mdwrite函数中插入 SM4/AES 加解密逻辑; - 每个表空间可独立设置加密密钥;
- 密钥由外部 KMS(如 HashiCorp Vault)管理。
3.2 部署示例
bash
# 1. 编译带 TDE 的 PostgreSQL(需源码)
git clone https://github.com/cybertec-postgresql/pg_tde.git
cd pg_tde
./configure --with-tde
make && sudo make install
# 2. 初始化集群并启用 TDE
initdb -D /var/lib/pgsql/data --tde-key-id=mykey
# 3. 创建加密表空间
CREATE TABLESPACE encrypted_ts LOCATION '/tde_data' WITH (encryption_key_id='mykey');
CREATE TABLE users (...) TABLESPACE encrypted_ts;
3.3 局限性
- 仅支持 PG 15+,旧版本需 backport;
- WAL 日志未加密(存在泄露风险);
- 无国密算法支持(默认 AES);
- 社区版无 HA/备份集成。
📌 适用场景:技术能力强、可接受定制维护的互联网企业。
四、方案二:企业级方案 ------ TDE(驱动级透明加密)
4.1 架构优势
- 无需修改 PostgreSQL:兼容 PG 9.6 ~ 16 所有版本;
- 全盘加密 :覆盖
base/、pg_wal/、pg_tblspc/、global/; - 国密合规:使用 SM4 算法,密钥由 TCM/HSM 保护;
- 信创全栈支持:麒麟 + 飞腾 + 达梦兼容模式。
4.2 工作原理
+---------------------+
| PostgreSQL 进程 |
| (读写 base/12345) |
+----------+----------+
↓
+---------------------+
| Linux VFS 层 |
+----------+----------+
↓
+---------------------+
| 安当 TDE 驱动 | ←─ 拦截 read/write 系统调用
| - 明文 → SM4 密文 |
| - 密钥由 KMS 动态获取 |
+----------+----------+
↓
+---------------------+
| 物理磁盘 |
| (所有文件为 SM4 密文) |
+---------------------+
4.3 部署步骤(麒麟 V10 + PG 13)
bash
# 1. 安装安当 TDE
sudo rpm -ivh andang-tde-3.2-kylinv10.aarch64.rpm
# 2. 配置加密目录(PG 数据目录)
echo 'MOUNT_POINTS=/var/lib/pgsql/13/data' >> /etc/andang/tde.conf
# 3. 重启 PostgreSQL
sudo systemctl stop postgresql-13
sudo systemctl start postgresql-13
# 4. 验证
hexdump -C /var/lib/pgsql/13/data/base/16384/16385 | head
# 输出应为乱码(SM4 密文)
4.4 解密机制
- 自动解密:PostgreSQL 进程读取文件时,TDE 驱动自动用 SM4 解密后返回内存;
- 密钥保护:数据加密密钥(DEK)由安当 KMS 用 SM2 公钥加密存储,运行时通过 TCM 芯片解封;
- 紧急恢复:支持离线解密工具(需授权 USB Key)。
✅ 效果:
- 应用、DBA、SQL 查询完全无感;
- 磁盘镜像、备份文件无法直接挂载读取。
五、典型应用场景
场景1:政务云 PostgreSQL 数据库等保合规
- 需求:满足等保三级"静态数据加密"要求;
- 方案:部署 TDE,加密整个 PG 数据目录;
- 成效 :测评时提供 SM4 加密证明 + KMS 密钥管理日志,一次性通过。
场景2:金融行业测试库脱敏+加密
- 需求:从生产库同步数据到测试环境,需同时脱敏和加密;
- 方案 :
- 生产库: DBG 动态脱敏 + TDE 加密;
- 测试库:使用脱敏后数据初始化,同样启用 TDE;
- 价值:即使测试服务器被攻破,数据仍不可读。
场景3:信创迁移中的 PostgreSQL 替代过渡
- 背景:某单位正从 Oracle 迁移至达梦,但部分模块暂用 PostgreSQL;
- 要求:所有数据库必须支持国密加密;
- 方案: TDE 统一为 PG 和达梦提供 SM4 加密,实现安全策略一致。
六、性能影响与优化
| 操作 | 性能损耗(SM4 软件实现) | 飞腾 CPU(SM4 指令加速) |
|---|---|---|
| INSERT(1万条) | ≈ 8% | ≈ 2% |
| SELECT(复杂查询) | ≈ 5% | ≈ 1% |
| WAL 写入 | ≈ 10% | ≈ 3% |
💡 优化建议:
- 使用 SSD + 飞腾/鲲鹏 CPU(硬件 SM4 加速);
- 将
pg_wal单独挂载到高性能加密卷;- 避免对临时表空间加密(可配置排除)。
七、总结:选型建议
| 用户类型 | 推荐方案 | 理由 |
|---|---|---|
| 互联网公司 | pg_tde(商业版) | 技术可控,成本敏感 |
| 金融/政务/能源 | TDE | 合规强、信创支持、免改造 |
| 混合云环境 | TDE + 云厂商 KMS | 统一密钥策略,跨云一致 |
🔒 核心原则 :
透明加密不是"能不能做",而是"是否满足合规审计"。在等保、密评、关基条例面前,驱动级 TDE 是最稳妥的选择。