這個方案有漏洞嗎?
我們想設計一個對稱加密方案。請注意,以下情況適用於我們的系統:
- 對於給定的使用者,明文 P 每次都會改變。
- 使用者將選擇一個可能在其一生中保持不變的密碼
- 通過散列使用者密碼(使用 SHA256)導出 256 位密鑰 K。
- 我們將需要多次加密明文。但是保證每次明文都不一樣
- 明文保證為 256 位。
- 明文將在系統內部生成,任何人都無法訪問。
- 密文將在公共領域。因此擁有密碼的使用者可以導出明文。
如果我們使用XOR-Cipher (
C = P ^ K
和P = C ^ K
),這個系統是否安全。我們的替代方法是使用 AES 或 chacha20-poly1305。這些中的任何一個都比 XOR-Cipher 方案有什麼優勢嗎?PS。我們將在基於異或的系統中使用校驗和(明文的 SHA)來保證完整性(因為 chacha-poly 具有 MAC)。
這似乎是一次性密碼,變成了多次密碼,因為對於輸入的每個不同的明文,密鑰都是相同的。那麼這是一個損壞的結構 - 查看您的 wiki 連結的“使用和安全”選項卡。
例如,如果使用 AES,例如 CTR 模式,使用計數器,那麼它是安全的,只要計數器從不重複 - 基本上再次變成多墊。
對於完整性檢查,使用 HMAC 或類似的密鑰作為 AES 密鑰的雜湊,或者使用一些 HKDF 提取和擴展系統。僅使用散列的問題是,如果有人更改密文,那麼他們可以重新計算散列並更改它,因此完整性被破壞。
系統要麼不安全,要麼非常不安全。
使用異或時,具有兩個密文的攻擊者可以對它們進行異或,消除密鑰並獲得兩個明文的異或。
您說明文都是不同的,並且是 256 位,如果它們是隨機均勻選擇的,那麼對它們中的兩個進行 XOR 顯然是不可取的,但不會立即顯示明文。
如果即使一個明文被洩露,它也會顯示相同密鑰的所有其他明文,如果一個明文的一部分被洩露,它會顯示所有其他明文的匹配部分。
如果明文是低熵的,可猜測的,有一些結構。例如,部分是人類語言。明文對的異或可以簡單地揭示明文和密鑰。
即使您使用強密碼,例如 AES CTR。您的密鑰派生很弱,並且允許有效地暴力破解密碼。通用雜湊函式會導致基於密碼的密鑰派生效果不佳。使用合適的東西,例如:PBKDF2、bcrypt、scrypt 或 argon2 這些可以減緩暴力破解。記住使用者選擇的密碼熵不高。