之前複習 NIST SP 800-63b 時,看見

Verifiers SHALL store memorized secrets in a form that is resistant to offline attacks. — NIST SP 800-63B

做個筆記順道拋磚引玉。

SHALL 即是 MUST [RFC 2119]、Memorized Secret 的定義 [NIST SP 800-63-3 Appendix A] 不贅述。考慮到 Bruce Schneier 說過 Attacks only get better,在技術上可行時,多做不爲過。

現今能滿足 Resistant to Offline Attacks 的算法,大抵被歸類爲 Password Hashing。設計上,Cryptograph Hash 或 Cipher 希望輕快,而 Password Hashing 則加大對 CPU 與記憶體的壓力,刻意肥重,來增加暴力破解的時間(成本)。有些 Password Hashing Algorithm 係基於 Hash / Cipher ,利用其密碼學特性來建構並增肥。 隨着硬體的各種進步,成本亦降低(CPU 指令集、GPU、FPGA、ASIC)。這類算法能透過調整 cost factor 來增加計算所需的時間與資源,以抗衡在 摩爾定律 支持下,算力隨時間指數成長的攻擊者。SHA 2、3 輸出長度爲(幾個)定值,而 Password Hashing Algorithm 只需要調整 cost factor,操作的複雜程度可謂雲泥。

今年的 SHA-mbles 將 Chosen-prefix Collision 成本由 2^67.1 降至 2^63.4,使用雲端 GPU 的成本可低於 $100k USD。這直接給 SHA1 在 第三方簽章 用例宣告了死刑。從 Chosen-prefix Collision 到 Pre-image Attack 還有一段長路,但足以提醒世人使用該算法的風險。從在這個角度,HMAC、PBKDF2 等算法僅依賴核心 Hash Function 中的部分特性,從而能在 Collision Resistance 之外,爭取更多時間。