一 口令的作用
有这样一个事实:具有充足长度的密钥是无法用人脑记忆的。口令也是一样,我们也无法记住具有充足比特数的口令。
在PBE中,通过口令生成密钥(KEK),再用这个密钥来加密会话密钥(CEK)。由于通过口令生成的密钥(KEK)强度不如用伪随机数生成器生成的会话密钥(CEK),这就好像是将一个牢固的保险柜钥匙放在一个不怎么牢固的保险柜中保管,因此在使用基于口令的密钥(PBE)时,需要将盐和加密后的CEK通过物理方式进行保护。例如可以将盐和加密后的CEK保存到存储库中随身携带。
二 通过拉伸来改良PBE
在生成KEK时,通过多次使用单向散列函数就可以提高安全性。例如,如果将盐和口令先输入单向散列函数,然后将得到的散列函数再次输入单向散列函数,将得到的散列值再次输入单向散列函数......像这样经过1000次散列函数所得到的散列值作为KEK来使用,是一个不错的方法。
对于用户来说,执行1000次散列函数并不会带来多大的负担,因为和用户输入一次口令所花费的时间相比,执行1000次散列函数所需的时间可以忽略不计。然而,对于主动攻击者来说,这可是一个很大的负担。因为为了找出正确的KEK,攻击者必须用大量的口令进行尝试。
像这样将单向散列函数进行多次迭代的方法称为拉伸。