跳到主要内容

3. DNS 安全提供的服务 (Services Provided by DNS Security)

域名系统 (Domain Name System, DNS) 安全扩展为 DNS 数据提供来源认证和完整性保证服务, 包括对 DNS 数据不存在性进行认证否定的机制. 这些机制如下所述.

这些机制要求修改 DNS 协议. DNSSEC 增加了四种新的资源记录类型: 资源记录签名 (Resource Record Signature, RRSIG), DNS 公钥 (DNS Public Key, DNSKEY), 委派签名者 (Delegation Signer, DS) 和下一安全 (Next Secure, NSEC). 它还增加了两个新的消息头 bit: 检查禁用 (Checking Disabled, CD) 和已认证数据 (Authenticated Data, AD). 为了支持因添加 DNSSEC RR 而产生的更大 DNS 消息大小, DNSSEC 还要求支持 EDNS0 ([RFC2671]). 最后, DNSSEC 要求支持 DNSSEC OK (DO) EDNS 头 bit ([RFC3225]), 以便安全感知解析器能够在查询中指明其希望在响应消息中接收 DNSSEC RR.

这些服务可防护 [RFC3833] 中描述的大多数 DNS 威胁. 关于这些扩展限制的讨论, 请参见第 12 节.

3.1. 数据来源认证和数据完整性 (Data Origin Authentication and Data Integrity)

DNSSEC 通过将以密码方式生成的数字签名与 DNS RRset 关联来提供认证. 这些数字签名存储在一种新的资源记录中, 即 RRSIG 记录. 通常, 会有一个私钥对某个区域的数据进行签名, 但也可以存在多个密钥. 例如, 可以为多种不同数字签名算法分别设置密钥. 如果安全感知解析器可靠地获知某个区域的公钥, 它就可以认证该区域的已签名数据. DNSSEC 的一个重要概念是: 用于签署区域数据的密钥与区域本身关联, 而不是与该区域的权威名称服务器关联. (如 [RFC2931] 所述, DNS 事务认证机制的公钥也可能出现在区域中, 但 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 节描述的机制进行签名和认证.