一 点睛
盐是由伪随机数生成器生成的随机数,在生成密钥(KEK)时会和口令一起输入单向散列函数。
密钥(KEK)是根据秘密的口令生成的,加盐好像没有什么意义,那么盐到底起到什么作用呢?
盐是用来防御字典攻击的。字典攻击是一种事先进行计算并准备好候选密钥列表的方法。
我们假设在生成KEK时没有加盐。那么主动攻击者就可以根据字典数据事先生成大量的候选KEK。
在这里,事先是很重要的。这意味着攻击者可以在窃取到加密的会话密钥之前,就准备好大量的候选KEK。当攻击者窃取加密的会话密钥后,就需要尝试将它解密,这时只要利用事先生成的候选KEK,就能够大幅缩短尝试的时间,这就是字典攻击。
如果在生成KEK时加盐,则盐的长度越大,候选KEK的数量也会随之增大,事先生成候选KEK就会变得非常困难。只要攻击者没有得到盐,就无法生成候选KEK。这是因为加盐之后,候选KEK的数量会变得非常巨大。
二 加盐和不加盐字典攻击对比