Encryption
這六個 TLS 密碼套件中的最佳選擇
我有一個支持 6 個 TLS 密碼的小型嵌入式平台。有沒有好/更好/最好的選擇?
我在網上四處尋找某種評級系統或已知弱點的密碼列表,但我找不到太多。
回到我的項目,我使用 Wireshark 工具在與伺服器進行身份驗證時擷取“客戶端 hello”,我的(slim)選項如下:
- TLS_RSA_WITH_RC4_128_SHA (0x0005)
- TLS_RSA_WITH_RC4_128_MD5 (0x0004)
- TLS_RSA_WITH_AES_128_CBC_SHA (0x002F)
- TLS_DHE_DSS_WITH_AES_128_CBC_SHA (0x0032)
- TLS_RSA_WITH_3DES_EDE_CBC_SHA (0x000A)
- TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA (0x0013)
我聽說三重 DES、RC4 和 MD5 不安全,所以我應該避免使用這些算法的密碼嗎?這會給我留下密碼套件 TLS_RSA_WITH_AES_128_CBC_SHA 和 TLS_DHE_DSS_WITH_AES_128_CBC_SHA 嗎?
理想情況下,您不應該使用其中任何一個。完全沒有。
這就是為什麼。
- RC4、MD5 和 DES 不應再使用。舊加密貨幣。扔了它。
- AES 中的 CBC 模式有時會遇到實現問題(參見 Padding Oracles)。因此,應該避免CBC。
- SHA1 被認為是不安全的,自 2017 年 1 月以來,主流瀏覽器不再接受它作為證書籤名雜湊。
因此,如果您絕對必須堅持使用其中一種密碼,我同意@otus 的觀點,並推薦 TLS_DHE_DSS_WITH_AES_128_CBC_SHA。
如果您有機會將其他密碼添加到您的嵌入式平台,請知道:
對稱密碼:
- 截至 21 世紀初,**AES 和 ChaCha20是最好的對稱密碼。**簡單地說,它們之間的區別是塊密碼和流密碼,因此速度不同。
- AES經常利用AES-NI,這是一種硬體加速,在目前筆記型電腦和伺服器的許多處理器上都有。
- ChaCha20 在移動和嵌入式平台上是首選,AES 硬體加速很少見,因為它確實更快。
- Poly1305實際上是 ChaCha20 的最佳搭檔,因此它們是成對出現的。
- 對於 AES,請考慮 AEAD 兼容模式,例如 GCM。
- 選擇 SHA2或以上的雜湊算法(SHA384、SHA512、…)。越高,越安全。但這太過分了,需要更多時間並且在尺寸方面更重。所以堅持使用 SHA256。
非對稱密碼(用於密鑰交換):
- 今天的趨勢和最佳用途是 Diffie-Hellman。更好的是,Ephemeral Elliptic-Curve Diffie-Hellman (ECDHE),因為它更小、更快(您可以在幾毫秒內生成 384 位參數,對應於在嵌入式設備上需要數小時才能生成的 7680 個非 EC 位) .
證書籤名:
- 沒有人使用DH。
- RSA~~很好。從現在開始要避免。~~還是不錯的。
它的驗證速度甚至比 DSA 還要快 - 看看 (由您決定這是否對您的使用重要)。
openssl speed
- **最佳用途:ECDSA。**DSA是新的,再加上橢圓曲線,它比 RSA 更小,速度更快 - 再看看
openssl speed
. 被認為更安全。遺憾的是,目前 OpenSSL 不支持 Edwards 曲線。(對不起,如果我錯過了細節或不清楚,請在午休時間寫下。)
編輯:添加了關於 ECDSA 和 RSA 之間選擇的說明。感謝@Dreadlockyx 和@otus 讓我再看一遍!