File-Encryption
(如何)我們可以使用 HOTP 進行文件加密嗎?
我最近瀏覽了可用的 KeePass 外掛列表,並註意到一個宣傳支持HOTP作為派生數據庫密鑰的方法。
現在我信任這個外掛的開發者 Dominik Reichl,他也簽署了 KeePass 版本,所以我懷疑這是某種 KeePass 獨有的功能,實際上不會提高文件安全性。
我們如何使用 HOTP 作為一個因素來導出適合文件加密的密鑰?
這尤其令人費解,因為它聲稱支持任何符合 RFC 4226 的 HOTP 客戶端,該客戶端建議計算計數器的共享密鑰 HMAC,然後將其轉換為十進制數,我真的不明白如何利用這個號碼轉化為鑰匙的好來源。
我只是快速閱讀了原始碼,而且我對 C# 不是特別流利,所以我可能弄錯了。也就是說,該過程似乎是:
生成一個隨機加密密鑰,用它加密數據庫。
生成(最多六個)HOTP 令牌,從中派生一個密鑰,使用它來加密數據庫密鑰。
讀書:
請求 HOTP 令牌,派生密鑰,檢查它是否匹配。
解密數據庫密鑰,以便讀取。
生成新的 HOTP 令牌,使用這些令牌重新加密數據庫密鑰以供下次訪問。
因此,通過對幾個 HOTP 令牌進行雜湊處理,您可以獲得足夠的熵來生成強密鑰——如果您使用完整的六個令牌,每個令牌有八個小數,則最高可達 ~160 位。可以通過迭代散列過程添加額外的計算熵。
通過始終使用一組新令牌加密密鑰,您可以確保它們只使用一次。
HOTP 機密以加密形式儲存,因此只有在收到一組匹配的令牌時才能使用它來派生令牌。