我正在看两款类似的软件,它们使用密码来加密磁盘上的数据。一个使用PBKDF2从密码生成加密密钥,另一个使用两轮SHA256。有什么关系呢?一个比另一个更好吗?
发布于 2012-06-22 02:07:00
不同之处在于:
因此,如果有人尝试了许多不同的可能的密码,比如整个字典,然后每个单词加上一个数字,然后每个单词有不同的大写,然后是两个字典词等等,那么这个过程在PBKDF2中会慢得多。
但是,如果您的密码是真正安全的,这是非常长的,相当随机的,任何系统的枚举过程都无法达到,那么这并没有实际的区别,只是攻击者可能会花费更多的资源试图破解您的密码(或者如果他们决定更早地放弃)。
发布于 2012-06-23 04:57:46
密码哈希算法(如PBKDF2、bcrypt和scrypt )是用于与密码一起使用的,并且是有意缓慢的。密码散列算法速度快。在大多数情况下,快速是好的,但在这里不行。放慢算法的速度(通常是通过迭代)使得攻击者的工作更加困难。密码散列还向每个散列中添加一个盐分值,使其具有唯一性,从而使攻击者不能同时攻击多个散列。
攻击者将尝试通过执行字典和蛮力攻击来恢复密码,通过对密码进行散列并与存储的密码进行比较以确定它们是否匹配来猜测密码。使用常规的密码散列函数(例如MD5、SHA256),攻击者可以每秒猜出数十亿个密码。使用PBKDF2、bcrypt或scrypt,攻击者每秒钟只能进行几千次猜测(或更少,取决于配置)。
这意味着,如果使用PBKDF2、bcrypt或scrypt而不是常规的散列函数,则每个密码都要强得多。
此外,PBKDF2、bcrypt和scrypt都使用较大的随机"salt“值,以确保每个用户的密码都是唯一的散列。攻击100个密码散列比攻击一个散列花费100倍的时间。攻击一百万会花费上百万倍的时间,等等。使用SHA256,攻击者可以尝试同时破解数千或数百万个哈希,而速度却很少慢。
您应该始终对密码使用密码哈希或“密钥派生公式”,而不是使用普通的加密哈希。如果密码是用SHA或MD5之类的哈希散列的,那么很难选择足够强到能够承受专门破解的密码。使用PBKDF2、bcrypt或scrypt,密码可以短到7或8个字符,但对于MD5或SHA,它们至少需要13-14个字符。
发布于 2012-06-27 19:52:03
上面有很好的答案,但直接的原因是sha256没有被盐碱化,而且两轮密码的弱性与计算上的4位密码弱一样:
https://security.stackexchange.com/questions/16354
复制相似问题