Rsa

在公共渠道中保持機密性和完整性

  • January 22, 2016

假設我有兩個人正試圖在公共頻道中交談 $ A $ 和 $ B $ 他們希望保持機密性和完整性。

他們想使用哪種加密算法?對稱,還是基於公鑰?此外,什麼類型的算法套件最好,密鑰大小是多少?

據我了解,鑑於通道是公開的——因此被認為是不受保護的——他們必須先使用公鑰,然後再發送對稱密鑰,從而保護通道。關於密鑰交換,他們可以使用 Diffie Hellman 或 RSA,以及對稱密鑰 MAC。

這個對嗎?他們能做得更容易嗎?有沒有更安全的方法?

他們想使用哪種加密算法?

這將取決於具體情況。要選擇算法,應該(至少)問自己以下問題:

您信任哪些標準?您必須使用哪個標準?你能負擔得起哪些計算?

對稱,還是基於公鑰?

這又取決於情況。通常你會使用兩者的組合,但是有一些有效的案例可以使用公鑰加密(通常是非常短的消息)和使用對稱加密,通常是在性能受到限製或共享秘密已經存在的情況下已建立(即使用嵌入式設備或在會話恢復場景中)。

還有什麼類型的算法套件最好,密鑰大小是多少?

算法實際上取決於給定的情況。然而,通常使用 128 - 256 位對稱加密、256 - 512 位散列函式、256 - 512 位橢圓曲線和/或 2048 - 4096 位經典非對稱加密(RSA、DSA…)。

考慮您的第三段:

簡而言之,您是對的。您首先使用非對稱加密(RSA 或 (EC)DH)協商對稱密鑰,然後使用對稱加密來保護您的有效負載。你所描述的基本上是*機會加密*,因為任何一方都沒有採取措施來保證對方的真實性。這意味著中間人攻擊肯定是可能的,因此主動攻擊者可以破壞該計劃。

有沒有更安全的方法?

有:傳輸層安全性(TLS)

TLS 是安全實時數據傳輸的標準解決方案,甚至有一些很好的安全證明。TLS 可以處理您可能遇到的所有情況:您可以使用預共享密鑰,您可以使用密碼(通過SRP)對伺服器進行身份驗證,您可以僅使用證書(或僅公鑰)一方或雙方,甚至被廣泛部署,著名的庫有OpenSSLLibreSSLBoringSSL

引用自:https://crypto.stackexchange.com/questions/32079