这M³WAAG DKIM 密钥轮换最佳实践文档 (pdf)建议使用“足够”随机的 DKIM 选择器名称,以便无法通过浏览 DNS 猜出。文字引用:
4.3 关键选择器命名方案
为 DKIM 密钥选择器定义一个命名方案,该方案对于取证分析有意义,并且足够随机,以便无法通过浏览 DNS 轻易猜出密钥。
注意:选择器命名方案还应设计为降低攻击者可以轻松预测未来选择器的名称并检索相关密钥的风险。有关发布密钥以供将来使用的过程的描述,请参阅第 5 节
这可能适用于较短的 512 位 RSA 密钥,但对于较长的 RSA 密钥(例如 2048 位)来说,这似乎毫无意义。DNS 持有的公钥不是秘密,只需阅读一封签名邮件即可发现。通过隐蔽性实现安全性,安全性却很低?
为什么随机 DKIM 选择器名称会更好,什么时候遵循他们的建议才有意义?
答案1
我查看了文档,发现作者不了解新条目的 DNS 传播。更新旧条目时,可以配置缓存时间,可能为几天。但是,新条目需要从权威名称服务器获取后才能缓存。
如果按照建议的流程(在三个 CNAME 后面轮换密钥)轮换密钥,则更新缓存条目时可能会出现明显延迟。可以通过在更新前删除要更新的记录的 TTL 来缓解这种情况。如果需要紧急轮换密钥,CNAME 轮换也可能会存在问题。
随机化密钥名称确实提供了一定程度的保护,防止在使用前获取公钥。一旦密钥被使用,我认为它可能已被获取,用于生成备用签名密钥。
答案2
当前版本(2019 年 3 月) 指南仅在图像上提及一次选择器的随机名称。引用变更概述:
建议的密钥命名约定已重新制定(第 5.1.3 节)
第4.2节:
使用轮换日期的命名约定可以帮助保持选择器的有序性。
例如:“sales-201309-1024”。此示例表明它属于“sales”电子邮件流,计划于 2013 年 9 月轮换到现役,并引用 1024 位密钥。
第 5.1 节中的图片在便条上写道:
选择器可能包含键长度、日期、随机字符串
第 5.1.1 节规定:
...该选择器应携带足够的信息以促进密钥轮换过程。
答案3
两个好处:
- 攻击者如果不知道选择器名称(通常拥有签名的消息),就无法发起攻击
- 您可以发布密钥并确保在实际轮换使用之前传播到 DNS 中,同时将缩短密钥有效寿命的风险降至最低。
看起来这只是一层(有点弱的)额外的保护。
答案4
在 2023 年,这是个糟糕的建议。在 2014/2015 年可能还算有效,但现在不再有效。现在可以自动检测选择器名称,因此对它们使用模糊性是无用的,只会让您作为管理员的生活更加困难。
除此之外,当实施 DKIM 时,我们真的不在乎是否有人可以访问在 DNS 中发布的密钥。它是密钥对中的公钥。私钥用于加密电子邮件内容的哈希值,公钥用于解密。收件人将收到的哈希值与它为邮件计算的哈希值进行比较。如果两者匹配,则 DKIM 验证成功。
DKIM 验证的重要部分是访问用于加密哈希值的私钥,而该私钥并不公开。唯一加密的是哈希值,任何有权访问电子邮件的人都可以复制它。由于只有私钥才能成功加密可以使用公钥解密的消息,因此包含哈希值的加密签名包只能来自有权访问私钥的人。如果有人能够解密并读取该包,他们唯一能做的就是验证来源。因此,访问解密签名的密钥对攻击者来说毫无用处。