Claw finding problem


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 = g. The pair 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 finite sets, and, two functions. A pair is called a claw if. The claw finding problem is defined as to find such a claw, given that one exists.
If we view as random functions, we expect a claw to exist iff. More accurately, there are exactly pairs of the form with ; the probability that such a pair is a claw is. So if, 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. The algorithm works as follows: assume. For every, save the pair in a hash table indexed by. Then, for every, look up the table at. If such an index exists, we found a claw. This approach takes time and memory.
If quantum computers are used, Seiichiro Tani showed that a claw can be found in complexity.
Shengyu Zhang showed that asymptotically these algorithms are the most efficient possible.

Applications

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