基于口令的密码—PBE

目录


定义:

PBE是一种根据口令生成密钥并用该密钥进行加密的方法。

加密和解密都使用同一个密钥。

口令一词多义:

  1. 口头话,如喊口令;
  2. 暗号,如对口令;
  3. 专指密码,如邮箱口令(本文指这个,一般由英文大小写字母和数字和特殊符号组成)。

为什么需要PBE?

我们在使用数据的加密的时候,都难以避免地要涉及到密钥的保存,如果密钥如果明文地保存在电脑上那么很容易就会被别人盗取,那么如果我们使用另外一个随机密钥去加密会话密钥的话,那么怎么保证另一个密钥的安全?很明显这样下去就会无线循环了。

这个时候,我们需要考虑如何安全地保护密钥。对于我们人来说,我们不喜欢去记数字和字符,但是我们可以记下些短的口令,这比起动作百来位的密钥来说可好记多了,所以就出现了PBE(Password Based Encryption,基于口令加密)。

我们通过对口令和一些随机数结合进行加工,将它转变为一个用来加密会话密钥的密钥,将会话密钥进行加密之后然后将加密后的密钥进行保存。这个生成的加密密钥的密钥其实就可以将其抛弃了,留在电脑上还可以有泄露密钥的风险。

我们最后如果要还原会话密钥,只要将随机数和我们脑子中记住的口令进行相同的操作,就可以还原会话密钥。别人没有我们脑子中的口令就不能拿到会话密钥。

流程

加密流程

PBE加密包括下列3个步骤:

  1. 生成 主密钥(KEK) ;

    伪随机数生成器会生成一个盐(随机数),将口令一起输入单向散列函数,得到的散列值就是用来加密密钥的密钥(KEK)

  2. 生成 会话密钥(CEK) 并 加密;

    伪随机数生成器会生成一个随机数,这个随机数就是用来加密消息的密钥(CEK);

    用KEK加密CEK得到CEK密文;

    CEK密文一起保存到安全的地方;

    KEK可以丢弃掉,因为通过盐和口令可以重建KEK。

  3. 加密消息。

    CEK消息进行加密得到消息的密文

解密流程

PBE解密包括下列3个步骤:

  1. 重建KEK;
  2. 解密会话密钥;
  3. 解密消息。

详细流程反推回来即可。

盐的作用

是用来防御字典攻击 的。

字典攻击是一种事先进行计算并准备好候选密钥列表的方法。

事先指在攻击者窃取到加密的会话密钥之前,就准备好了大量的候选KEK。


通过拉伸来改良PBE的安全性

在生成KEK时,通过多次 使用单向散列函数就可以提高安全性

对于用户来说,执行1000次单向散列函数并不会带来多大的负担,然而对于主动攻击者来说,这可是一个很大的负担。


如何生成安全口令的建议

  1. 使用只有自己才能知道的信息;
  2. 将多个不同的口令分开使用;
  3. 有效利用笔记;
  4. 理解口令的局限性;
  5. 使用口令生成和管理工具。
相关推荐
小小工匠1 年前
加密与安全_探索口令加密算法(PBE)
java·安全·pbe·口令加密算法
Droy`Z2 年前
PBE加密解密问题处理:IV expected
java·加密解密·pbe·iv expected·must be 8