Tls
使用 ChaCha20 代替 AES 有什麼吸引力?
我讀到了有關Google、SSH 在 TLS 中使用 ChaCha20 以及一般標準化的資訊。
使用 AES 以外的東西有什麼吸引力,AES 在各種架構上接收專用 CPU 指令以使其如此高效?
我相信 ChaCha20 有時比 AES 更受青睞有三個主要原因。
- 在沒有專用指令的通用 32 位(或更高)CPU 上,ChaCha20 通常比 AES 快。原因是 ChaCha20 基於 ARX (Addition-Rotation-XOR),這是 CPU 友好的指令。同時,AES 使用二進製欄位進行 S-box 和 Mixcolumns 計算,通常將其實現為查找表以提高效率。
- AES 使用帶有從密鑰派生的索引的查找表,這使得一般實現容易受到記憶體定時攻擊。ChaCha20 不易受到此類攻擊。(通過 AES-NI 實現的 AES 也不易受到攻擊)。
- Daniel J. Bernstein 在宣傳他的算法方面取得了顯著高於平均水平的成功。(我並不是說沒有優點。我只是在說明他的算法在部署方面取得了成功)。
當然,其他原因證明選擇 AES 而不是 ChaCha20 是合理的。
僅舉幾例:
- 高端 CPU 上的專用指令
- 收到的密碼分析數量
- 側通道(記憶體時序除外)保護研究的可用性
除非我們從Google找到資訊——例如白皮書和郵件列表文章——我們只能推測為什麼選擇 ChaCha20。我認為高效的軟體實施仍然是最可能的原因。AES-GCM 相對脆弱——例如在定時攻擊方面——可能是另一個問題。
請注意,儘管 AES-NI 在 x86 處理器市場中變得越來越普遍,但這並不意味著其他處理器架構正在實施 AES 加速。例如,廉價的 Android 手機可能不包含它。此外,雖然 CPU 上支持 AES-NI,但這並不意味著軟體實際上正在使用該指令。可以使用附加指令加速 GCM 模式以加速 Galois 域乘法。
可以同時使用 AES CTR 和 Poly1305(同時確保不會以不安全的方式重用密鑰)。但是,組織必須先定義該 AEAD 算法,然後才能使用它。因此,使用 AES 可能意味著 GCM 身份驗證,而 ChaCha20 為您提供 Poly1305。