目录
定义:
PBE是一种根据口令生成密钥并用该密钥进行加密的方法。
加密和解密都使用同一个密钥。
口令一词多义:
- 口头话,如喊口令;
- 暗号,如对口令;
- 专指密码,如邮箱口令(本文指这个,一般由英文大小写字母和数字和特殊符号组成)。
为什么需要PBE?
我们在使用数据的加密的时候,都难以避免地要涉及到密钥的保存,如果密钥如果明文地保存在电脑上那么很容易就会被别人盗取,那么如果我们使用另外一个随机密钥去加密会话密钥的话,那么怎么保证另一个密钥的安全?很明显这样下去就会无线循环了。
这个时候,我们需要考虑如何安全地保护密钥。对于我们人来说,我们不喜欢去记数字和字符,但是我们可以记下些短的口令,这比起动作百来位的密钥来说可好记多了,所以就出现了PBE(Password Based Encryption,基于口令加密)。
我们通过对口令和一些随机数结合进行加工,将它转变为一个用来加密会话密钥的密钥,将会话密钥进行加密之后然后将加密后的密钥进行保存。这个生成的加密密钥的密钥其实就可以将其抛弃了,留在电脑上还可以有泄露密钥的风险。
我们最后如果要还原会话密钥,只要将随机数和我们脑子中记住的口令进行相同的操作,就可以还原会话密钥。别人没有我们脑子中的口令就不能拿到会话密钥。
流程
加密流程

PBE加密包括下列3个步骤:
-
生成 主密钥(KEK) ;
伪随机数生成器会生成一个盐(随机数),将
盐
和口令
一起输入单向散列函数,得到的散列值
就是用来加密密钥的密钥(KEK)
。 -
生成 会话密钥(CEK) 并 加密;
伪随机数生成器会生成一个随机数,这个
随机数
就是用来加密消息的密钥(CEK)
;用KEK加密CEK得到CEK密文;
将
盐
和CEK密文
一起保存到安全的地方;KEK可以丢弃掉,因为通过盐和口令可以重建KEK。
-
加密消息。
用
CEK
对消息
进行加密得到消息的密文
。
解密流程

PBE解密包括下列3个步骤:
- 重建KEK;
- 解密会话密钥;
- 解密消息。
详细流程反推回来即可。
盐的作用
盐 是用来防御字典攻击 的。
字典攻击是一种事先进行计算并准备好候选密钥列表的方法。
事先指在攻击者窃取到加密的会话密钥之前,就准备好了大量的候选KEK。
通过拉伸来改良PBE的安全性
在生成KEK时,通过多次 使用单向散列函数就可以提高安全性 。
对于用户来说,执行1000次单向散列函数并不会带来多大的负担,然而对于主动攻击者来说,这可是一个很大的负担。
如何生成安全口令的建议
- 使用只有自己才能知道的信息;
- 将多个不同的口令分开使用;
- 有效利用笔记;
- 理解口令的局限性;
- 使用口令生成和管理工具。