Camellia 或 AES - 我應該使用哪個?
想像一下,我是一名軟體開發人員。我想要一個分組密碼,我可以選擇使用 AES 或 Camellia。我應該使用哪個?從技術角度來看,哪個更有意義,為什麼?我需要選擇 TLS 密碼套件的優先順序:我應該將 AES 密碼套件放在密碼套件的上方還是下方?
例如,Firefox 的 SSL/TLS 庫目前將 Camellia 密碼套件列為優先於 AES 密碼套件。那是正確的選擇嗎?其他人應該效仿 Firefox,還是應該將 AES 密碼套件列為首選而不是 Camellia?
(另請參閱為什麼沒有人使用(或破壞)Camellia Cipher?和為什麼 CAMELLIA 突然如此廣泛使用?,它們相關但不相同。)
從技術角度來看,應該以不同方式處理三種一般情況:
**場景 1:**您控制客戶端軟體將連接到的伺服器的配置,並希望在客戶端軟體的整個生命週期內保留該控制權。在這種情況下,您只需要(並且可能應該)啟用單個密碼套件,包括客戶端和伺服器端。給定幾個都滿足您的最低要求的密碼套件之間的選擇,並假設此列表中至少有一個 AES 密碼套件,請選擇那個(出於此處所述的原因)。
也就是說,如果您受到安全要求的約束才能擁有一個回退選項,那麼您顯然必須啟用多個密碼套件,例如,萬一密碼套件被破壞並且您的軟體升級機制更有可能失敗,而不是您的重新配置伺服器的能力。然而,這是在這種情況下啟用多個密碼套件的唯一技術原因。
如果您知道伺服器實現尊重客戶端的密碼套件偏好,那麼客戶端如何訂購密碼套件可能很重要。不過,一般來說,TLS 標準沒有指定伺服器應該如何選擇密碼套件,所以這將是特定於實現的,並且對於stackoverflow來說是一個更好的問題。
**場景 2:**您不控制伺服器的配置,例如因為您的客戶端軟體可能連接到多個伺服器,但您知道所需的最少伺服器的配置。如果在這些伺服器支持的密碼套件的交集中有多個密碼套件,並且該集合包含至少一個 AES 密碼套件,則情況與場景 1 沒有太大區別,除非您可能更有可能在這種情況下,需要包括一個備份選項。
**場景三:**你不控制伺服器的配置,對於不同的伺服器和不同的使用者,你的安全要求是不同的。這些要求的交集是空集。在這種情況下,您基本上不走運。您最好的選擇可能是讓具有管理員權限的人可以配置客戶端密碼套件使用者,但這超出了密碼學的範圍,並且對於IT 安全來說是一個更好的問題。
這取決於您的預期用途。如果硬體環境支持 AES 的處理器指令,那將是首選,因為它將具有更高的性能和更少的側通道洩漏。如果您沒有這些說明,那麼從技術角度來看,每個說明都應該具有與給定位大小相同的安全級別。
密碼套件的選擇更多是一個互操作性問題,如果您正在使用瀏覽器,我會跟隨 Mozilla 的領導,如果您正在使用伺服器軟體,有更好的方法來控制實際使用的密碼,儘管所有現代瀏覽器都應該支持兩個密碼。無論哪種方式,都應該實現兩種密碼,優先考慮 AES。
如果您正在使用瀏覽器或伺服器軟體,您應該使 TLS 1.1 和 1.2 成為唯一允許的協議,即使它破壞了某些兼容性。