散列函数违反了某些预映像属性

时间:2016-04-21 22:53:59

标签: hash cryptography hash-collision

假设 H(xy)= H(x)* H(y)。显然,违反了preimage属性。我们怎样才能找到x,y这样 H(x)= H(y)mod(2 ^ k)

1 个答案:

答案 0 :(得分:0)

2^k是一个非常特殊的模数。你可以证明欧拉定理的以下强化版本:

假设x是任何正整数。然后x^phi(2^k) (mod 2^k)等于0或1,当且仅当x为奇数时才为1。

证明:

如果x为奇数,则为gcd(x,2^k) = 1,因此欧拉定理为x^phi(2^k) (mod 2^k) = 1

假设x是偶数。如果x = 0,结果很简单,所以假设x > 0。写x = (2^s)*y y为奇数和s > 0。注意

phi(2 ^ k)`= 2 ^(k-1)

但是,

x^phi(2^k) = (2^s*y)^phi(2^k)
           = (2^s)^phi(2^k) * y^phi(2^k)
           = 2^(s*phi(2^k)) * y^phi(2^k)
           = 2^(s*2^(k-1)) * y^phi(2^k)
           = 0 * y^phi(2^k) = 0 (mod 2^k)

最后一行是因为s*2^(k-1) >= k因此2^(s*2^(k-1))2^k的倍数。

请注意,如果x是偶数,那么您实际上拥有x^k = 0 (mod 2^k),因此将x提升为权力phi(2^k)对于除了最小k以外的任何人都是过度的

鉴于此引理,现在可以看到存在与xy不同的H(x) = H(y) = 0H(x) = H(y) = 1。由于它似乎是家庭作业,我会把细节留给你。