Encryption
加密時的“hex”與“base64”編碼
在 Node.js 上使用密碼檢查加密/解密的不同實現,我注意到一些實現使用
hex
編碼:let encrypted = cipher.update(value, "utf8", "hex");
而其他人更喜歡
base64
:let encrypted = cipher.update(value, "utf8", "base64");
問題:
- 編碼選擇是否在密碼加密中起重要作用?
- 從安全的角度來看,錯誤的編碼選擇會影響結果嗎?
編碼選擇是否在密碼加密中起重要作用?
不會。密碼對位串進行操作。更重要的是關注它是什麼類型的“密碼”以及它提供的安全目標:您通常需要經過身份驗證的密碼,例如 NaCl crypto_secretbox_xsalsa20poly1305 或 AES-GCM,而且您絕對不想使用 AES 字母直接自己。專注於安全契約。
從安全的角度來看,錯誤的編碼選擇會影響結果嗎?
就密碼學而言,但複雜的編碼方法可能會帶來自身的安全問題:
- 如果您將 base64 編碼器/解碼器應用於明文而不是密文,您可能會通過簡單數組查找十六進制數字中的時序側通道洩漏有關明文的資訊。
- 如果您對明文應用壓縮,您可能會通過密文的長度作為旁通道洩漏有關它的資訊。
- 如果您的編碼方法像 ASN.1 解析器一樣有缺陷,那麼您的應用程序可能會像心臟出血的 OpenSSL 一樣將其記憶體內容吐出。