DNS 查询是否加密?

DNS 查询是否加密?

我想知道 DNS 查询是否加密。如果是,您能否简要解释一下该过程,因为我认为要进行加密,双方至少应该有一个最低限度的共同点(例如共享一个密钥),但由于 DNS 使用 UDP 并且它是无连接的,我无法想象在这种情况下您如何加密您的有效负载。

谢谢

答案1

标准 DNS 并未在任何地方加密。DNSSEC 具有加密签名(但仍未加密)响应。多年来,曾出现过一些非标准的想法和实现,但没有什么重大进展。

DNS 也应该通过 TCP 工作,因为它是处理过大答案的标准机制(另一种方法是 IP 碎片化)。服务器本质上会发送一个 UDP 响应,表示“答案太大,请通过 TCP 重试”。

关于您的问题,一个简单但缓慢的解决方案是做与 HTTPS 相同的事情 - 进行三步 TLS 握手,以某种方式验证证书,然后交换数据。真正的挑战是减少往返次数,同时仍然提供某种形式的安全性。

答案2

默认情况下,DNS 在创建时既不提供真实性(确保您从该区域的真正权威名称服务器获得响应),也不提供机密性(确保网络上没有人能够理解您的查询或答案)。

DNSSEC 是为了解决真实性问题而创建的,因为它允许人们签署记录,并通过密钥机制建立信任链并验证您获得的答案。它解决了中间人问题,因为如果相关区域已签署(这仍然是目前约占所有区域的 0.53%) 如果有人试图更改此类区域的回复,那么您将能够发现这些变化。

与直觉相反,真实性比保密性更重要。为什么?因为如果你无法确定你在和谁交谈,即使答案是加密的,它又有什么价值呢?如果你不进行身份验证,你可以与任何邪恶的第三方进行加密。

现在确实如此,如果您已经拥有真实性,例如由于 DNSSEC,您可能希望拥有机密性,因为 DNS 可以传达敏感或至少是个人信息。这也是为什么QNAME 最小化现已存在,以减少发送到每个名称服务器的信息量。这越来越受到支持(即将绑定

因此,现在对于加密,你的第一个错误是考虑 UDP。DNS 使用 UDPTCP,如今更常使用 TCP,原因如下。除此之外,请注意,即使对于 UDP,您也有加密选项,请参阅动态TLS,它基本上是 UDP 中的 TLS。,由 Google 创建(基本上是为了能够创建一个优化的 HTTP,在 SPDY 之后变成了现在的 HTTP/2),也是通过 UDP 构建的,其安全性与 TLS 提供的类似。看看这两个,揭穿你认为在这种情况下有效载荷无法加密的想法。

目前,对于加密 DNS,您有以下选项(无特定顺序):

  • DNSCrypt:这不是 IETF 意义上的标准,而是一个由各种参与者实施的开放协议。请参阅https://dnscrypt.info/
  • DNS over TLS 现已成为标准(RFC7858RFC8310),并且您有各种文档解释初始握手应如何进行,请参阅上面的第二个 RFC 和定义的两个安全配置文件,并注意 DANE 如何以及何时有用,DANE 要求使用 DNSSEC;下一个版本的 Android 将默认支持 DNS over TLS(请参阅https://security.googleblog.com/2018/04/dns-over-tls-support-in-android-p.html),即使它对我而言使用了“私有 DNS”这个略微错误的名称。
  • DNS over HTTPS(其本身使用 TLS)尚未成为 IETF 标准,但正在成为标准。
  • 不经意的 DNS是该领域最新的产品,需要更新的客户端和服务器以及新的odnsTLD 来使用它。

当然,在所有这些情况下,您都需要有特定的服务器使用该协议。一些开放解析器已经提供基于 TLS 的 DNS。但是,您只需将问题转移:您的连接“安全”地交给它们,但您必须相信它们能够正常工作并且不会欺骗您,特别是在验证 DNSSEC 时。

你可以:

相关内容