我有一个字段(常规字段,而不是密码),它存储在数据库中两次:作为散列(SHA512)和加密值。更改此设置需要进行许多更改,我不想让自己进入。我的问题:在数据库被破解的情况下,该字段被存储两次作为哈希并加密会削弱其安全性吗?为什么呢?
有些人说是的 因为现在他们有两种方法 可能破解它。呃,我知道。 我要问的是一个人 可以用来破解另一个 更轻松?可以这样的事实 字段有2个变化以某种方式使它 攻击者更容易使用一个 让对方更容易破解?这样看:如果 攻击者只给出变种A,它 他们会花一天时间。如果只给出 变种B,它需要3天。 如果攻击者同时出现裂缝 他们会独立地破解变体A. 更快(只需一天)。但是如果给予攻击者 他们两个人都可以在6个人中破解一个 小时。这就是我要问的问题。
答案 0 :(得分:4)
假设散列和加密方法在加密方面很强,那么攻击就是暴力破解。因此,成本将是运行两者中的较弱者:哈希或加密。如果使用大量迭代计算散列(例如,使用PBKDF2)并且加密是通过哈希函数的单次迭代运行以获得密钥数据的密码的简单应用,则加密值实际上是CPU成本方面的弱点。在这种情况下,答案是存储两者并不会真正削弱它,而是加密值会削弱它。
修改以专门解决更新后的问题。从数学的角度来看,我怀疑很难证明攻击者不能以某种方式使用这两个数据来减少攻击时间。针对散列和加密设计的一些攻击非常复杂,因此似乎有可能完成它。我确实知道在某些情况下可以减少攻击时间。一个非常具体的例子:
假设攻击者可以通过某种方式从加密版本中了解密码的长度。这将大大减少强制哈希版本的时间。
答案 1 :(得分:2)
理论上,获取数据可能“更容易”;在实践中,攻击其中一个/两个的成本仍然太大而不可行。大多数加密算法在百万年内具有强力破解时间。对于良好的散列算法也是如此。实际上,您通常可以将哈希视为加密,而您可以将密钥丢弃。因此,除非您有数十亿个不同的哈希值/加密值,否则您无法提供足够的信息来减少蛮力时间到达无关紧要。
[更新]
在其他人评论我的回答(或投票)之前,请先阅读http://en.wikipedia.org/wiki/Cryptographic_hash_function。散列值和加密值具有相同的相对强度,“强”。因此,除非您可以将哈希与加密算法联系起来,否则哈希不再提供有关数据的信息,而是加密版本。
答案 2 :(得分:1)
这取决于问题中省略的几个细节。主要取决于:
考虑哈希未加盐的方案,并使用AES-CTR模式使用相同的密钥和IV加密每个字段。
答案 3 :(得分:1)
这显然削弱了安全性。一个例子:
对您的系统一无所知的攻击者可能会尝试对加密字段进行强制解密。他们如何知道他们何时成功解密? (加密字段可能会解密为任何)。
通过保持散列和加密值,您为攻击者提供了一个简单的机制来回答这个问题(通过散列每次尝试的解密)。
答案 4 :(得分:0)
确实如此 - 现在有两种获取数据的方法,而不仅仅是一种方法。只要您可以通过两种可用方式之一解密它,就可以获得数据。
答案 5 :(得分:0)
如果我能正确理解你,那么你是说黑客能够同时获得两个价值,他能否更快地破译它?或者像A需要6小时B需要9小时如果我们组合他会在4小时内破解吗?对? 从理论上讲,我相信他能够在十亿年的时间内更快地破解它。 SHA512很难破解(目前几乎不可能)并且考虑到你的加密很难破解。 然后,只有一种方法可以通过蛮力来解决这个问题。 所以一个简单的概率理论适用于此,他获得了两倍的幸运。 CPU周期,时间是硬币的另一面。 但是我们仍然不能说他是一个幸运的小伙子并且在第500次尝试中获得了幸运,如果不是他可能再获得幸运的机会。因此从理论上讲,它可能更容易,实际上也是如此,但他又应该幸运地活得那么久.LOL
如果A可以用来破解B?不太可能,因为散列和加密算法应该有一些相似之处,但这不是这种情况。
答案 6 :(得分:0)
这个字段有两个变化的事实可以让攻击者更容易使用一个来破解另一个吗?
它使得另一个变体更容易破解,因为一旦我破解了一个变体,我将获得更多与另一个变体的加密数据相对应的明文样本。
答案 7 :(得分:-2)
是的,也许吧。如果字符串非常短并且有人破解它,则他具有原始值而无需知道密钥。这尤其适用于密码。