在密碼學中,密鑰導出函數(KDF)使用偽隨機函數從秘密值(eg.主密鑰)導出一個或多個密鑰。KDF可用於將密鑰擴展到更長的密鑰或獲得所需格式的密鑰(eg.將作為Diffie-Hellman密鑰交換的結果的組元素轉換為用於AES的對稱密鑰)。密鑰加密哈希函數是用於密鑰推導的偽隨機函數的流行示例。
KDFs的使用:
密鑰導出函數通常與非秘密參數一起使用,以從公共秘密值導出一個或多個密鑰。這樣的使用可以防止獲得派生密鑰的攻擊者學習關於輸入秘密值或任何其他導出密鑰的有用信息;也可以使用KDF來確保派生密鑰具有其他期望的屬性,諸如在某些特定加密系統中避免“弱密鑰”。
KDFs最常見的用途是將密碼散列的方法來密碼驗證,我們將非秘密參數稱之為salt。KDFs也通常用作多方密鑰協商協議的組成部分,這些關鍵推導函數的示例包括KDF1和ANSI X9.42中的類似功能。特別的,基於HMAC的提取和擴展密鑰導出功能(HKDF) 是一種簡單的基於HMAC的KDF,可用作各種協議和應用程序中的構建塊。
我們下面針對密鑰延伸(key stretching)對KDF進行下一步的描述:
KDF也用於從秘密密碼或密碼短語導出密鑰的應用程序,密碼通常不具有直接用作加密密鑰的所需屬性。在這樣的應用中,通常建議將密鑰導出功能故意緩慢,以阻止對密碼或密碼輸入值的暴力攻擊或字典攻擊。
這種使用可以表示為DK = KDF(Key,Salt,Iterations),其中DK是派生密鑰,KDF是密鑰導出函數,Key是原始密鑰或密碼,Salt是作為密碼鹽的隨機數,Iterations是指子功能的迭代次數。使用派生密鑰代替原始密鑰或密碼作為系統的密鑰。鹽的值和迭代次數(如果不固定)與散列密碼一起存儲或以加密消息的明文形式發送。
暴力攻擊的難度隨着迭代次數的增加而增加。迭代計數的實際限制是用戶不願容忍登錄計算機或看到解密消息的可察覺延遲。使用salt可以防止攻擊者預先計算派生密鑰的字典。
類似的,當下還有另一種方法叫做密鑰強化(key strengthening),使用隨機鹽擴展鍵,但是不像密鑰延伸一樣可以安全地刪除salt。這將強制攻擊者和合法用戶對salt值執行強力搜索。
---------------------
作者:sjrGCkym
來源:CSDN
原文:https://blog.csdn.net/sjrgckym/article/details/78195845
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
P 口令,一字節串
S 鹽值,字節串
