工作原理
轮换用新密钥替换旧密钥,同时保证旧密钥加密的数据仍可解密。生产系统为密钥编号,并在密文中记录密钥 ID。应用在重叠窗口内仍可用旧密钥解密,后台任务再把数据重新加密,或用新密钥重新包裹。信封加密下,轮换 KEK 只需重新包裹 DEK,不必重写每条记录。
使用场景与权衡
应按计划轮换,也应在怀疑泄露、掌握密钥的人员离职、算法或参数过时后立即轮换。证书和 TLS 密钥的轮换频率通常高于数据密钥。轮换缩小泄露影响面,但仍需配合吊销来立即阻止旧密钥继续使用。轮换会增加运维复杂度:遗漏密钥 ID、缓存旧密钥或重加密中断都可能造成故障。过早删除旧密钥会让历史备份无法恢复,必须等待备份保留期结束;每次轮换后都应监控解密错误。
示例与误区
const [version, payload] = ciphertext.split(':', 2);
const key = version === 'v2' ? keys.current : keys.previous;
const plaintext = decrypt(key, payload);
新记录写入 v2: 前缀,后台任务重写旧行,确认剩余为零后再停用 v1。轮换不能清除已经获得持久访问权限的攻击者,还需调查并吊销其凭证;在信封加密下轮换 KEK 也不需要解密所有记录。相关概念包括静态数据加密、密钥管理和 TLS。