Symmetric

我需要在這個加密錢包備份應用程序中使用 HMAC 嗎?

  • January 24, 2018

我正在建構一個應用程序,用於安全地備份加密貨幣私鑰或 12 字備份片語,加密錢包用作生成私鑰的種子。對於這個問題,如果你不熟悉加密貨幣,你只需要知道誰知道你的私鑰就可以花錢。

這是備份過程:

  • 使用者用密碼加密他的明文(我使用的是 scrypt 和 AES256)
  • 密文是base64編碼的,密文和一些頭部數據都被編碼為一個二維碼——這是使用者的備份
  • 使用者列印多份 QR 以進行儲存
  • 如果使用者的電腦崩潰,需要恢復備份,他可以掃描二維碼並提供密碼來解密消息並找回他的私鑰

二維碼包含 scrypt 參數、salt、初始化向量和密文。

**我的問題是:我需要在備份內容中添加 HMAC 簽名嗎?**如果可能的話,我想把它排除在外,因為它顯著增加了生成的二維碼的複雜性,而且複雜/大的二維碼更難被設備掃描。

我在想我不需要 HMAC 簽名,因為如果密文被惡意方以任何方式更改,由此產生的更改後的明文對使用者來說將毫無用處——他將無法恢復他的加密貨幣。更改密文將產生與簡單地破壞使用者備份相同的結果(簽名無法防止這種情況發生)。在這種情況下,長度擴展攻擊也毫無意義。

更改後的備份毫無用處這一事實似乎是內置的完整性檢查,使簽名變得多餘。這個結論是正確的,還是我需要添加簽名?

不,我認為這裡不需要 HMAC。但是,您可能需要考慮如果 QR 碼確實是錯誤的會發生什麼。例如,發現使用無源RFID 標籤的系統容易受到緩衝區溢出攻擊:攻擊者所要做的就是增加標籤所代表的 ID 的大小。

最終,您只想將私鑰值保密。可以通過對錢包執行操作來處理私鑰的驗證。如果這樣的操作本身是不可能的,或者如果私鑰的驗證僅依賴於對該密鑰的解密,那麼您可能會遇到麻煩:您需要某種方式來驗證解密結果是否正常。在這種情況下,填充不能被信任到值得付出代價(如果你可以填充,那麼你也不能填充和儲存身份驗證標籤(MAC 值)。

在密文上使用 MAC 可以更容易地證明安全性。請注意,您可以使用 scrypt 或 scrypt 和 KDF/PRF(例如,有趣的是,HMAC)從 salt 和密碼片語派生 IV,因此您可以將其替換為身份驗證標籤。也可以使用 SIV 模式,然後 IV 將兼作身份驗證標籤。

scrypt 參數可以由表示硬編碼參數的單個協議版本字節表示。

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