DNSCrypt

DNSCrypt是由Frank Denis及付业成（Yecheng Fu）主導设计的网络协议，用于用户计算机与递归域名服务器之间的域名系统（DNS）通信的身份验证。


DNSCrypt将未修改的DNS查询与响应以密码学结构打包来检测是否被伪造。它儘管未使用端對端加密，但也足夠抵禦針對DNS的中間人攻擊、DNS快取投毒攻擊、DNS劫持等，尤其是在區域網路中。除此以外還缓解了基于UDP的请求查询至少与回应一样大的放大攻击。DNSCrypt也可以用于访问控制。

尽管已有数个客户端及服务器实现，这一协议从未以征求意见稿（RFC）形式提交到互联网工程任务组（IETF）。目前DNSCrypt協定已發展至第二個版本。

 协议概略 
DNSCrypt可以使用UDP端口或TCP端口。尽管与HTTPS完全不同，但两种情况下的默认-{zh-cn:端口号;zh-tw:通訊埠;}-均为443。

DNSCrypt客户端必须明确信任所选提供者的公钥，而不依赖于常规浏览器中使用的证书颁发机构。

公钥将用于验证一整套以传统DNS查询接收的证书。这些证书包含用于密钥交换的短期公钥，以及即将使用的密码本标识符。客户端被鼓励为每次查询新建密钥，而服务器被鼓励为每24小时更换短期密钥对。

查询与回应都使用同一算法加密，并使用64字节的倍数填充来防止泄漏封包大小。当使用UDP端口且回应多于查询产生的数据量时，服务器可以使用标记TC（，截短）位元的短封包回应。客户端此时应使用TCP端口重试，并增加后续查询的填充量。

该协议的第一、第二版采用X25519算法（Curve25519）进行密钥交换，EdDSA算法进行签名，以及使用XSalsa20-Poly1305或XChaCha20-Poly1305算法认证加密。

 基于公钥的客户端认证 
DNSCrypt协议也可以用于访问控制与审计，方法是仅接受一组预先定义的公钥。这可在商用DNS服务中辨识客户而不必依赖于其IP地址。

 部署實作 
 伺服器端 
DNSCrypt-Wrapper是伺服器端程式，需要搭配BIND、等DNS系統方可運行。

除了私有部署，DNSCrypt协议已经被数个公共DNS解析服务器接纳，现存最大的成员是OpenNIC网络，它同时提供虚拟专用网（VPN）服务。

OpenDNS（現思科系統的子公司）在2011年12月宣布其公共DNS服務部署DNSCrypt，緊接著奧地利的CloudNS也宣布部署。

2016年3月29日，Yandex宣布在其公共域名解析服務及网络浏览器上支持DNSCrypt协议。隨後，Infoblox宣布旗下的ActiveTrust Cloud將部署DNSCrypt服務。

2016年10月，AdGuard宣布為其提供阻擋電信業者追踪廣告推播服務的公共DNS伺服器部署了DNSCrypt。

2017年DNSCrypt v2協定公佈，隨後相關的開放原始碼實作專案相繼出現，同時也有更多的公共DNS伺服器加入（包括Google Public DNS），所有部署DNSCrypt的DNS伺服器清單可在DNSCrypt的GitHub、Bitbucket等原始碼託管站上找到。

 客户端 
512px|thumb|dnscrypt-proxy在Linux上运行
DNSCrypt-Proxy v1/v2、Pcap_DNSProxy、YourFriendlyDNS是跨平台、命令列界面的客户端程式，起到將本機或區域網路內的DNS請求加密轉發至部署了DNSCrypt的伺服器之功用。其中DNSCrypt-Proxy的v2版還支援DoH、DoT，還可以實現類似dnsmasq的DNS指定轉發、黑名單及白名單、hosts特性；Pcap_DNSProxy額外支援DNSSEC。

Simple DNSCrypt是一個圖形界面、基建於DNSCrypt-Proxy的前端，運行於Windows作業系統。也有類似的實作專案，如macOS的dnscrypt-osx-client等。

Yandex則在其自家的瀏覽器產品上內建了自有的DNSCrypt客户端支援。

 参见 
 Curve25519
 DNSCurve
 DNS over HTTPS（DoH）
 DNS over TLS（DoT）
 域名系统安全扩展（DNSSEC）
 椭圆曲线密码学

 参考资料 

 外部链接 




Category:域名
Category:网际协议