Total Pageviews

Wednesday, 25 July 2012

salt与key

hash里的salt是这样一种东西:随机生成的字符串,与用户密码一道进行hash。使用salt的意义在于,由于salt是可变的,最终生成的hash更富变化,攻击者无法利用cmd5等数据库进行碰撞,不同的用户密码对应不同的salt,攻击者所需要的时间和空间就要成倍增加。
有的人对盐的理解则有所偏差,他认为盐是固定的,一个网站上的所有用户都使用同一个字符串进行协同摘要。国内一般把这种固定的字符串叫做固定盐,把随机生成的字符串叫做随机盐,这实际上是对盐的误解。
盐这个概念本身就包含了“随机生成”的要素,如果用于协同摘要的字符串是固定的,那么它根本不应该叫做盐,而应该叫做key。
key也会增加攻击的成本,攻击者不能利用现有的hash数据库,必须先获取key,再根据这个key重新生成一个hash数据库。而salt则要求攻击 者必须根据每一个用户的salt生成一个hash数据库,这成本是无法接受的,攻击者只能放弃hash反查这条路,另觅他途。