2011-08-09 47 views
4

我搜索了整個網絡,包括這裏在SO上:有很多關於哈希和存儲之前需要密碼密碼的討論。加密:當我甚至根本不存儲密鑰時,是否需要加密密鑰?

如果使用密碼來計算用於加密的密鑰(「基於密碼的加密」):如果您不在密碼存儲區中,該怎麼辦?

假設:

對於加密

  1. 用戶進入主密碼
  2. 這是SHA256散列並且輸出用於AES256加密文件
  3. 散列是存儲(和明顯既不是主密碼)

對於解密

  • 在使用者進入主密碼
  • 這是SHA256散列並且輸出用於解密該文件
  • 如果解密成功,密碼是 - 很明顯 - 正確
  • 我的問題:

    當不存儲除了加密文件本身的東西,有沒有前醃製主密碼的任何好處哈希呢?

    注意事項:

    • 它可能會降低哈希衝突
    • 它需要的鹽的可能性進行存儲。
    • 如果鹽丟失/損壞的用戶將不能夠解密了

    • 如何檢查步驟3中成功解密文件:這確實需要的文件部分內容闖出一片天?

    • 如果是這樣,有多少假人將一個已知值存儲在加密文件中(這不能總是被阻止 - 攻擊者可能會猜測,例如用戶姓氏在文件的某個地方被加密 - 一個是正確)。

    回答

    3

    如果你沒有存儲主密碼,那麼就沒有必要對它進行加密。如果您重複使用主密碼來生成大量單次使用密碼,則需要根據需要對其進行加密和解密。

    Salting是長期存儲必須多次匹配的用戶密碼才能使具有相同密碼的人不具有相同的散列,這將有助於竊取文件的攻擊者。

    鹽用於長期存儲散列,IV用於使用CBC模式(或CTR模式,也可稱爲隨機數)加密。

    至於檢查您的文件是否已正確解密,請確保您使用像PKCS7一樣的填充。當最後一塊被解密時,將會檢查填充以確保其格式正確。如果解密失敗,則填充格式不正確,您應該會收到「填充失敗」錯誤。

    +0

    明確答案,不儲存,不醃製。另外,我*使用PKCS7填充並檢查:常見的cryptor確實很好地返回錯誤提供了一個錯誤的關鍵;不需要檢查文件內容。 – Wouter

    +0

    更新:後者不再是真實的。 CCCrypt現在總是返回成功。 [Apple Dev Forums](https://devforums.apple.com/message/920949#920949) – Wouter

    +0

    如果設置了「NoPadding」,則會接受任何垃圾。最好檢查你的設置,然後刻意用不正確的密鑰解密。 – rossum