3

谁能简单地向我解释一下 DNSSEC 是如何工作的?

我已经可以理解(但我不知道它是否完全正确)是:

DNS 是早期 Internet 中创建的旧协议,因此存在缺陷(例如,没有身份验证)。它允许攻击作为中间人和缓存中毒。

解决方案?DNSSEC 的创建。一种使用公钥加密技术并为 DNS 查询提供身份验证和完整性的协议。它使用从根 DNS 服务器开始的信任链工作 - 这里的“信任”意味着您信任根服务器的公钥。

在区域级别,该过程使用一对或多对密钥进行工作。首先,区域服务器拥有 ZSK(区域签名密钥)并使用私有 ZSK 对查询的数据进行签名。之后,它将公共 ZSK、数据 (RRSET) 和签名数据 (RRSIG) 发送到 DNS 解析器。但现在你必须信任公共 ZSK。解决方案?要拥有另一个密钥,KSK(密钥签名密钥)。该区域对包含公共 KSK 和公共 ZKS 的新集合进行签名。在它发送新集、签名集和公共 KSK 之后。它保证了区域内的安全。

但是 DNS 需要的整个递归过程呢?我们如何确保它也是安全的?它是通过使子服务器散列其公共 KSK 并将其发送给其父服务器来完成的,父服务器将其存储为 DS(委托签名)。做的比较早,不知道怎么做。这样,如果你信任父亲并且父亲有孩子DS,如果你对孩子public KSK进行hash,结果等于父亲DS,你就可以信任孩子。这创建了整个信任链。该链的安全入口点位于根中。您假设您可以信任根的公钥。

这就是我认为我对 DNSSEC 的理解,如果有人可以更好地解释,修复我写的内容,或者提供更多您认为了解 DNSSEC 至关重要的信息,我将不胜感激。

此外,如果有人可以向我解释 DNSSEC 架构和密钥管理,我也会很高兴。

非常感谢!!!!!

4

1 回答 1

1

您的问题非常广泛,与编程无关。

就像 Calle 说的那样,您已经基本正确,所以让我指出一些要修复的部分。

首先,要记住的重要部分是所有这些都是基于非对称加密:每个密钥都是公共和私有部分。公共部分在DNSKEYRR 中发布,并且在记录中也有一些散列DS,而私有部分用于计算RRSIG记录。任何使用公钥的人都可以验证RRSIG记录中的签名确实是由某个特定的私钥签名的,而永远无法访问它。

现在谈谈你的一些观点:

在区域级别,该过程使用一对或多对密钥进行工作。首先,区域服务器拥有 ZSK(区域签名密钥)并使用私有 ZSK 对查询的数据进行签名。之后,它将公共 ZSK、数据 (RRSET) 和签名数据 (RRSIG) 发送到 DNS 解析器。

在给定区域的自动名称服务器上,您从区域的内容开始,未签名。在没有 DNSSEC 的过去,这正是发布的内容。现在你至少有这三个选项:

  • 一个外部进程获取该区域并对其进行签名;这完全取决于您的密钥的管理方式:如果它们在 HSM 中,那么您需要将记录发送到那里进行签名,因为按照设计,私钥(需要对记录进行签名)永远不会离开硬件模块。例如,请参阅OpenDNSSEC 软件
  • 解析器本身,在加载时或通过单独的工具可以对区域本身进行签名,甚至管理密钥(因为它们会定期更改);请参阅Bind中的此示例。
  • RRSIG或者,没有事先签名,解析器将在查询到达时生成(并缓存一段时间)记录。看看一家大供应商是如何做到的。

当然,每种解决方案都有其优点和缺点。他们都存在于球场上。

但现在你必须信任公共 ZSK。解决方案?要拥有另一个密钥,KSK(密钥签名密钥)。

KSK/ZSK 拆分并不是真正的信任,只是关键材料管理。

让我们回过头来一点。理论上,DNSSEC 的整个设置可以以完全相同的方式工作,每个区域中只有一个密钥。

但实际上它通常是更多的键。

首先,密钥需要定期更换。它们没有特定的原因或寿命终止,只是假设如果我们想防御离线密钥破解,我们只需要定期更改它们。密钥的发布没有关于其持续时间的详细信息(与RRSIGs 中的签名相反),但每个 DNSSEC 签名区域都应该有一个DPS(DNSSEC 实践声明),除其他外,该 DPS 深入研究每个密钥的有效期(参见其他答案我了解有关 DPS 的更多详细信息)。当然,要为密钥翻转做准备,您需要提前在 DNS 中发布一个新密钥,以便缓存了解它,然后再开始使用它进行签名(或至少在停止使用旧密钥签名之前)。

所以你已经可以同时处理多个键了。

现在您处于两个相反的限制之中:您希望尽可能长时间地继续使用一个键以减少处理(如果该键是在外部处理的,则使用它的次数越少越好),因为它也通过记录存在于父区域DS,同时您知道为了更好的安全设置,您需要在尽可能短的时间内使用它并经常更新它。

您可以通过进行 KSK/ZSK 拆分来解决这个难题。

为什么?因为您可以为每个密钥附加不同的生命周期。KSK 也将通过DS记录存在于父区域中,因此通常是您不想经常更改的东西。通常,KSK 将是最安全的密钥(最受保护的密钥),并将“持续”1 或 2 年(这必须在 DPS 中详细说明)。然后,用于真正签署 zone 中记录的 ZSK 可以是更频繁地生成的密钥,比如 1 或 2 个月,因为它们的更改只需要反映在 zone 本身中,不需要在 parent 更改任何内容区。

例如,参见IANA 根区密钥仪式:只有一个根密钥(绝对信任),将来可能会发生变化(去年10月就已经计划好了,但后来被推迟了);无论如何,每年两次在某些数据中心举行特定的密钥仪式,这里到底会发生什么?DNS 根区域运营商 VeriSign 带有特定数量的密钥(实际上是未来的 ZSK),它们值得一段时间(基本上直到下一次仪式,有一些余量,基于相关 DPS 中详述的典型 ZSK 生命周期) ),然后正确使用根 KSK,并在多个级别有许多见证人来签署这些 ZSK。然后可以将 KSK 放回存储中并且不再使用(直到下一次仪式),然后 DNS 运营商可以开始发布 ZSK,并带有相关签名。

同样,这是惯例,但肯定不是强制性的。一些区域(例如.CO.UK,看看它如何只有一条DNSKEY记录)决定只使用一个密钥,这称为 CSK for Common Signing Key,这意味着它同时是一个区域签名密钥和一个密钥签名密钥(因为它自己签名,它也是用于父 DS 的那个)。

它是通过使子服务器散列其公共 KSK 并将其发送给其父服务器来完成的,父服务器将其存储为 DS(委托签名)。做的比较早,不知道怎么做。

每个区域都必须向其父级发送一个(或多个)KSK(当然是公共部分),并让父级计算相关内容DS以在其区域中发布,或者直接发送DS记录。DNS 树中的每个节点都是同样的问题,当然除了根节点。并且孩子需要在使用相关密钥签署任何内容之前做这件事,因为他通常无法控制父母在开始发布密钥之前需要多长时间。

DNS 树中的每个节点都是相同的,理论上是因为在实践中,这种信息传输必须在 DNS 的带外完成(除了CDS/ CDNSKEY,见下文),并且每个节点可能不同。它通常至少涉及一些纯粹的人类交互,这解释了为什么 ZSK/KSK 拆分是令人愉悦的,因为它降低了您需要做任何事情来替换 KSK 的频率。

例如,对于 TLD,他们需要在 IANA 网站上输入一个流程,提供新的 DS 记录,然后等待一段时间让 IANA 处理和验证,然后再将其发布到根区。

对于 2LD(二级域名),他们通常去他们的注册商并通过一些网站或 API 提供注册商将发送给注册局的信息,以便它可以发布它。如今,注册商与注册机构之间的对话是使用称为EPP可扩展配置协议)的协议进行的,并且它具有 DNSSEC 的特定扩展名为secDNS。此扩展允许注册商代表其客户发送(基于注册策略):

  1. 记录(作为 4 个单独的DS参数)
  2. DNSKEY记录(作为 4 个单独的参数),注册中心将根据该记录自行计算要发布的适当DS记录
  3. DS带有封闭(相关)记录的DNSKEY记录,以便注册管理机构可以仔细检查 DS 是否正确计算,并且它确实与DNSKEY域已发布的某些记录相匹配

(它或多或少按现场案件发生频率的降序排列)。

这解决了配置问题。至于树下的节点,您拥有的标准机制越来越少。

还有另一条路径,这次使用 DNS 本身而不是带外配置,使用RFC 7344RFC 8078中描述的CDS/记录。前导 C 代表 Child,然后你又得到了,或者因为核心思想是让节点在自己的区域中发布这样的记录,然后让父区域进行 DNS 查询以获取它,然后为父区域提供它。CDNSKEYDSDNSKEY

当然,这确实会产生一些问题,至少对于引导而言。而这些机制目前并没有被过多地使用。特别是对于 DNS 托管商本身不是注册商的情况,有各种正在进行的工作和想法,以便外部各方可以影响这一点并在父区域中进行更改,而无需在 EPP 级别从注册商到注册管理机构进行干预。如果您对这些主题感兴趣,请查看例如https://www.dk-hostmaster.dk/en/news/cloudflare-integrates-dk-hostmasters-dnssec-setuphttps://datatracker.ietf .org/doc/draft-ietf-regext-dnsoperator-to-rrr-protocol/

至于:

此外,如果有人可以向我解释 DNSSEC 架构和密钥管理,我也会很高兴。

这实在是太宽泛了。我不知道您所说的DNSSEC 架构是什么意思:没有一种适合所有方法的方法,您至少需要考虑您的区域的容量(要签名的记录数)、辞职的频率(如果不是)动态,然后是相关的密钥轮换,以及密钥的存储方式和存储位置。

密钥管理不再是 DNSSEC 特有的一点。X.509 PKI 证书颁发机构在其私钥的安全性以及它如何使用它来签署其他密钥(在这种情况下实际上是证书)方面将面临几乎相同的问题。

于 2018-05-28T06:00:26.850 回答