
有人可以詳細回答這兩種方法的差異和優點/缺點嗎?
我不是 DNS 專家,也不是程式設計師。我對 DNS 有相當的基本了解,並且有足夠的知識來理解卡明斯基錯誤之類的事情是如何運作的。據我了解,DNSCurve 具有更強的加密能力,設定更簡單,並且是更好的解決方案。
DNSSEC 不必要地複雜,並且使用易破解的加密,但它提供了端對端的安全性,而 DNSCurve 則沒有。然而,我讀過的許多文章似乎都表明端到端安全性沒有什麼用處或沒有什麼區別。
那麼哪個才是真的呢?哪個是更好的解決方案,或每個解決方案的缺點/優點是什麼?
編輯:
當目標是身份驗證而不是機密性時,如果有人可以解釋透過加密訊息內容可以獲得什麼,我將不勝感激。
金鑰是 1024 位元 RSA 金鑰的證明是這裡。
答案1
DNSCurve 為 DNS 封包提供實際的加密,儘管只是逐跳加密,特別是在遞歸伺服器和權威伺服器之間的跳躍上。
當在該路徑上使用時,它可以提供區域資料的身份驗證。然而,下游的任何用戶端都無法從此身份驗證中受益,因為安全性只是「逐跳」。位於解析路徑中間的惡意解析器仍然可以提供虛假資料。
另一方面,DNSSEC 提供端對端可驗證的加密簽名,證明接收的資料與權威伺服器上的資料相同。 DNSSEC 使用加密技術,但實際上並未加密任何 DNS 流量。
DNSCurve 使用橢圓曲線加密演算法,可以使用比 RSA 小得多的金鑰來實現相同等級的加密強度。然而,有人建議將類似的演算法包含在 DNSSEC 假定的清單中。
DNSSEC 由 IETF(RFC 4034 和 RFC 4035,由 RFC 5155 更新)標準化,並在幾種非常流行的名稱伺服器實作中實現,包括 BIND(當然)和 NSD/Unbound。 PowerDNS 很快就會支援 DNSSEC。
DNSSEC 確實很複雜,但我們正在努力簡化它(請參閱例如http://opendnssec.org/)並且部署一直在增加。各種 TLD(.se、.br、.org、.gov 等)已與 DNSSEC 簽署,並已宣布根區域將在今年年底前簽署 DNSSEC。
DNSCurve 非常有趣,但由於它的開發方式是獨立的,因此幾乎沒有機會看到任何重要的部署。恕我直言,它有零部署在根伺服器上的機會。
順便說一句,您關於 DNSSEC 使用「可破解加密」的斷言似乎完全沒有根據。你這麼說的依據是什麼?
區域簽章金鑰通常(但不一定)長為 1024 位元。這些密鑰通常每月左右滾動一次,目前的最佳估計是至少需要幾年才能完成蠻力1024 位元密鑰。
目前,針對 1024 位元 RSA 的暴力攻擊大約需要兩年時間,需要數百萬個運算核心,每個處理器或主機板需要數十 GB 內存
這並不完全是典型的殭屍網路。來自同一篇論文:
接下來考慮專用硬件,最樂觀的方法表明,篩選 1024 位元 RSA 模數可以在一年內完成,成本約為 10,000,000 美元,加上一次性開發成本約為 20,000,000 美元,並且具有相當的時間和成本對於矩陣。我們認為,此類設計所遇到的(普遍的)懷疑並不是重點。這些數字不應該被解釋為上限,即“小心,兩年內花費大約 2000 萬美元(假設自由開發)就可以破解 1024 位 RSA”,而應被解釋為下限,即“沒有理由擔心”太多了:即使在非常有利的攻擊條件下,分解1024 位元RSA 模數仍然需要大量資源。因此,這些估計不應被解讀為威脅,而應被解讀為鼓舞信心。
或從一歲開始PCPro文章:
從這個角度來看,要破解 RSA 1,024 位元金鑰,卡巴斯基估計需要 1,500 萬台電腦全力運作一年才能成功
坦白說,沒有人會花那麼多精力來破解一個域的 ZSK!
此外,真正的安全性在於金鑰簽署金鑰,這些金鑰通常至少為 2048 位,而且通常更長(4096 位元)。破解 RSA 金鑰所需的時間隨著金鑰長度呈指數增長,而不是線性增長。
答案2
答案3
重要的是要理解「信任」而不是「加密」才是安全的關鍵。您可以使用「加密」與某人進行「安全」對話,但如果另一端的人不是您認為的人,那麼這對您有什麼好處呢?
DNSSec 和 DNSCurve 之間的主要區別在於 DNSSec 對所有內容進行簽名,從根一直到每個運營商 DNS 伺服器提供的主機記錄都有一條清晰的信任鏈。
DNSCurve 不會簽署任何內容,根本沒有信任鏈。 DNSCurve 的重點縮小到防止 DNS 回應的被動或盲目平衡。
歸根結底是實用性…DNSSec 存在巨大的營運挑戰 - 如何實際創建一個地球大小的信任錨?當數以百萬計的網域被簽名時,使用什麼機制來灌輸信心,確保偽造任何簽名所需的密鑰材料不會落入壞人之手或不會被不當使用?從營運角度來看,大規模的信任是很難實現和維持的。
DNSCurve 甚至沒有嘗試。
現在已經回答了基本問題,這就是我對實際要解決的問題是什麼以及這兩種技術中哪一種更適合的看法。
網路本質上既是廢話的場所,也是重要的討論和啟蒙的場所。在我看來,完全值得信賴的網路並不是一個合理或可實現的目標,如果它成為這樣,可能會對自由和匿名言論和行為產生負面影響。
在我看來,所需要的只是一個 DNS 解決方案,該解決方案位於至少與底層傳輸一樣值得信賴。它需要切實防止攻擊者盲目注入虛假訊息或被動嗅探請求並偽造 UDP 回應而破壞 DNS 記錄。它不需要保證除此之外的安全性。透過這種方式,網際網路繼續以可靠但不一定安全的方式路由資料包並提供 DNS 服務。
在我看來,DNSSec 及其全球信任錨是一項愚蠢的任務,它幾乎完全專注於解決一個不存在的問題。 (所有可以在互聯網上使用的端對端加密系統都已經有自己的身份驗證方法)
DNSSec 速度慢、成本高,並且會大大延遲 DNS 的明顯且當前的問題,例如轉向 IPv6,這些問題本應在昨天得到解決。
DNSCurve 的作用是保護網絡,以便命名服務處於至少與網路上資料包的底層傳輸一樣可靠,但僅此而已。在我看來,它解決了現實世界中實際面臨的確切問題。 DNSCurve 可以防止被動 MITM,但如果沒有 ssh 風格的「跨越式信任」簽名緩存,它實際上無法防止主動 MITM。
扮演魔鬼的角色,倡導大規模部署 DNSSec 可能會產生積極的影響。 PKI 基礎架構可以取代 SSL 安全伺服器 CA,並為 IPSec 和其他對等點之間的加密對話提供一些信任綁定。
答案4
我得出的結論是,DNSCurve 是更好的選擇。
因為:
DNSSEC 使用 1024 位元 RSA 金鑰進行簽名,大型網路、殭屍網路在 2003 年就認為該金鑰牢不可破。這個案例至今依然成立。
為了正確實現,必須重寫許多程式碼。
根伺服器不會簽署完整的資料庫,不提供全面的保護。
域過期後 30 天內都可能發生重播攻擊。
為了實現安全性,有必要公開所有網域。
DNSCurve 不存在這些問題,並且允許以 DNSSEC 所不具備的方式進行身份驗證、可用性和機密性(如不必公開名稱)。此外,它不需要修改程式碼,只需要額外的軟體。
它還具有對偽造資料包的保護(DNSSEC 沒有),以及由於使用隨機數而針對重播攻擊的保護。 DNSCurve 可能會受到 MITM 攻擊,而 DNSSec 不會,但我的理解是,如果 DNSCurve 一直實現到根,情況就不會是這樣。