Bcrypt
加密 bcrypt 雜湊
一位客戶要求我提供一些關於散列的建議,因為這不是我的領域,我正在尋找知道他們在說什麼的人。
客戶正在使用 bcrypt 散列 4-6 位 PIN(主要是 4 位),他們將工作因子設置為業務允許的最高值,但他們擔心由於密鑰空間小,仍然可以反轉個人PIN 碼。他們現在正在考慮在儲存雜湊之前對其進行加密,以增加額外的保護層。加密速度足夠快,不會影響登錄時間,所以我建議使用額外的處理來增加工作因素,但被拒絕了。
人們怎麼想?我看不出它會受到傷害,並且添加額外的障礙可能不會受到傷害,但我聽說過不同算法之間的奇怪互動,所以我不想說在沒有了解他們的東西的人的情況下這樣做。
您的核心問題是您最多只有大約 20 位熵*(*假設使用者選擇完全隨機的 6 位 PIN,而這很可能不會)。20 位熵也意味著攻擊者最多需要 1,000,000 倍於您為驗證而投入的工作量才能找到密碼,但攻擊者可以極大地並行化密碼搜尋,並且他可以使用比您更強大、時鐘頻率更高的架構可能正在使用b。所以僅僅依靠密碼雜湊在這裡真的不是一個選擇。
現在,我看到您的問題的三個解決方案:
- HMAC密碼或雜湊,這具有非常簡單且保證不可逆的優點。在功能上等效地,還可以在bcrypt
散列 之前將高熵秘密附加到 PIN(這稱為“胡椒粉”並且具有阻止與第三種方法的互操作性的缺點)。- 加密密碼或散列,這樣做的好處是理論上你可以使用允許它的密碼散列,在沒有客戶端登錄的情況下升級參數,但是如果你的加密密鑰被洩露,那麼得到加密的數據
- 將驗證外包給速率限制HSM,這樣做的好處是,攻擊者不可能比速率限制更快地嘗試密碼
您最好的選擇確實是使用速率限制 HSM,它提供 HMAC,然後 HMAC 提供 bcrypt 雜湊或直接提供密碼。
他們現在正在考慮在儲存雜湊之前對其進行加密,以增加額外的保護層。
是的,這將提高安全性,從攻擊者只需洩露和破壞雜湊值到攻擊者必須在洩露加密密鑰後洩露和破壞雜湊值(你可以阻止,對吧!?)。
我看不出它會受到傷害,並且添加額外的障礙可能不會受到傷害,但我聽說過不同算法之間的奇怪互動,所以我不想說在沒有了解他們的東西的人的情況下這樣做。
雖然理論上**可能存在奇怪的相互作用,但在實踐中發生這種情況的可能性可以忽略不計。