没有顺序依赖性的数学运算(或哈希函数)

时间:2018-08-04 16:27:07

标签: math hash cryptography

我正在考虑的问题是散列函数,尽管我主要对描述所需属性的数学术语/背景感兴趣。

考虑以下情况:我有一个散列函数,其中包含一个秘密( S )和一个数字( X ),该数字会创建另一个数字( Y ):

Hash : S, X → Y

然后,我用自己的秘密( a b )定义了两个不同的哈希函数:

H1(X) := Hash(a, X)
H2(X) := Hash(b, X)

我想要的属性是:

H1(H2(x)) = H2(H1(X))

(我认为这是功能通勤吗?)

从编程和数学思考后退一步,我们可以看看不同的运算。如果该函数仅包含一个操作,那么我很确定,如果该操作同时具有关联和交换属性,则将始终满足此属性。但是,有些操作对顺序不敏感但不可交换,例如师。我怎么知道我选择的哈希函数是否会使其通勤?

一些似乎可行的例子:

简单添加:

Hash(S, X) := S + X

按位异或:

Hash(S, X) := S xor X

模幂:

Hash(S, X) := X^S mod p
if S ∈ N and X ∈ Z

1 个答案:

答案 0 :(得分:0)

  

我怎么知道我选择的哈希函数是否会使它上下班?

组成下的通气性是不寻常的性质。除非函数使用某些基础代数结构的可交换运算(例如“乘以x”),否则这种情况并不常见。这是您的三个示例的形式。

实际的答案是“如果您没有证明它是可交换的,则假定它不是可交换的”。没有通用的算法可以为您提供证明。