3. Services Provided by DNS Security (DNS 安全提供的服务)
域名系统 (Domain Name System, DNS) 安全扩展为 DNS 数据提供源认证 (origin authentication) 和完整性保证 (integrity assurance) 服务, 包括用于认证 DNS 数据不存在的机制。下面描述这些机制。
这些机制需要对 DNS 协议进行更改。DNSSEC 添加了四种新的资源记录类型: 资源记录签名 (Resource Record Signature, RRSIG)、DNS 公钥 (DNS Public Key, DNSKEY)、授权签名者 (Delegation Signer, DS) 和下一个安全 (Next Secure, NSEC)。它还添加了两个新的消息头位: 检查禁用 (Checking Disabled, CD) 和已认证数据 (Authenticated Data, AD)。为了支持因添加 DNSSEC RR 而产生的更大 DNS 消息大小, DNSSEC 还需要 EDNS0 支持 ([RFC2671])。最后, DNSSEC 需要支持 DNSSEC OK (DO) EDNS 头位 ([RFC3225]), 以便安全感知解析器可以在其查询中指示它希望在响应消息中接收 DNSSEC RR。
这些服务可以防范 [RFC3833] 中描述的对域名系统的大多数威胁。关于这些扩展的局限性讨论, 请参见第 12 节。
3.1. Data Origin Authentication and Data Integrity (数据源认证与数据完整性)
DNSSEC 通过将加密生成的数字签名与 DNS RRset 关联来提供认证。这些数字签名存储在新的资源记录 RRSIG 记录中。通常, 将有一个私钥来签名区域的数据, 但也可能有多个密钥。例如, 可能有用于多种不同数字签名算法的密钥。如果安全感知解析器可靠地学习到区域的公钥, 它就可以认证该区域的已签名数据。一个重要的 DNSSEC 概念是, 签名区域数据的密钥与区域本身相关联, 而不与区域的权威名称服务器相关联。(用于 DNS 事务认证机制的公钥也可能出现在区域中, 如 [RFC2931] 中所述, 但 DNSSEC 本身关注的是 DNS 数据的对象安全, 而不是 DNS 事务的通道安全。与事务安全相关联的密钥可能存储在不同的 RR 类型中。详情请参见 [RFC3755]。)
安全感知解析器可以通过将信任锚配置到解析器中或通过正常的 DNS 解析来学习区域的公钥。为了允许后者, 公钥存储在新类型的资源记录 DNSKEY RR 中。请注意, 用于签名区域数据的私钥必须保持安全, 并且在实际可行时应离线存储。要通过 DNS 解析可靠地发现公钥, 目标密钥本身必须由已配置的认证密钥或先前已认证的另一个密钥签名。安全感知解析器通过形成从新学习的公钥到先前已知的认证公钥的认证链来认证区域信息, 而该认证公钥反过来要么已配置到解析器中, 要么必须先前已学习并验证过。因此, 解析器必须至少配置一个信任锚。
如果配置的信任锚是区域签名密钥, 那么它将认证关联的区域, 如果配置的密钥是密钥签名密钥, 它将认证区域签名密钥。如果配置的信任锚是密钥的哈希值而不是密钥本身, 解析器可能必须通过 DNS 查询获取密钥。为了帮助安全感知解析器建立此认证链, 安全感知名称服务器尝试在 DNS 回复消息中连同公钥本身一起发送用于认证区域公钥所需的签名, 前提是消息中有可用空间。
授权签名者 (Delegation Signer, DS) RR 类型简化了跨组织边界签名授权所涉及的一些管理任务。DS RRset 位于父区域中的授权点, 并指示与用于自签名授权子区域顶点处的 DNSKEY RRset 的私钥相对应的公钥。子区域的管理员反过来使用与此 DNSKEY RRset 中的一个或多个公钥相对应的私钥来签名子区域的数据。因此, 典型的认证链是 DNSKEY->[DS->DNSKEY]->RRset, 其中 "" 表示零个或多个 DS->DNSKEY 子链。DNSSEC 允许更复杂的认证链, 例如区域内 DNSKEY RR 签名其他 DNSKEY RR 的附加层。
安全感知解析器通常基于对根公钥的已配置知识, 从 DNS 层次结构的根向下构建此认证链到叶区域。然而, 本地策略也可能允许安全感知解析器使用除根公钥之外的一个或多个已配置公钥 (或公钥哈希), 可能不提供根公钥的已配置知识, 或者可能出于任意原因阻止解析器使用特定公钥, 即使这些公钥已用可验证的签名正确签名。DNSSEC 提供了一些机制, 安全感知解析器可以通过这些机制确定 RRset 的签名在 DNSSEC 的含义内是否 "有效"。然而, 在最终分析中, 认证 DNS 密钥和数据都是本地策略的问题, 这可能扩展甚至覆盖本文档集中定义的协议扩展。请参见第 5 节以获取进一步讨论。
3.2. Authenticating Name and Type Non-Existence (认证名称和类型的不存在)
第 3.1 节中描述的安全机制仅提供了一种签名区域中现有 RRset 的方法。以相同级别的认证和完整性提供否定响应的问题需要使用另一种新的资源记录类型 NSEC 记录。NSEC 记录允许安全感知解析器使用用于认证其他 DNS 回复的相同机制来认证名称或类型不存在的否定回复。使用 NSEC 记录需要区域中域名的规范表示和排序。NSEC 记录链明确描述了区域中域名之间的间隙或 "空白空间", 并列出了现有名称处存在的 RRset 类型。每个 NSEC 记录都使用第 3.1 节中描述的机制进行签名和认证。