口令和密钥最大的区别在于口令更容易生成、更容易记忆,一般情况下口令记录在人脑中,口令可以认为是一种弱密钥,由固定的字母、数字、符号组成,长度也有一定的限制。
在密码学中很少直接用口令进行加密,容易受到暴力攻击和字典攻击。
除了字典攻击,还有彩虹表攻击方式。
1)口令用于身份校验
口令使用摘要算法计算出一个密钥(这个密钥并不是为了加密解密),这就是一种简单的PBE算法,但这种算法是存在安全风险的。
在密码学中,存在一种密码衍生算法(Key Derivation Function, KDF),该算法可以简单理解为通过某些值可以生成任意长度的一个(多个)密钥。
2)PBKDF2算法
PBE算法标准定义在RFC 2898文档中。
PFR相当于一个摘要算法,利用了摘要算法的单向性、输出值固定长度的特性。
Salt是使用随机数生成器生成的一个数值,通过Salt能够避免字典攻击,结合口令和Salt,攻击者就很难创建出所有的字典组合,增大了密钥的搜索空间。
Salt是明文保存的,一般不和最终生成的密钥保存在一起。
为了减缓攻击者的破解速度,生成密钥的时候可以迭代多次,这样创建密钥的时间增加了,破解的时间也会对应增加,由于增加了时间复杂度。