工作原理
数据在写入磁盘、对象存储、数据库或备份之前先加密。密钥存放在密钥管理服务(KMS)或硬件安全模块中,与数据分离。常见做法是信封加密:KMS 签发数据加密密钥(DEK),应用用 DEK 加密记录,KMS 再用长期密钥加密密钥(KEK)包裹 DEK,密文同时保存包裹后的 DEK 和密钥 ID。
使用场景与权衡
数据库、对象存储、备份、快照、笔记本和移动介质都应加密静态数据,许多合规框架也强制要求。它应与传输层 TLS 配合,对高敏感字段再做字段级加密。密钥管理是主要成本:策略错误、密钥丢失和跨区域复制都是常见故障。加密还会破坏索引、排序和分析,确定性加密又会泄露数据模式。静态加密不能替代访问控制,应用仍须执行授权检查。
示例与误区
const { Plaintext, CiphertextBlob, KeyId } =
await kms.generateDataKey({ KeyId: kekId, KeySpec: 'AES_256' });
const ciphertext = encrypt(Plaintext, record);
await db.put({ id, ciphertext, keyId: KeyId, wrappedKey: CiphertextBlob });
用 DEK 加密记录,保存密文、包裹后的 DEK 与 KeyId;解密时先解包 DEK,且绝不记录明文密钥。静态加密无法阻止 SQL 注入、被攻陷的应用或拥有 API 权限的内部人员;全盘加密只保护被盗磁盘,而非运行中的服务器。相关概念包括密钥轮换、TLS 和密钥管理。