複製鏈接
請複製以下鏈接發送給好友

DNSCrypt

鎖定
DNSCrypt是由Frank Denis及付業成(Yecheng Fu)主導設計的網絡協議,用於用户計算機與遞歸域名服務器之間的域名系統(DNS)通信的身份驗證。
中文名
DNSCrypt
外文名
DNSCrypt
分    類
計算機科學

DNSCrypt原理

DNSCrypt將未修改的DNS查詢與響應以密碼學結構打包來檢測是否被偽造。它儘管未使用端對端加密,但也足夠抵禦針對DNS的中間人攻擊DNS緩存投毒攻擊DNS劫持等,尤其是在局域網中。除此以外還緩解了基於UDP的請求查詢至少與迴應一樣大的放大攻擊。DNSCrypt也可以用於訪問控制。
儘管已有數個客户端及服務器實現,這一協議從未以徵求意見稿(RFC)形式提交到互聯網工程任務組(IETF)。DNSCrypt協議已發展至第二個版本。

DNSCrypt協議概略

DNSCrypt可以使用UDP端口或TCP端口。儘管與HTTPS完全不同,但兩種情況下的默認端口號均為443。
DNSCrypt客户端必須明確信任所選提供者的公鑰,而不依賴於常規瀏覽器中使用的證書頒發機構。
公鑰將用於驗證一整套以傳統DNS查詢接收的證書。這些證書包含用於密鑰交換的短期公鑰,以及即將使用的密碼本標識符。客户端被鼓勵為每次查詢新建密鑰,而服務器被鼓勵為每24小時更換短期密鑰對。
查詢與迴應都使用同一算法加密,並使用64字節的倍數填充來防止泄漏數據包大小。當使用UDP端口且迴應多於查詢產生的數據量時,服務器可以使用標記TC(英語:truncated,截短)比特的短數據包迴應。客户端此時應使用TCP端口重試,並增加後續查詢的填充量。
該協議的第一、第二版採用X25519算法(Curve25519)進行密鑰交換,EdDSA算法進行簽名,以及使用XSalsa20-Poly1305或XChaCha20-Poly1305算法認證加密。

DNSCrypt基於公鑰的客户端認證

DNSCrypt協議也可以用於訪問控制與審計,方法是僅接受一組預先定義的公鑰。這可在商用DNS服務中辨識客户而不必依賴於其IP地址 [1] 

DNSCrypt部署實現

DNSCrypt服務器端

DNSCrypt-Wrapper是服務器端程序,需要搭配BIND、unbound等DNS系統方可運行。
除了私有部署,DNSCrypt協議已經被數個公共DNS解析服務器接納,現存最大的成員是OpenNIC網絡,它同時提供虛擬專用網(VPN)服務。
OpenDNS(現思科系統的子公司)在2011年12月宣佈其公共DNS服務部署DNSCrypt,緊接着奧地利的CloudNS也宣佈部署。
2016年3月29日,Yandex宣佈在其公共DNS服務器及網絡瀏覽器上支持DNSCrypt協議。隨後,Infoblox宣佈旗下的ActiveTrust Cloud將部署DNSCrypt服務。
2016年10月,AdGuard宣佈為其提供阻擋電信運營商追蹤廣告推送服務的公共DNS服務器部署了DNSCrypt。
2017年DNSCrypt v2協議公佈,隨後相關的開放源代碼實現項目相繼出現,同時也有更多的公共DNS服務器加入(包括Google Public DNS),所有部署DNSCrypt的DNS服務器清單可在DNSCrypt的GitHub、Bitbucket等源代碼託管站上找到。

DNSCrypt客户端

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客户端支持。
參考資料
  • 1.    Ojok I. Implementation and Testing DNS Crypt on DNS Attacks and ICANN Multi-stakeholders Internet Governance[D]. 湖南大學, 2014.