Language agnostic 加密安全的加法散列函数

Language agnostic 加密安全的加法散列函数,language-agnostic,math,hash,cryptography,Language Agnostic,Math,Hash,Cryptography,我正在开发一个基于Web的文件传输系统。在这个系统中,数据块与xor函数一起下载。我想在街区到达时核实一下 我需要的是一个加密安全的哈希函数,它具有以下属性: 散列(A)^Hash(B)=散列(A^B) 这样的事情存在吗 注意:数据块必须与xor函数相结合,哈希可以与您喜欢的任何函数相结合,只要计算成本合理。您想要的就是所谓的xor函数。我不了解最新的发展,但我看到的描述是非常-几乎不可行-计算速度慢。原稿是,随后对其使用进行了一些改进 至于组合块,散列通常需要在素数字段中使用加法。如果您使用的

我正在开发一个基于Web的文件传输系统。在这个系统中,数据块与xor函数一起下载。我想在街区到达时核实一下

我需要的是一个加密安全的哈希函数,它具有以下属性:

散列(A)^Hash(B)=散列(A^B)

这样的事情存在吗

注意:数据块必须与xor函数相结合,哈希可以与您喜欢的任何函数相结合,只要计算成本合理。

您想要的就是所谓的xor函数。我不了解最新的发展,但我看到的描述是非常-几乎不可行-计算速度慢。原稿是,随后对其使用进行了一些改进


至于组合块,散列通常需要在素数字段中使用加法。如果您使用的是喷泉代码,那么就不必使用xor——任何可逆函数都可以,这包括加法。上面描述的散列在素数字段中进行加法和乘法运算,并且是可证明安全的。

如果您请求的标识是正确的

Hash(A) ^ Hash(B) == Hash(A ^ B)
那么不,不可能有这样的加密安全散列函数。这是因为你的函数将是一个从可能的块空间到可能的散列空间的函数

简单地说,这意味着什么? 好吧,假设您的映射采用长度为6的块,并返回长度为3的哈希值,这些是一些哈希值:

Hash(000001) = 010
Hash(000010) = 111
Hash(000100) = 001
Hash(001000) = 101
Hash(010000) = 110
Hash(100000) = 001
然后,您可以通过上述各项的线性组合来计算任何给定块的哈希值。比如说,

Hash(101000) = Hash(100000) ^ Hash(001000) = 001 ^ 101 = 100.
这意味着您的哈希函数可以用6×3的矩阵表示

这意味着什么? Wikipedia将属性定义为具有四个主要或重要属性:

  • 很容易计算任何给定消息的哈希值
  • 无法找到具有给定哈希的消息
  • 在不更改消息哈希的情况下修改消息是不可行的
  • 用相同的哈希值查找两个不同的消息是不可行的
当然,第一个属性可能是正确的,但其他属性则不是。反转散列函数就像解a一样简单,这很容易。我假设你已经对实数上的线性映射这样做了,但是完全相同的方法在这里工作

如果发现哈希函数的元素,即消息
K
,使得
hash(K)
都为零,则最后一个属性也会失败。录制任何消息
M
;然后
M
M^K
将具有相同的散列,因为
hash(M^K)=散列(M)^hash(K)=散列(M)^0=散列(M)
。查找内核元素也很容易


第三个属性有点困难,但也可能被破坏。(例如,假设你正在散列一个合法的合同。找到一些地方可以修改一些逗号,或者一些东西。考虑这些变化对哈希函数的影响,然后求解一个线性方程组。)< / P>他不需要那个身份-h(a x b)=h(a)y h(b)对于任何两个操作符x和y都是足够的,假设x有一个倒数。我在本文()中看到的同态散列使用素数域上的加法和乘法作为两个运算。是的,我的答案只涉及方程
H(x^y)=H(x)^H(y)
——但在我的第一句话中给出了“精确”一词,它声称不做更多的运算。事实上,我对你提到的情况有点好奇。对-我只是指出这只是可能解决方案的一个子集。即使用于添加块的函数必须是xor(对于喷泉代码,它不是xor),用于添加哈希的函数也可以是其他函数。我只是说用于组合块的函数必须是xor,因为我已经实现了它,如果真的有必要,可以更改它。你链接的那些论文看起来非常有前途,我将读一读:)这些文件正是我试图解决的问题。完美的这些链接现在已断开。知道他们去哪儿了吗?我正好在找同样的东西,同样的目的!我发现了你的问题+1.