哈希和加密同一个字段会削弱它的安全性吗?

6
我有一个字段(普通字段,不是密码),在数据库中存储了两次:一次作为哈希值(SHA512),另一次作为加密值。更改此设置需要进行许多更改,我不想陷入其中。我的问题是:如果数据库被破解,字段被存储两次作为哈希和加密是否会削弱其安全性?为什么?
有些人说是的,因为现在他们有两种可能破解它的方法。我知道这一点。我的问题是,一个变量能否被用来使破解另一个变得更容易?是否存在这样一种情况,即该字段具有两个变体,从而使攻击者更容易使用一个变体来更容易地破解另一个变体?这样看待它:如果攻击者只获得变体A,则需要一天时间才能破解它。如果只给出变体B,则需要三天时间。如果攻击者独立运行两个破解程序,则会更快地破解变体A(只需要一天)。但是,如果攻击者同时拥有两个变体,则可以在6小时内破解其中一个。这就是我的问题。
8个回答

4
假设哈希和加密方法都是密码学强度足够的,那么攻击将会采用暴力破解。所以成本将是运行两者中较弱的一个:哈希或加密。如果哈希使用大量迭代计算(例如,使用PBKDF2),而加密只是简单地通过哈希函数的单次迭代运行密码以获取密钥数据,则加密值实际上是CPU成本方面的弱点。在这种情况下,答案是存储两者并不会真正削弱它,而是加密值削弱了它。
编辑以特别回答更新后的问题。从数学角度来看,我怀疑很难证明攻击者无法利用这两个数据片段来缩短攻击时间。一些已经设计出来的针对哈希和加密的攻击非常复杂,因此似乎有可能做到这一点。我确实知道在某些情况下可以缩短攻击时间。一个非常具体的例子:
假设攻击者可以从加密版本中学习到密码的长度。那将极大地减少暴力破解哈希版本的时间。

2
理论上来说,获取数据可能会更加“容易”;但实际上,攻击的成本仍然应该太高而不可行。大多数加密算法的暴力破解时间在数百万年之内。好的哈希算法也是如此。事实上,您经常可以将哈希视为一种加密,其中您丢弃了密钥。因此,除非您拥有数十亿个不同的哈希/加密值,否则您无法提供足够的信息来将暴力破解时间缩短到足够重要的程度。
【更新】
在任何其他人评论我的答案(或投票反对)之前,请阅读http://en.wikipedia.org/wiki/Cryptographic_hash_function。哈希值和加密值具有相同的相对强度,“强”。因此,除非您能够将哈希和加密算法相关联,否则哈希不会提供比加密版本更多的关于数据的信息。

这不对 - 对字符串"a"进行哈希处理会生成一个易于攻击者破解的哈希值。 - thejh
1
轻松破解哈希!如果你告诉我如何做到,我将会变得非常富有。 - Andrew White
“数百万年”完全取决于输入值。正如@thejh所指出的,使用暴力方法可以快速找到哈希值“a”。 - Tomas
怎么做?给我一个例子!哈希是经过加密设计的,具有强大的密码学安全性!如果你可以通过暴力破解快速地反转哈希值,那么同样的方法也可以用于加密算法! - Andrew White
安德鲁:你说反转哈希是RFH(真的很难)。然而,如果你已经将大量纯文本转换为哈希值(彩虹表),那么你可以检查你已经确定过明文的哈希值。这对于短密码非常有效。 - Slartibartfast
显示剩余2条评论

1

这取决于问题中省略的几个细节。主要取决于:

  • 哈希是否被盐化;
  • 加密使用的算法和操作模式是哪种;
  • 其他详细信息,如密钥和IV管理。

考虑哈希未被盐化且每个字段都使用相同的密钥和IV使用AES-CTR模式进行加密的情况。

  1. 攻击者选择一个可能出现在该字段中的值。
  2. 然后他/她对其进行哈希,并找到其中出现哈希的记录。
  3. 然后,攻击者查看已知明文的相应加密。
  4. 通过异或密文和明文,攻击者恢复密钥流。
  5. 攻击者可以解密其他所有内容。

1

这显然削弱了安全性。一个例子:

一个对你的系统一无所知的攻击者可能会尝试暴力破解加密字段。他们如何知道何时成功解密?(加密字段可能潜在地解密为任何内容)。

通过保留哈希和加密值,你为攻击者提供了一个简单的机制来回答这个问题(通过对每个尝试的解密进行哈希运算)。


这是一个有趣的答案。有人可以确认它或者讨论一下吗? - silow

0
如果我理解正确的话,您是在说如果黑客获得了这两个值,他能更快地破解它吗?或者像A需要6小时,B需要9小时,如果我们结合起来,他能在4小时内破解它吗?对吧? 理论上,即使在数十亿年的时间跨度内,我相信他也能更快地破解它。 SHA512很难破解(现在可能是实际上不可能的),考虑到您的加密也很难破解。 那么只有一种方法可以破解它,就是暴力破解。 因此,一个简单的概率理论适用于这里,他会变得比平常幸运两倍。 CPU周期,时间是另一面硬币。 但是我们仍然不能说他是一个幸运的家伙,在第500次尝试中走运了,否则他可能会有另一个机会走运。因此,从理论上讲,这可能更容易,实际上也是如此,但他还应该足够幸运才能活那么久。哈哈

如果A可以用来破解B?不太可能,因为散列和加密算法应该有一些相似之处,而这里并非如此。


0
这个领域有两种变体,这个事实是否会让攻击者更容易利用其中一种来使得破解另一种变得更容易?
因为一旦我破解了其中一种变体,我就可以获得更多明文样本,这些明文样本对应于另一种变体的加密数据,所以这会使得破解另一种变体更容易。

0
当然可以 - 现在有两种获取数据的方式,而不仅仅是一种。只要您能够以其中一种可用的方式解密它,您就可以获得数据。

这比我快了两秒钟。 - IAbstract
我理解你的观点,它的强度取决于最薄弱的一环。但是攻击者必须“独立”地破解它。我的问题是,攻击者是否可以利用其中一个来使另一个更容易被破解? - silow
@silow,这将意味着哈希和加密算法之间存在某种关系;实际上,这几乎总是不成立的。 - Andrew White
没有真正的细节,任何人怎么能知道呢?但很不可能其中一个可以被用来攻击另一个。 - President James K. Polk
@GregS 我想不出主要哈希算法和主要加密算法之间有任何真实的关系;这将意味着一个算法可以暴露另一个未处理数据的一些信息,这似乎是设计者想要避免的。 - Andrew White
@Andrew White:我同意,我也不能。 - President James K. Polk

-2

是的,也许吧。如果字符串非常短并且有人破解了它,他就可以获得原始值而不必知道密钥。这尤其适用于密码。


1
即使它不是密码,字段也被加密/哈希有其原因。这些信息在某种程度上是敏感的。 - IAbstract
下降的投票是因为这个答案毫无意义。问题是是否拥有哈希值会使破解加密更容易。这个答案与此无关。 “如果有人破解了它,他就有了原始值”对于任何加密都是正确的,但是如果您正确使用加密,那么基本上不可能破解。 - Graeme Perrow
@Graeme Perrow:但如果只是加密的话,除非使用了大量的盐(salt),否则很难被破解。 - thejh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接