01 · 为何需要轮换
长期不变的密钥会累积三类风险,使"定期轮换"成为DNSSEC运维的硬性要求:
- 密钥寿命与算力演进:密码学强度随时间下降,需以轮换引入更长密钥/更强算法(RFC 9364路线图)。
- 私钥泄露:一旦签名私钥泄露,攻击者可为任意记录伪造有效签名,必须快速轮换(应急轮转)。
- 运营韧性:定期演练轮转,确保"真出事时能换";根KSK轮转(2018)即是对全生态轮换能力的一次压力测试。
ZSK与KSK的轮换频率差异:ZSK仅签普通数据、泄露影响限于本区且不影响父区DS,故可按RFC 6781相对高频(如按月/季)轮转;KSK被父区DS背书,轮转须同步父区,故低频(如按年)。这也是采用ZSK/KSK分离的核心理由——把"高频低风险"与"低频高影响"解耦。
02 · 轮转类型(RFC 6781)
RFC 6781定义了DNSSEC密钥轮转的基本方法,按"是否双签名/双DS重叠"区分:
| 类型 | 方法 | 适用 |
|---|---|---|
| ZSK Pre-Publish (预发布) | 先将新ZSK发布(不立即签名),待全网缓存旧签名失效后,再切换新ZSK签名并撤销旧ZSK,全程新旧重叠。 | ZSK常规轮转,安全且平滑 |
| ZSK Double-Signature | 新旧ZSK同时签署RRset一段时间,再撤旧。 | 短重叠窗口的ZSK轮转 |
| KSK Double-DS | 父区同时保留新旧DS(双DS),待验证器接纳新KSK后撤旧DS。 | KSK常规轮转(须父区配合) |
| CSK 轮转 | 单一密钥同时是KSK与ZSK,轮转须走KSK路径(双DS)。 | 单一密钥模型 |
| 算法轮转 | 引入新算法(如从RSA迁移到ECDSA),须先升DS摘要再滚KSK,否则验证失败。 | 算法升级(RFC 8624/9904) |
原则:轮转全程须保证"任一时刻,验证器都能用至少一个可信密钥验证链",并以重叠期覆盖缓存与父区传播延迟。算法轮转尤其危险——RFC 8624/9904明确"升级DS算法须先于KSK轮转"。
03 · 安全时序模型(RFC 7583)
RFC 7583给出密钥轮转各阶段的"最小安全等待窗口",核心是等待各类TTL与缓存、父区传播、RFC 5011接纳延迟充分过期。关键命名间隔包括:
| 间隔(RFC 7583) | 含义 | 对本课题的意义 |
|---|---|---|
| Signature Validity | RRSIG的有效期长度(inception→expiration)。 | 决定重签频率;轮转须覆盖至少一个完整有效期。 |
| Publication Interval | 新密钥发布到开始使用之间的等待。 | 确保旧缓存失效、新密钥被看见。 |
| Registration Delay | 向父区提交/生效DS所需时间。 | KSK轮转的关键路径,常由注册商/注册局时效决定。 |
| DNSKEY / DS TTL | 本区DNSKEY与父区DS记录的TTL。 | 决定了"撤旧"前必须等待的缓存失效时间。 |
| RFC 5011 hold-down | 自动接纳新信任锚前的持续观察期(RFC 5011 §4.2规定为30天)。 | 根/关键KSK滚动必须预留此窗口,否则部分验证器不认新锚。 |
RFC 7583给出的是"下限公式"而非固定数字——实际秒数须结合本区各TTL与运营时效计算。本课题不替读者代算具体值,仅强调"按RFC 7583逐间隔求和得到安全轮转总时长"。
3.1 轮转方法的选择细节
- 为什么ZSK推荐Pre-Publish而非Double-Signature:Double-Signature要求全量RRset被两把ZSK同时签名,应答需携带双份RRSIG(显著放大应答体积,触发分片风险);Pre-Publish只多发布一把待命DNSKEY,应答体积基本不变,故RFC 6781 §4.1.1将Pre-Publish列为ZSK轮转推荐方法。
- KSK为什么只能走Double-DS:KSK只签DNSKEY RRset,无法对"两把KSK的DNSKEY RRset双签"完成平滑过渡——因为父区DS一次只能指向一把KSK的摘要。过渡的正确形式是父区同时挂新旧两把DS(Double-DS),验证器分别信任,过渡期结束再撤旧DS。
- CSK轮转的注意事项:CSK兼具ZSK与KSK角色,轮转必须同时满足"DNSKEY双签重叠(ZSK面)"与"父区Double-DS(KSK面)"两个条件,实际复杂度不低于分离模型,故大型运营仍推荐ZSK/KSK分离。