基於口令的密碼(PBE)
基於口令的密碼(Password Based Encryption,PBE)是一種基於口令生成密鑰,並使用該密鑰進行加密的方法。其中加密和解密使用的是同一個密鑰。
根據用戶自己的口令和salt生成口令密碼,我們先看下加密的過程:
加密的過程可以分爲這幾步:
- 生成KEK密鑰
- 使用僞隨機數生成器來生成salt
- 將salt和用戶自己的口令使用單向散列函數算法生成KEK密鑰
- 生成會話密鑰並加密
- 使用僞隨機數生成器生成會話密鑰CEK
- 使用步驟1生成的KEK密鑰對會話密鑰CEK進行加密,得到加密後的會話密鑰
- 將步驟1生成的salt和步驟2生成的加密後的會話密鑰保存起來,以供後面解密的時候使用。
- 加密消息
- 使用步驟2中生成的會話密鑰CEK來對消息進行加密,從而得到加密後的消息。
步驟1生成的KEK並不需要保存,因爲它完全可以根據salt來重構。
接下來我們再看一下解密的過程:
- 重建KEK
- 使用保存的salt和用戶記住的口令,根據單向散列算法重建KEK。
- 解密會話密鑰
- 將保持的加密後的會話密鑰使用步驟1生成的KEK解密,得到解密後的會話密鑰
- 解密消息
- 使用解密後的會話密鑰對加密過後的消息進行解密,得到最終消息原文。
爲什麼要使用salt呢?
salt主要是爲了防禦字典攻擊,因爲用戶自己的口令不具備隨機性,很容易被暴力破解。加了salt之後,被暴力破解的難度大大加大。
更多內容請訪問 http://www.flydean.com/pbe/