openSSH中可用的ECC算法(ECDH,ECDSA,Ed25519,Curve25519)提供了最佳的安全級別,以及(理想情況下)為什麼?
openSSH中可用的ECC算法(ECDH,ECDSA,Ed25519,Curve25519)提供了最佳的安全級別,以及(理想情況下)為什麼?
在SSH中,使用了兩種算法:密鑰交換算法(Diffie-Hellman或稱為ECDH的橢圓曲線變體)和簽名算法。密鑰交換產生密鑰,該密鑰將用於對該會話的數據進行加密。簽名使客戶端可以確保與正確的服務器進行對話(如果服務器強制執行基於密鑰的客戶端身份驗證,則可以使用由客戶端計算出的另一個簽名)。
ECDH使用一個曲線;大多數軟件使用標準NIST曲線P-256。 Curve25519是另一條曲線,其“銷售音調”是,它比P-256更快而不是更強。從人的角度來看,性能差異非常小:我們談論的是在小型PC上進行不到一毫秒的計算,並且每個SSH會話僅發生一次。您不會注意到它。哪一條曲線都不能說比另一條曲線“更強”,實際上(在“無法打破它”的領域中都相距甚遠)或在學術上(都處於“ 128位安全級別”)都可以說。
即使使用ECDH進行密鑰交換,大多數SSH服務器和客戶端也將使用DSA或RSA密鑰進行簽名。如果要基於橢圓曲線的簽名算法,則為ECDSA或Ed25519;由於曲線方程的精確定義,出於某些技術原因,P-256為ECDSA,Curve25519為Ed25519。再者,兩者都不比另一個更強大,並且速度差異太小而無法被人類用戶察覺。但是,大多數瀏覽器(包括Firefox和Chrome)不再支持ECDH(dh也是如此)。
現在使用P-256應該會產生更好的互操作性,因為Ed25519較新且不那麼廣泛。但是,對於配置的給定服務器以及要從自己的計算機訪問的服務器,互操作性並不重要:您可以控制客戶端和服務器軟件。
因此,基本上,選擇取決於美學,即完全由您決定,沒有合理的理由。無論如何,安全問題不會由這種選擇引起。密碼算法是整個系統中最強大的部分,而不是最弱的部分。
從 Ed25519簡介開始,有一些速度上的好處和一些安全上的好處。更有趣的安全性好處之一是,它不受多種邊信道攻擊的影響:
- 沒有秘密數組索引。該軟件從不從RAM中的秘密地址讀取或寫入數據。地址模式是完全可以預測的。因此,該軟件不受高速緩存定時攻擊,超線程攻擊和其他依賴於通過CPU高速緩存的地址洩漏的旁通道攻擊的影響。
- 沒有秘密分支條件。該軟件永遠不會根據秘密數據執行條件轉移;跳躍的模式是完全可以預測的。因此,該軟件不受側通道攻擊的影響,側通道攻擊依賴於通過分支預測單元的信息洩漏。
為了進行比較,已經在各種算法上演示了幾種現實中的緩存定時攻擊。 http://en.wikipedia.org/wiki/Timing_attack
我的印像是,Curve25519實際上比NIST曲線更安全,這是因為該曲線的形狀使其更不易受到各種側通道攻擊和實現失敗的影響。請參閱: http://safecurves.cr.yp.to
Ed25519的優點是能夠使用相同的密鑰來簽署密鑰協議(通常您不會做這個)。我對數學並不十分了解,可以說這是否是愛德華茲曲線的一個特性,儘管我確實知道它已轉換為蒙哥馬利坐標系(有效地轉換為Curve25519)以達成關鍵協議... Ed25519還是更多除了曲線外,它還指定了確定性的密鑰生成(例如,哈希),值得牢記。碰巧,這對於DJB實現是一個令人沮喪的事情,因為必須區別對待它們以保持互操作性。
到目前為止,還沒有直接解決的問題是,您的問題將或多或少的不相關名稱混在一起,好像它們是彼此等效的替代品,實際上並非如此。
ECDH和ECDSA只是加密方法的名稱。
ECDH 是密鑰交換方法,供雙方用來就不安全的密鑰協商安全密鑰溝通渠道。這是 DH (Diffie-Hellman)密鑰交換方法的變體。 ECDH代表橢圓曲線Diffie–Hellman 。然而ECDH只是一種方法,這意味著您不能僅將其與一條特定的橢圓曲線一起使用,而可以將其與許多不同的橢圓曲線一起使用。
ECDSA 是一種簽名算法,可以用這樣的方式對數據進行簽名,即對數據的任何更改都將導致簽名驗證失敗,但是攻擊者在更改後將無法正確地重新簽名數據。它是 DSA (數字簽名算法)的一種變體。 ECDSA代表橢圓曲線數字簽名算法。 ECDSA也僅描述了可用於不同橢圓曲線的方法。
因此,ECDH和ECDSA的安全性取決於兩個因素:
Curve25519 是特定橢圓曲線的名稱。其他曲線分別命名為Curve448,P-256,P-384和P-521。
Ed25519 是 EdDSA 具體變體的名稱。 。使用 SHA-512 和 Curve25519 執行EdDSA時,此變體稱為Ed25519。就像ECDSA一樣,EdDSA是一種簽名算法。
因此,如果某個實現只是說它使用ECDH進行密鑰交換或使用ECDSA簽署數據,而沒有提及任何特定曲線,則通常可以假定它將使用NIST曲線(P-256,P-384或P- 512),但該實現實際上應該始終明確命名所使用的曲線。
要回答有關安全性的問題:ECDH和ECDSA已被證明是概念上的安全密鑰交換和簽名方法,因此是安全性ECDH和ECDSA的差異很大程度上取決於以下事實:有人找到一種方法來打破一般的橢圓密碼術(可能性很小但並非不可能),或者找到正在使用的曲線內的缺陷(可能性更大)。
之所以有人選擇Curve25519而不是NIST標準曲線,是因為事實,即NIST尚未明確記錄為什麼它選擇這些曲線來替代現有曲線。通用聲明“ 表面上選擇曲線是為了獲得最佳的安全性和實現效率”,這聽起來很像是營銷禿頭,並且不會說服密碼專家。
2006年,NIST還標準化了基於隨機數生成器的橢圓曲線加密技術(Dual_EC_DRB),並且《紐約時報》聲稱(在審查了Edward Snowden洩露的備忘錄後),它是NSA影響NIST進行標準化的這個特定的隨機數生成器。在該生成器中發現了一個巨大的弱點,並且據信這是NSA故意創建的後門程序,它能夠破壞基於該生成器的TLS加密。當首次向Dual_EC_DRB提交ANSI時,ANSI顯然發現了該缺陷,但是儘管知道如何避免,但他們並沒有改進算法,也沒有公開這些缺陷,因此認為不允許它們(gag order)。 )。當薄弱環節廣為人知時,該標準於2014年撤消。
當然,有了這些背景知識,人們開始懷疑,也許神秘的NIST曲線參數的來源實際上也是NSA,因為這些曲線還隱藏了尚未公開的弱點,但NSA可能知道關於它們的信息,因此能夠根據這些曲線破解密碼。沒有任何證據可以證明這一主張,甚至沒有推定證據,但它肯定比童話故事更可行和更現實。這就是為什麼人們對這些曲線失去信任,而轉向那些極不可能的,受全球任何秘密服務影響的替代方案的原因。
Curve25519由德裔美籍數學家和密碼學家Daniel J發表伯恩斯坦在2005年,還設計了著名的Salsa20流密碼及其現在廣泛使用的ChaCha20變體。他還發明了Poly1305消息身份驗證。 Google決定將ChaCha20與Poly1305結合使用是一種安全的替代方法,因為該算法已被破壞,因此必須刪除RC4後才能在TLS中使用。與使用AES塊削片機相比,它所需的計算能力要低得多(對移動設備非常有用,因為它可以節省電池運行時間),但據信可提供相當的安全性。 ChaCha20 / Poly1305在RFC 7905中進行了標準化,並從今天開始廣泛用於TLS客戶端-服務器通信中。因此,如果伯恩斯坦是NSA的間諜,這不太可能發生,那麼我們所有人都將注定要失敗,因為TLS(因為如今經常使用TLS)可能無法保護數據免受秘密服務的侵害。