應用密碼學

金鑰衍生函數

金鑰衍生函數(KDF)把一個祕密——密碼、錢包種子或共享的 Diffie–Hellman 值——轉成一把或多把密碼學上強健的金鑰。它做兩件不同的工作:把弱、低熵的祕密「拉長」使其能抵抗猜測,以及把一個高熵祕密「擴展」或「分化」成許多獨立的子金鑰。

密碼型 KDF 刻意耗費時間與記憶體,好讓暴力猜測變得昂貴。PBKDF2 把一個 HMAC 迭代數萬到數十萬次;scrypt 與 Argon2 還額外要求大量記憶體,以擊敗能廉價平行化的 GPU 與 ASIC 破解器。像 HKDF 這類金鑰擴展型 KDF 採用先萃取後擴展的設計,建構於 HMAC 之上,從一個已經均勻的主祕密導出依情境分隔的子金鑰。鹽——一個獨一無二的隨機輸入——能擊敗預先算好的彩虹表,並確保兩位密碼相同的使用者導出不同的金鑰。

錢包大量仰賴 KDF。BIP-39 把助記詞以 PBKDF2-HMAC-SHA512 迭代 2048 次、搭配鹽「mnemonic」加上選用的通行短語,產生 512 位元的種子。以太坊的 keystore 檔則以你的密碼經 scrypt 或 PBKDF2 導出的金鑰來加密私鑰。迭代次數與記憶體成本是個移動的標靶:隨硬體加速,它們必須往上調,才能讓暴力破解在未來多年仍然昂貴。

KDF 的「慢」對密碼而言是優點(拉高攻擊者成本),但若用於每次運算就成了負擔。對低熵祕密用 PBKDF2、scrypt 或 Argon2,對已是隨機的祕密用 HKDF。切勿用單一個純粹的快速雜湊去拉長密碼。

又稱
KDF