3

我有一个具有以下行为的加密方法:密码的每个字符都经过一个方法,该方法获取该字符的 ASCII 值并以一种方式移动字节,然后以另一种方式移动字节,并返回以下内容:

$shifted_left.$original_char.$shifted_right.

哈希之前的密码示例:

àp8Âa0æs9æs9îw;Þo7är9Èd2Îg3Þo7Êe2æs9Ðh4Êe2är9Êe2d2

在此之后,通过原始密码中的每个字符形成的结果字符串使用 BCrypt 进行散列。用这些垃圾字符包围密码是否会提高密码的强度或保护它们不被彩虹表/字典攻击破解?

4

2 回答 2

3

通常是的,它确实阻止了预先计算的彩虹表,因为您有一个相当独特的算法,可能没有人会为创建彩虹表而烦恼。

但是,相同的密码仍然散列到相同的散列。因此,试图暴力破解所有密码哈希的攻击者会更容易,因为他只需要为所有用户破解相同的密码一次。

因此,仍然非常建议使用用户特定的盐。而且,如果您正在使用具有强大散列算法的用户特定盐,那么您是否也进行移位舞蹈并不重要。

于 2012-07-12T07:04:58.220 回答
2

如果攻击者可以控制数据库和代码,那么添加乱码将毫无帮助(更多的只是一个微不足道的操作)。如果他只有没有代码的数据库(SQL-Injection),那么他将识别 bcrypt 哈希并且现在可以使用 bcrypt 暴力破解,但由于加扰,没有任何弱密码。就好像乱码就是破解密码一样,字典是没用的。

这是默默无闻的安全性,但只要代码未知,它就会有效。在使用带有唯一盐的 bcrypt 之前,您可以通过添加一个固定的硬编码盐(密钥)更容易获得相同的效果。

PS bcrypt 中使用的唯一盐将有助于防止彩虹表,而不是加密您的密码。一个大彩虹表还可以包含随机组合,例如您的加密密码。

于 2012-07-12T07:50:11.053 回答