基于密碼的密碼(PBE)
基于密碼的密碼(Password Based Encryption,PBE)是一種基于密碼生成密鑰,并使用該密鑰進行加密的方法。其中加密和解密使用的是同一個密鑰。
根據使用者自己的密碼和salt生成密碼密碼,我們先看下加密的過程
基于密碼的密碼(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之後,被暴力破解的難度大大加大。