Passwords

我可以通過用散列密碼異或來保護我的密鑰嗎?

  • February 23, 2012

我想建構一個簡單的受密碼保護的對稱密鑰系統。我係統中的密鑰創建過程如下:

  1. 系統完全隨機創建一個 256 位密鑰。
  2. 使用者選擇一個密碼,該密碼使用 SHA-256 進行雜湊處理。
  3. 系統儲存值key XOR SHA(password),我們稱之為“偽鍵”。

偽密鑰由系統或使用者永久儲存,而實際密鑰和密碼雜湊永遠不會儲存。當使用者想要生成他的密鑰用於加密或解密時,他可以從 重新創建實際密鑰pseudokey XOR SHA(password)。密碼雜湊和實際密鑰總是在使用後立即銷毀。

  • 除了對手獲得偽密鑰和暴力破解密碼之外,該系統是否存在任何明顯的理論問題?
  • 它是否明顯不如其他現存的基於密碼的密鑰系統?
  • 我正在描述的系統(或任何密碼保護對稱密鑰的系統)是否已經存在於某個密碼庫中?

您正在使用 Vernam 加密(簡單的 XOR),就像一次性密碼一樣。

Vernam 的一般原則是,只要您從不將同一個密鑰重複用於一條以上的消息,它就是完全安全的,並且一旦重複使用它就會完全損壞(這是“兩次墊”)。這裡的關鍵是散列密碼,消息是關鍵。

如果您的一個加密密鑰洩露,使用相同密碼加密的所有其他密鑰也會立即被破壞(因為您可以獲得密碼雜湊,這是實際密鑰)。您通常不希望在加密系統中使用此屬性,即使它僅用於具有隨機性質且僅用於臨時使用的數據。

相反,請執行以下操作之一:

  • 使用真正的加密(如塊密碼),將散列密碼作為密鑰,將儲存的密鑰作為輸入。
  • 在散列函式中使用一些(隨機)鹽,以便每次使用密碼都會產生另一個散列。使用 XOR 鍵儲存鹽。
  • 使用密鑰派生函式從鹽和密碼派生實際密鑰。只儲存鹽,而不是任何形式的密鑰。

我認為 OpenPGP 消息格式使用了其中的一些。

引用自:https://crypto.stackexchange.com/questions/1911