File-Encryption

(如何)我們可以使用 HOTP 進行文件加密嗎?

  • April 17, 2016

我最近瀏覽了可用的 KeePass 外掛列表,並註意到一個宣傳支持HOTP作為派生數據庫密鑰的方法。

現在我信任這個外掛的開發者 Dominik Reichl,他也簽署了 KeePass 版本,所以我懷疑這是某種 KeePass 獨有的功能,實際上不會提高文件安全性。

我們如何使用 HOTP 作為一個因素來導出適合文件加密的密鑰?


這尤其令人費解,因為它聲稱支持任何符合 RFC 4226 的 HOTP 客戶端,該客戶端建議計算計數器的共享密鑰 HMAC,然後將其轉換為十進制數,我真的不明白如何利用這個號碼轉化為鑰匙的好來源。

我只是快速閱讀了原始碼,而且我對 C# 不是特別流利,所以我可能弄錯了。也就是說,該過程似乎是:

  1. 生成一個隨機加密密鑰,用它加密數據庫。

  2. 生成(最多六個)HOTP 令牌,從中派生一個密鑰,使用它來加密數據庫密鑰。

  3. 讀書:

  4. 請求 HOTP 令牌,派生密鑰,檢查它是否匹配。

  5. 解密數據庫密鑰,以便讀取。

  6. 生成新的 HOTP 令牌,使用這些令牌重新加密數據庫密鑰以供下次訪問。

因此,通過對幾個 HOTP 令牌進行雜湊處理,您可以獲得足夠的熵來生成強密鑰——如果您使用完整的六個令牌,每個令牌有八個小數,則最高可達 ~160 位。可以通過迭代散列過程添加額外的計算熵。

通過始終使用一組新令牌加密密鑰,您可以確保它們只使用一次。

HOTP 機密以加密形式儲存,因此只有在收到一組匹配的令牌時才能使用它來派生令牌。

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