【问题标题】:Set-based hash (digest) algorithm?基于集合的哈希(摘要)算法?
【发布时间】:2013-07-20 12:41:46
【问题描述】:

是否有任何消息摘要算法可以在摘要上应用集合函数并且结果仍然有意义?换句话说,是否有一个散列函数NOT打破了散列前后“集合”的概念?

我正在寻找一个哈希函数:

  1. 将一组数据散列成一个固定长度(或有界长度)的字符串
  2. 如果输入数据集相同,则生成相同的哈希
  3. 如果您选择原始数据的 子集,则相当于对数据子集进行哈希处理,或者将子集应用于原始数据集的哈希,即您将获得相同的子集两种方式的哈希。

例如,在下图中,A 有几个数据点(红色菱形)。 B 是 A 的子集。有没有这样的哈希函数:

A中的数据----哈希函数---->_hashA----设置操作---->_hashB

B中的数据----哈希函数---->_hashB

【问题讨论】:

    标签: algorithm hash set


    【解决方案1】:

    这看起来有点像 http://en.wikipedia.org/wiki/Homomorphic_encryption 和像 http://en.wikipedia.org/wiki/Differential_privacy 这样的数据库隐私方案 - 至少在我看来。

    在这两种情况下,开发人员都遇到了问题,因为事实证明,一旦您让用户做一些事情,他们就会找到聪明的方法来解决如何使用这些事情作为构建块来做他们想做的任何事情,因此系统缺乏任何安全性完全没有。

    在你的情况下,我认为你想要 AndHash(hash(a), hash(b)) = hash(a and b)。这意味着如果 hash(a) != hash(null set) 那么我可以根据该集合的哈希值找出 a 是否是任何集合的成员。如果这种情况经常发生,我可以根据散列值计算出散列集的许多成员,这意味着散列值必须与集合一样大,因为它包含其中的所有信息。

    根据您的需要,可能值得关注http://en.wikipedia.org/wiki/Minhash

    【讨论】:

      【解决方案2】:

      AFAIK,不。散列函数通常(我见过很多)对单个数据块进行操作,而不考虑该数据实际表示的内容,主要关注的是减少冲突的概率。也就是说,当然有可能想出你想要做的事情,但我想这将非常困难,而且结果很可能在避免碰撞方面不是最理想的。

      【讨论】:

        【解决方案3】:

        简短的回答是否定的,不存在这样的算法。您可能会尝试加密数据,然后在需要应用设置功能时对其进行解密,然后再次对其进行加密。然而,散列算法本质上是一种方式,并且涉及数据丢失。这里有一个很好的解释哈希和加密算法的区别:Fundamental difference between Hashing and Encryption algorithms

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-03-12
          • 2012-09-18
          • 1970-01-01
          • 1970-01-01
          • 2017-04-19
          • 2018-01-20
          • 2018-05-29
          相关资源
          最近更新 更多