DNSCrypt

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

DNSCrypt是由Frank Denis及付業成(Yecheng Fu)主導設計的網路協定,用於使用者電腦與遞迴域名伺服器之間的域名系統(DNS)通訊的身分驗證。[1]

DNSCrypt logo

DNSCrypt將未修改的DNS查詢與回應以密碼學結構打包來檢測是否被偽造。它儘管未使用端對端加密,但也足夠抵禦針對DNS的中間人攻擊DNS快取投毒攻擊DNS劫持等,尤其是在區域網路中。[2]除此以外還緩解了基於UDP的請求查詢至少與回應一樣大的放大攻擊。DNSCrypt也可以用於訪問控制

儘管已有數個客戶端及伺服器實現,這一協定從未以徵求意見稿(RFC)形式提交到網際網路工程任務組(IETF)。目前DNSCrypt協定已發展至第二個版本。[3]

協定概略[編輯]

DNSCrypt可以使用UDP埠或TCP埠。儘管與HTTPS完全不同,但兩種情況下的預設通訊埠均為443。

DNSCrypt客戶端必須明確信任所選提供者的公鑰,而不依賴於常規瀏覽器中使用的憑證頒發機構

公鑰將用於驗證一整套以傳統DNS查詢接收的憑證。這些憑證包含用於金鑰交換的短期公鑰,以及即將使用的密碼本識別碼。客戶端被鼓勵為每次查詢新建金鑰,而伺服器被鼓勵為每24小時更換短期金鑰對。

查詢與回應都使用同一演算法加密,並使用64位元組的倍數填充來防止洩漏封包大小。當使用UDP埠且回應多於查詢產生的資料量時,伺服器可以使用標記TC(英語:truncated,截短)位元的短封包回應。客戶端此時應使用TCP埠重試,並增加後續查詢的填充量。

該協定的第一、第二版採用X25519演算法(Curve25519)進行金鑰交換,EdDSA英語EdDSA演算法進行簽章,以及使用XSalsa20-Poly1305XChaCha20-Poly1305演算法認證加密。

基於公鑰的客戶端認證[編輯]

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

部署實作[編輯]

伺服器端[編輯]

DNSCrypt-Wrapper是伺服器端程式,需要搭配BINDunbound英語unbound (DNS server)等DNS系統方可運行。[4]

除了私有部署,DNSCrypt協定已經被數個公共DNS解析伺服器接納,現存最大的成員是OpenNIC網路,它同時提供虛擬私人網路(VPN)服務。

OpenDNS(現思科系統的子公司)在2011年12月宣布其公共DNS服務部署DNSCrypt,[5]緊接著奧地利的CloudNS也宣布部署。

2016年3月29日,Yandex宣布在其公共域名解析服務網路瀏覽器上支援DNSCrypt協定。[6]隨後,Infoblox宣布旗下的ActiveTrust Cloud將部署DNSCrypt服務。

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

2017年DNSCrypt v2協定公佈,隨後相關的開放原始碼實作專案相繼出現,同時也有更多的公共DNS伺服器加入(包括Google Public DNS),所有部署DNSCrypt的DNS伺服器清單可在DNSCrypt的GitHubBitbucket等原始碼代管站上找到。[9]

客戶端[編輯]

dnscrypt-proxy在Linux上執行

DNSCrypt-Proxy v1/v2、Pcap_DNSProxy、YourFriendlyDNS是跨平台命令列介面的客戶端程式,起到將本機或區域網路內的DNS請求加密轉發至部署了DNSCrypt的伺服器之功用。其中DNSCrypt-Proxy的v2版還支援DoHDoT,還可以實現類似dnsmasq的DNS指定轉發、黑名單及白名單、hosts特性;Pcap_DNSProxy額外支援DNSSEC[10][11][12][13]

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

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

參見[編輯]

參考資料[編輯]

  1. ^ [dnscrypt]写了一个 dnscrypt 的服务器端代理 dnscrypt-wrapper. V2EX. 2012-11-20 [2018-07-14]. (原始內容存檔於2018-07-15). 
  2. ^ DNSCrypt Proxy README.md. Github. [2017-02-16]. (原始內容存檔於2016-01-20). 
  3. ^ DNSCrypt/dnscrypt-protocol. GitHub. [2018-07-14]. (原始內容存檔於2018-11-03) (英語). 
  4. ^ cofyc/dnscrypt-wrapper. GitHub. [2018-07-14]. (原始內容存檔於2018-06-11) (英語). 
  5. ^ DNS Security with DNSCrypt. OpenDNS. [2018-07-14]. (原始內容存檔於2018-07-15). 
  6. ^ Protect: secure DNS requests. Yandex. [2018-07-14]. (原始內容存檔於2018-07-15) (英語). 
  7. ^ Vladimir Ozersky. AdGuard DNS Now Supports DNSCrypt. blog.adguard.com. 2016-10-14 [2018-07-14]. (原始內容存檔於2017-09-12) (英語). 
  8. ^ DNS Filtering Android. [2018-07-14]. (原始內容存檔於2017-09-11). 
  9. ^ DNSCrypt Resolvers. [2018-07-14]. (原始內容存檔於2020-06-19). 
  10. ^ jedisct1/dnscrypt-proxy. GitHub. [2017-02-16]. (原始內容存檔於2016-01-20) (英語). 
  11. ^ chengr28/Pcap_DNSProxy. GitHub. [2018-07-14]. (原始內容存檔於2018-06-11) (英語). 
  12. ^ softwareengineer1/YourFriendlyDNS. GitHub. [2018-07-14]. (原始內容存檔於2018-09-02) (英語). 
  13. ^ Andrew. DNSCrypt: How To Encrypt DNS Traffic In Ubuntu Or Linux Mint. webupd8.org. 2015-01-14 [2017-02-16]. (原始內容存檔於2017-03-15) (英語). 
  14. ^ bitbeans/SimpleDnsCrypt. GitHub. [2018-07-14]. (原始內容存檔於2018-07-16) (英語). 
  15. ^ stammy/dnscrypt-osx-client. GitHub. [2018-07-14]. (原始內容存檔於2018-06-11) (英語). 
  16. ^ BarakAdama. Решаем проблему перехвата и подмены DNS-запросов. DNSCrypt в Яндекс.Браузере. 2016-03-29 [2017-02-16]. (原始內容存檔於2017-03-05) (俄語). 

外部連結[編輯]