安全算法的最佳選擇

概述

近年內隨著硬件提升CPU性能提高,GPU計算,大規模分佈式計算機集群的投入,雲廠商計算密集型雲解決方案,以及密碼學研究的進步,使得大大降低了安全算法破解難度。一些以前認為固若金湯的加密算法,比如md5哈希算法,sha1算法都已經不再安全。那麼,現在都已經9102年了,我們應該怎麼選擇算法,以保證安全呢?本文蟲蟲就給大家說說時下算法安全相關的選擇。

安全算法的最佳選擇

密碼密鑰大小

多年來,關於加密密鑰長度的研究有很多,學術界,如Lenstra的文論和各標準委員會(ECRYPT-CSA,德國BSI,美國NIST等)。互聯網上有大量相關材料,但是沒有一個東西統一說明具體選擇的標準,碼農和運維們都不知道如何選擇設置。安全行業中的許多人完全專注於加強密鑰的長度,最大化暴力攻擊的難度,他們選擇符合目標基準的最大可能密鑰,這樣會讓他們感覺最安全了。實際上並非如此,他們選擇實際上不是最佳的,而且還可能有礙安全。

實際上,超過某個閾值,在大的密鑰也不會帶來更多的安全性。我們考慮下面兩個分組密碼,哪個更安全?

Blowfish,最多支持448位密鑰和AES,最多支持256位密鑰。

如果你基於密鑰長度而選擇了Blowfish,那麼你選擇錯了!

Blowfish的塊大小為64位,而AES的塊大小為128位。Blowfish易受攻擊,因為它的塊大小不是AES。實際中AES具有硬件加速(AES-NI),使其速度非常快,同時不受緩存定時攻擊的影響。而Blowfish沒有可用的硬件加速。

只完全關注密鑰大小,而忽略這些算法的其他安全屬性,可能導致做如上錯誤的選擇。

同時,就算是都用同一條件,同一算法,比如都使用AES,128位和256位密鑰是不是該選擇256位的呢?實際上也不是在絕大多數情況下AES-128和AES-256的算法安全性上沒有差異,但是256位的需要的計算量則要大大增加,會影響系統性能,所以更優的選擇是AES-128。

由於大多數AES密鑰是用於非對稱密鑰交換的,除非量子計算機已經成熟,利用Grover算法可以攻破AES-128,所以AES還可以保障安全。

非對稱加密

優先選擇的順序:

1.X25519(密鑰大小固定)對稱加密。

2.使用secp256r1的ECDH(密鑰大小固定)對稱加密。

3.2048位密鑰的RSA。

即使使用3072位RSA其安全性和256位ECDH的一樣。

安全算法的最佳選擇

有許多組織建議在未來幾年內從2048位RSA遷移到3072位RSA(甚至4096位RSA),但是請不要遵從這些建議。而是從RSA遷移到ECDH算法,這樣你就不用考慮以後量子計算機出來後的算法被破解了。

此外,在使RSA加密安全時需要考慮許多複雜的問題,我們在此不再詳述,建議是最好替換掉RSA。

非對稱簽名

優先選擇的順序:

1.Ed25519(密鑰大小固定)。

2.secp256r1的ECDSA(密鑰大小固定)。

3.2048位密鑰的RSA。

與上面非對稱加密算法選擇一樣。

對稱密鑰加密

優先選擇的順序:

1. XChaCha20-Poly1305或XSalsa20-Poly1305(256位密鑰)

2. AES-GCM-SIV(密鑰大小隨意)

3. ChaCha20-Poly1305(256位密鑰)

4. AES-GCM

如果正在使用一個比較安全的TLS庫(比如OpenSSL),上述算法可以隨意選擇並使用256位密鑰,安全性要去不是很高的情況下也可以使用128位的密鑰。

對於應用層對稱密鑰加密,應考慮兩個附加選項。

5. AES-CTR(密鑰大小隨意)+ HMAC-SHA2

6. AES-CBC(密鑰大小隨意)+ HMAC-SHA2

如果你要使用其他內容,則請諮詢密碼學比較瞭解的人員。上述列表中256位密鑰,在安全性不是很苛刻的情況下都可以換成128位。

對稱密鑰驗證

可以使用HMAC和SHA2族散列結合使用,密鑰大小為散列函數大小。

這裡可以有很多選擇。但是要確保SHA-224的224位密鑰。

需要注意的是,不要用哈希函數作為消息身份驗證協議,而是使用HMAC。

如果你使用的對稱加密包括Poly1305身份驗證,但是該算法配置要求比較高,需要你精通,否則請慎用!

選用了合理的算法,224位,256位,384位,512位密鑰大小都很好。

特定協議和應用配置

HTTPS /TLS

簡易模式:使用Mozilla的服務器端TLS配置在線生成器。

安全算法的最佳選擇

安全性要求較高:使用ECDHE,CHACHA20-POLY1305和AES-GCM構建你的https加密算法集,並使用Qualys SSL Labs等https工具配置,確保你的可以拿到全綠的A+。

需要注意的是對TLS請最低選擇TLS 1.2版本,有條件的可以上TLS 1.3它有很重大的性能改善。

SSH

簡易模式:遵循Mozilla的OpenSSH服務器配置指南。

安全算法的最佳選擇

此外,確保使用Ed25519密鑰。可以通過將ssh-keygen -t ed25519來生成。

VPN

自建VPN可以使用WireGuard或者商業VPN。

如果要使用OpenVPN,請遵循特定步驟來強化OpenVPN配置。OpenVPN的默認設置對安全性來較差,比如認加密算法是Blowfish。


分享到:


相關文章: