Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 对同一字段进行哈希和加密会削弱它吗?_Php_Security_Encryption_Hash - Fatal编程技术网

Php 对同一字段进行哈希和加密会削弱它吗?

Php 对同一字段进行哈希和加密会削弱它吗?,php,security,encryption,hash,Php,Security,Encryption,Hash,我有一个字段(常规字段,而不是密码)存储在数据库中两次:作为散列(SHA512)和加密值。更改此设置需要进行许多更改,而我不想让自己参与其中。我的问题是:在数据库被破坏的情况下,字段被存储两次作为散列并加密的事实是否会削弱其安全性?为什么? 有些人说是的 因为现在他们有两种方法 可能会把它弄破。嗯,我知道。 我想问的是是否有 可以用来使对方开裂 更容易的?事实上 该字段有两个变体,以某种方式使其 攻击者更容易使用一个 让破解另一个更容易?这样看:如果 攻击者只获得了变体A,它 要花一天时间。如果

我有一个字段(常规字段,而不是密码)存储在数据库中两次:作为散列(SHA512)和加密值。更改此设置需要进行许多更改,而我不想让自己参与其中。我的问题是:在数据库被破坏的情况下,字段被存储两次作为散列并加密的事实是否会削弱其安全性?为什么?

有些人说是的 因为现在他们有两种方法 可能会把它弄破。嗯,我知道。 我想问的是是否有 可以用来使对方开裂 更容易的?事实上 该字段有两个变体,以某种方式使其 攻击者更容易使用一个 让破解另一个更容易?这样看:如果 攻击者只获得了变体A,它 要花一天时间。如果只提供 变体B,需要3天的时间。 如果攻击者同时运行两条裂缝 独立地,他们将破解变体A 更快(只需一天)。但是如果攻击者 两者都有,他们可以在6分之一的时间内破解 小时。这就是我要问的


确实如此-现在有两种方法来获取数据,而不仅仅是一种。只要你能用两种可用的方法之一解密,你就有了数据。

是的,也许吧。如果字符串很短,有人破解了它,他就拥有了原始值,而不需要知道键。这尤其适用于密码。

假设散列和加密方法在加密方面很强,那么攻击将是蛮力攻击。因此,成本将是运行两者中较弱的一个:哈希或加密。如果通过大量迭代(例如,使用PBKDF2)计算散列,并且加密是通过散列函数的单个迭代运行密码的简单应用,以获得密钥数据,那么加密值实际上是CPU成本方面的弱点。在这种情况下,答案是存储两者并不会真正削弱它,而是加密值会削弱它

编辑以专门解决更新的问题。从数学角度来看,我怀疑很难证明攻击者无法以某种方式使用这两段数据来缩短攻击时间。针对散列和加密设计的一些攻击非常复杂,因此似乎有可能实现。我确信,在某些情况下,可以缩短攻击时间。一个非常具体的例子:

假设攻击者可以通过某种方式从加密版本中了解密码的长度。这将大大减少暴力强制哈希版本的时间。

理论上,获取数据可能“更容易”;在实践中,攻击其中一个/两个的成本仍然太高,不可行。大多数加密算法都有数百万年的暴力破解时间。好的散列算法也是如此。事实上,您通常可以将散列看作是一种加密,您可以在其中丢弃密钥。因此,除非你有几十亿个不同的散列/加密值,否则你不可能提供足够的信息来减少暴力时间

[更新]


在其他人对我的答案发表评论(或投票否决)之前,请阅读。散列值和加密值具有相同的相对强度,“strong”。因此,除非你能将散列值和加密算法联系起来,否则散列值不会提供比加密版本更多的数据信息。

如果我理解正确,你是说如果黑客同时获得这两个值,他能更快地破译数据吗?或者像A需要6小时B需要9小时如果我们合并他能在4小时内破解它吗?正确的? 理论上,我相信他能够在十亿年的时间里,更快地破解它,即使是这样。 SHA512很难破解(目前可能实际上不可能),考虑到ur加密也很难破解。 那么,只有一条路可以走,用蛮力来破解。 所以一个简单的概率理论在这里应用,他得到了两倍的幸运。 CPU周期,时间是硬币的另一面。 但我们仍然不能说他是一个幸运的家伙,在他的第500次尝试中获得了幸运,如果不是的话,他可能会有另一次机会获得幸运。所以从理论上讲,这可能更容易,实际上也一样,但他应该足够幸运,能够活那么久。哈哈

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

该字段有两个变体,这一事实是否会让攻击者更容易使用其中一个变体来破解另一个变体


它使破解另一个变体更容易,因为一旦我破解了一个变体,我将获得更多与另一个变体的加密数据相对应的明文样本。

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

  • 是否用盐腌制土豆条
  • 加密使用哪种算法和操作模式
  • 其他细节,如钥匙和IV管理
考虑这样一种情况,即散列不加盐,每个字段都使用AES-CTR模式进行加密,使用相同的密钥和IV

  • 然后,攻击者选择一个可能出现在该字段中的值
  • 然后他/她对其进行散列,并找到一个显示散列的记录
  • 然后,攻击者查看已知明文的相应加密
  • 通过对密文和明文进行异或运算,攻击者可以恢复密钥流
  • 攻击者可以解密其他所有内容

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

    对您的系统一无所知的攻击者可能会尝试对加密字段进行暴力解密。他们如何知道何时成功解密?(修订)