Claw finding problem

From testwiki
Revision as of 08:17, 25 May 2023 by imported>Pasha20d00 (Algorithms)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

The claw finding problem is a classical problem in complexity theory, with several applications in cryptography. In short, given two functions f, g, viewed as oracles, the problem is to find x and y such as f(x) = g(y). The pair (x, y) is then called a claw. Some problems, especially in cryptography, are best solved when viewed as a claw finding problem, hence any algorithmic improvement to solving the claw finding problem provides a better attack on cryptographic primitives such as hash functions.

Definition

Let A,B,C be finite sets, and f:AC, g:BC two functions. A pair (x,y)A×B is called a claw if f(x)=g(y). The claw finding problem is defined as to find such a claw, given that one exists.

If we view f,g as random functions, we expect a claw to exist iff |A||B||C|. More accurately, there are exactly |A||B| pairs of the form (x,y) with xA,yB; the probability that such a pair is a claw is 1/|C|. So if |A||B||C|, the expected number of claws is at least 1.

Algorithms

If classical computers are used, the best algorithm is similar to a Meet-in-the-middle attack, first described by Diffie and Hellman.[1] The algorithm works as follows: assume |A||B|. For every xA, save the pair (f(x),x) in a hash table indexed by f(x). Then, for every yB, look up the table at g(y). If such an index exists, we found a claw. This approach takes time O(|A|+|B|) and memory O(|A|).

If quantum computers are used, Seiichiro Tani showed that a claw can be found in complexity

|A||B|3 if |A||B|<|A|2 and

|B| if |B||A|2.[2]

Shengyu Zhang showed that asymptotically these algorithms are the most efficient possible.[3]

Applications

As noted, most applications of the claw finding problem appear in cryptography. Examples include:

References

Template:Reflist