AES 加密密鑰中的特殊字元
我們都知道 AES 使用 Key、IV 和 salt。但是,如果我們在 Key 或 IV 或 salt 中添加特殊的 ASCII 字元,如 Alternate 255 (" “) 或 Alternative 163 (“£”) 或 Alternate 224 (“α”) 會怎樣。
它是否增加了額外的安全性?
必須完全隨機生成 AES 密鑰。它是 256 位,實際上被編碼為 32 個 8 位字節。
請注意,這些是字節,而不是字元。使用多字節編碼,密鑰可能具有可變數量的字元,實際上它通常無法轉換為字元串,因為隨機字節字元串很可能不是有效的 UTF-8 編碼。
由於密鑰的內容是隨機的,因此您無法選擇其中包含哪些字元。密鑰不像密碼,它由可列印的字元組成並且旨在由人類輸入。密鑰是二進制數據,永遠不會被人類看到。
我不知道您的程式語言是否將字節字元串(二進制數據)與文本字元串區分開來。如果是這樣,請確保始終傳遞密鑰和其他加密數據(例如 CBC 的 IV)並以字節字元串的形式儲存。
這適用於所有對稱密鑰,而不僅僅是 AES 密鑰。一些非對稱密碼學使用的密鑰是必須匹配某些約束(例如,在某個範圍內、為素數等)的數字,而不是任意字節串。再一次,你不能選擇數字,它們必須在約束範圍內隨機生成。
最後一點:您提到使用 AES-CBC。AES 是一個不錯的選擇,但 CBC 不是。可以安全地使用 CBC,但也有很多機會出錯。除非你明白為什麼 CBC 是好的(你不明白或者你不會問這個問題)或者你必須與其他人定義的格式兼容,否則不要使用 CBC。相反,請使用現代經過身份驗證的加密模式。流行的選擇包括 AES-GCM、AES-CCM 和 ChaCha20-Poly1305。SIV 變體提高了安全性,但不是很普遍;如果涉及到,請使用您庫的內置 GCM,而不是滾動您自己的 SIV。