我想知道 DNS 查询是否加密。如果是,您能否简要解释一下该过程,因为我认为要进行加密,双方至少应该有一个最低限度的共同点(例如共享一个密钥),但由于 DNS 使用 UDP 并且它是无连接的,我无法想象在这种情况下您如何加密您的有效负载。
谢谢
答案1
标准 DNS 并未在任何地方加密。DNSSEC 具有加密签名(但仍未加密)响应。多年来,曾出现过一些非标准的想法和实现,但没有什么重大进展。
DNS 也应该通过 TCP 工作,因为它是处理过大答案的标准机制(另一种方法是 IP 碎片化)。服务器本质上会发送一个 UDP 响应,表示“答案太大,请通过 TCP 重试”。
关于您的问题,一个简单但缓慢的解决方案是做与 HTTPS 相同的事情 - 进行三步 TLS 握手,以某种方式验证证书,然后交换数据。真正的挑战是减少往返次数,同时仍然提供某种形式的安全性。
答案2
默认情况下,DNS 在创建时既不提供真实性(确保您从该区域的真正权威名称服务器获得响应),也不提供机密性(确保网络上没有人能够理解您的查询或答案)。
DNSSEC 是为了解决真实性问题而创建的,因为它允许人们签署记录,并通过密钥机制建立信任链并验证您获得的答案。它解决了中间人问题,因为如果相关区域已签署(这仍然是目前约占所有区域的 0.53%) 如果有人试图更改此类区域的回复,那么您将能够发现这些变化。
与直觉相反,真实性比保密性更重要。为什么?因为如果你无法确定你在和谁交谈,即使答案是加密的,它又有什么价值呢?如果你不进行身份验证,你可以与任何邪恶的第三方进行加密。
现在确实如此,如果您已经拥有真实性,例如由于 DNSSEC,您可能希望拥有机密性,因为 DNS 可以传达敏感或至少是个人信息。这也是为什么QNAME 最小化现已存在,以减少发送到每个名称服务器的信息量。这越来越受到支持(即将绑定)
因此,现在对于加密,你的第一个错误是考虑 UDP。DNS 使用 UDP和TCP,如今更常使用 TCP,原因如下。除此之外,请注意,即使对于 UDP,您也有加密选项,请参阅动态TLS,它基本上是 UDP 中的 TLS。快,由 Google 创建(基本上是为了能够创建一个优化的 HTTP,在 SPDY 之后变成了现在的 HTTP/2),也是通过 UDP 构建的,其安全性与 TLS 提供的类似。看看这两个,揭穿你认为在这种情况下有效载荷无法加密的想法。
目前,对于加密 DNS,您有以下选项(无特定顺序):
- DNSCrypt:这不是 IETF 意义上的标准,而是一个由各种参与者实施的开放协议。请参阅https://dnscrypt.info/
- DNS over TLS 现已成为标准(RFC7858和RFC8310),并且您有各种文档解释初始握手应如何进行,请参阅上面的第二个 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是该领域最新的产品,需要更新的客户端和服务器以及新的
odns
TLD 来使用它。
当然,在所有这些情况下,您都需要有特定的服务器使用该协议。一些开放解析器已经提供基于 TLS 的 DNS。但是,您只需将问题转移:您的连接“安全”地交给它们,但您必须相信它们能够正常工作并且不会欺骗您,特别是在验证 DNSSEC 时。
你可以:
- 搜索https://dnscrypt.info/public-servers/获取支持 DNSCrypt 协议的服务器列表,或查看https://github.com/DNSCrypt/dnscrypt-resolvers/blob/master/v2/public-resolvers.md
- 目前使用云Flare,四重9或者清洁浏览在端口 853 上打开 DNS over TLS 解析器,或者查看https://dnsprivacy.org/wiki/display/DP/DNS+Privacy+Test+Servers对于某些列表或https://dnsprivacy.org/wiki/display/DP/DNS+Privacy+Public+Resolvers
- 目前使用云Flare,Google 公共 DNS或者清洁浏览,提供通过 HTTPS 的 DNS,或者再次https://dnsprivacy.org/wiki/display/DP/DNS+Privacy+Public+Resolvers以获得一些列表。