Hash
使用 Web Crypto API (SubtleCrypto) 進行加密
我想在無狀態環境中端到端加密項目。這些項目有一個標識符(隨機字元串)。現在我想通過添加隨機密鑰來添加加密。URL 可以是
https://server.tld/item#key
使用者可以相互共享的 URL。我只想使用 Web Crypto API (
SubtleCrypto
) 而沒有任何其他庫。到目前為止我的想法:
- 生成隨機密鑰:window.crypto.subtle.generateKey()
window.crypto.getRandomValues()
- URI 片段的 Base64 編碼/解碼:
btoa()
/atob()
- 創建關鍵對象:
window.crypto.subtle.importKey()
- 使用 AES-CBC 加密/解密:
window.crypto.subtle.encrypt()
現在我需要一個
iv
. 我考慮過通過使用項目標識符的雜湊window.crypto.subtle.digest()
。但是 AES-CBC 需要16 個字節。使用 SHA-1 的前 16 個字節(20 個字節長)作為 IV 是否是個好主意?
這是不是一個好主意
$$ from a security perspective $$使用 SHA-1 的前 16 個字節(20 個字節長)作為 IV?
這取決於.
對於 CBC,主要要求是 IV 是攻擊者應該是不可預測的。特別是,您永遠不應該多次使用相同的 IV 來加密同一密鑰下的消息。
這意味著,在您的系統中,應該不可能編輯或覆蓋這些項目。如果編輯一個項目是可能的,那麼從項目標識符派生 IV 絕對是一個壞主意。
如果你想支持項目的編輯,你應該總是生成一個(偽隨機)IV。(即它不應該是攻擊者可預測的。)