|
1
42
这里的答案是问你自己你真正想要保护什么?如果有人可以访问您的数据库,那么他们就可以访问加密的salt,而且他们可能也可以访问您的代码。他们能用这些方法解密加密的盐吗?如果是这样的话,那么加密无论如何都是无用的。salt确实是用来制作它的,所以如果它被破坏了,就不可能形成一个彩虹表来一次性破解整个密码数据库。从这个角度来看,只要每个salt都是唯一的,没有区别,就需要对每个密码分别使用您的salt或加密salt进行暴力攻击。 |
|
2
92
不必藏盐。 每种土豆泥都应使用不同的盐。实际上,从加密质量的随机数生成器中获取8个或更多的字节很容易实现这一点。
再想一想,我意识到欺骗自己,让自己以为盐可以被藏起来是危险的。最好假设盐不能被隐藏,尽管如此,设计系统还是安全的。我提供了一个更详细的解释 in another answer. |
|
|
3
3
我对“盐”的理解是它使破解变得更困难,但它不会试图隐藏额外的数据。如果您试图通过将salt设置为“秘密”来获得更高的安全性,那么您只需要在加密密钥中有更多的比特。 |
|
|
4
3
第二种方法只是稍微安全一点。盐可以保护用户免受字典攻击和彩虹表攻击。它们使野心勃勃的攻击者更难破坏您的整个系统,但仍然容易受到集中在系统某个用户身上的攻击。如果你使用公开的信息,比如电话号码, 攻击者意识到这一点 你救了他们一步。当然,如果攻击者获取了整个数据库、salts和所有内容,问题就没有了。 编辑: 在重新阅读了这个答案和一些评论之后,我发现有些困惑可能是因为我只是比较了问题中提出的两个非常具体的案例:随机盐与非随机盐。问题 用电话号码当盐 如果攻击者得到了你的整个数据库, 不 使用盐的问题。 |
|
|
5
3
|
|
|
6
2
下面是一个简单的例子,说明为什么每个哈希都有相同的盐是不好的。 考虑下表
情况1,当盐1与盐2相同时 如果hash2替换为hash1,则用户2可以使用用户1密码登录。 案例2当盐1不是同一盐2 如果hash2替换为hash1,则用户2不能使用用户1密码登录。 |
|
|
7
2
从实际的角度来看,salt是一个实现细节。如果你改变了收集或维护用户信息的方式——有时用户名和电话号码都会改变,用你确切的例子来说——那么你可能已经破坏了你的安全性。你想让这样一个面向外部的变化引起更深层次的安全问题吗? 停止要求每个帐户都有一个电话号码的要求是否需要进行完整的安全审查,以确保您没有打开这些帐户进行安全妥协? |
|
|
8
1
有两种方法,目标不同:
|
|
|
9
0
我想把盐藏起来。在散列密码之前,我使用10位salt,在密码的开头加上1到1024的随机数。当比较用户输入的密码和散列值时,我从1循环到1024,并尝试所有可能的salt值,直到找到匹配的值。这需要不到1/10秒的时间。我从PHP中得到了这样做的想法 password_hash 和 password_verify . 在我的例子中,10比特盐的成本是10。或者根据其他用户的说法,隐藏的“盐”被称为“胡椒”。salt未在数据库中加密。这是野蛮的强迫。这将使彩虹表需要将哈希值反转1000倍。我使用sha256是因为它很快,但仍然被认为是安全的。 |
|
|
10
-1
实际上,这取决于您试图保护数据的攻击类型。 每个密码的唯一salt的目的是防止字典攻击整个密码数据库。 对每个密码加密唯一的salt会使破解单个密码变得更加困难,是的,但是您必须权衡是否真的有很多好处。如果攻击者通过暴力手段发现该字符串:
散列到存储在数据库中的散列,真的很难弄清楚哪个部分是过程,哪个部分是盐? |
|
|
Michael · 某些Windows客户端上的命名管道安全问题 1 年前 |
|
|
adamency · 是否可以从Go二进制文件的源代码中检索字符串? 1 年前 |
|
|
AlboSimo · PayPal Api密钥安全 2 年前 |