天天看點

基于密碼的密碼(PBE)

基于密碼的密碼(PBE)

基于密碼的密碼(PBE)

基于密碼的密碼(Password Based Encryption,PBE)是一種基于密碼生成密鑰,并使用該密鑰進行加密的方法。其中加密和解密使用的是同一個密鑰。

根據使用者自己的密碼和salt生成密碼密碼,我們先看下加密的過程

基于密碼的密碼(PBE)

基于密碼的密碼(Password Based Encryption,PBE)是一種基于密碼生成密鑰,并使用該密鑰進行加密的方法。其中加密和解密使用的是同一個密鑰。

根據使用者自己的密碼和salt生成密碼密碼,我們先看下加密的過程:

基于密碼的密碼(PBE)

加密的過程可以分為這幾步:

  1. 生成KEK密鑰
  • 使用僞随機數生成器來生成salt
  • 将salt和使用者自己的密碼使用單向散列函數算法生成KEK密鑰
  1. 生成會話密鑰并加密
  • 使用僞随機數生成器生成會話密鑰CEK
  • 使用步驟1生成的KEK密鑰對會話密鑰CEK進行加密,得到加密後的會話密鑰
  • 将步驟1生成的salt和步驟2生成的加密後的會話密鑰儲存起來,以供後面解密的時候使用。
  1. 加密消息
  • 使用步驟2中生成的會話密鑰CEK來對消息進行加密,進而得到加密後的消息。

步驟1生成的KEK并不需要儲存,因為它完全可以根據salt來重構。

接下來我們再看一下解密的過程:

基于密碼的密碼(PBE)
  1. 重建KEK
  • 使用儲存的salt和使用者記住的密碼,根據單向雜湊演算法重建KEK。
  1. 解密會話密鑰
  • 将保持的加密後的會話密鑰使用步驟1生成的KEK解密,得到解密後的會話密鑰
  1. 解密消息
  • 使用解密後的會話密鑰對加密過後的消息進行解密,得到最終消息原文。

為什麼要使用salt呢?

salt主要是為了防禦字典攻擊,因為使用者自己的密碼不具備随機性,很容易被暴力破解。加了salt之後,被暴力破解的難度大大加大。