定義:
PBE(Password - Based Encryption)是一種根據口令生成密鑰并用該密鑰進行加密的方法。PBE也是一種混合密碼系統,組合了密鑰生成機制、Salt、Hash、對稱加密等技術。
PBE的加密和解密使用對稱加密技術。
口令一詞多義:
- 口頭話,如喊口令;
- 暗號,如對口令;
- 專指密碼,如郵箱口令(本文指這個,一般由英文大小寫字母和數字和特殊符號組成)。
為什么需要PBE?
我們在使用數據的加密的時候,都難以避免地要涉及到密鑰的保存,如果密鑰如果明文地保存在電腦上那么很容易就會被別人盜取,那么如果我們使用另外一個隨機密鑰去加密會話密鑰的話,那么怎么保證另一個密鑰的安全?很明顯這樣下去就會無線循環了。
這個時候,我們需要考慮如何安全地保護密鑰。對于我們人來說,我們不喜歡去記數字和字符,但是我們可以記下些短的口令,這比起動作百來位的密鑰來說可好記多了,所以就出現了PBE(Password Based Encryption,基于口令加密)。
我們通過對口令和一些隨機數(salt) 進行Hash加工,將它轉變為一個加密會話密鑰的密鑰(KEK),在生成一個隨機的會話密鑰(CEK) ,CEK加密之后,將加密后的CEK密鑰進行保存。這個生成的加密密鑰的密鑰(KEK)就可以將其拋棄了,因為留在電腦上有泄露密鑰的風險。
我們需要再次使用會話密鑰(CEK) 的話,只要將隨機數(之前已經保存)和我們腦子中記住的口令進行相同的操作,就可以解密出會話密鑰。別人沒有我們腦子中的口令就不能拿到會話密鑰。
流程
加密流程

PBE加密包括下列3個步驟:
-
生成 主密鑰(KEK) ;
偽隨機數生成器會生成一個鹽(隨機數),將鹽和口令一起輸入單向散列函數,得到的散列值就是用來加密密鑰的密鑰(KEK)。 -
生成 會話密鑰(CEK) 并 加密;
偽隨機數生成器會生成一個隨機數,這個隨機數就是用來加密消息的密鑰(CEK);
用KEK加密CEK得到CEK密文;
將鹽和CEK密文一起保存到安全的地方;
KEK可以丟棄掉,因為通過鹽和口令可以重建KEK。 -
加密消息。
用CEK對消息進行加密得到消息的密文。
解密流程

PBE解密包括下列3個步驟:
- 重建KEK;
- 解密會話密鑰;
- 解密消息。
詳細流程反推回來即可。
鹽的作用
鹽是用來防御字典攻擊的。
字典攻擊是一種事先進行計算并準備好候選密鑰列表的方法。
事先指在攻擊者竊取到加密的會話密鑰之前,就準備好了大量的候選KEK。
通過拉伸來改良PBE的安全性
在生成KEK時,通過多次使用單向散列函數就可以提高安全性。
對于用戶來說,執行1000次單向散列函數并不會帶來多大的負擔,然而對于主動攻擊者來說,這可是一個很大的負擔。
如何生成安全口令的建議
- 使用只有自己才能知道的信息;
- 將多個不同的口令分開使用;
- 有效利用筆記;
- 理解口令的局限性;
- 使用口令生成和管理工具。
浙公網安備 33010602011771號