Week 8 (rev. 2) |
Professor M. J. Fischer | March 1 & 3, 2005 |
| (1) |
|
|
|
Each iteration of this algorithm succeeds with significant probability ε that is the product of the probability that A(y) succeeds on y and the probability that m′ ≠ m. The latter probability is at least 1/2 except for those values m which lie in the set of U of messages on which h is one-to-one (defined in the proof of claim 1). Thus, assuming |M| >> |H|, the algorithm outputs each colliding pair in expected number of iterations that is at most only slightly larger than 1/ε. These same ideas can be used to show that weak collision-free implies one-way, but now one has to be more careful with the precise definitions. If h is weak collision-free, then h is one-way. (Sketch) Suppose as before that h is not one-way, so there is an algorithm A(y) for finding m such that h(m) = y, and A(y) succeeds with significant probability when y is chosen randomly with probability proportional to the size of its preimage. Assume that A(y) returns ⊥ to indicate failure. We want to show this implies that the weak collision-free property does not hold, that is, there is an algorithm that, for a significant number of m ∈ M, succeeds with non-negligible probability in finding a colliding m′. We claim the following algorithm works:
1. Choose random m. 2. Compute y = h(m). 3. Compute m′ = A(y). 4. If m′ ≠ ⊥ and m ≠ m′ then output (m, m′). 5. Start over at step 1.
This algorithm fails to halt for m ∈ U, but we have argued above that the number of such m is small (= insignificant) when |M| >> |H|. It may also fail even when a colliding partner m′ exists if it happens that the value returned by A(y) is m. (Remember, A(y) is only required to return some preimage of y; we can't say which.) However, corresponding to each such bad case is another one in which the input to the algorithm is m′ instead of m. In this latter case, the algorithm succeeds, since y is the same in both cases. With this idea, we can show that the algorithm succeeds in finding a colliding partner on at least half of the messages in M−U.
Given input m: 1. Compute y = h(m). 2. Compute m′ = A(y). 3. If m′ ≠ ⊥ and m ≠ m′ then output (m, m′) and halt. 4. Otherwise, start over at step 1.
To sign m: 1. Choose random y ∈ \Zstarφ(p). 2. Compute b = gy mod p. 3. Compute c = (m − xb) y−1 mod φ(p). 4. Output signature s = (b,c).
Why does this work? Plugging in for a and b, we see that
To verify (m, s), where s = (b, c): 1. Check that ab bc ≡ gm mod p.
|
To sign m: 1. Choose random y ∈ \Zstarq. 2. Compute b = (gy mod p) mod q. 3. Compute c = (m + xb) y−1 mod q. 4. Output signature s = (b, c).
To see why this works, note that since gq ≡ 1 mod p, then
To verify (m, s), where s = (b, c): 1. Verify that b,c ∈ \Zstarq; reject if not. 2. Compute u1 = mc−1 mod q. 3. Compute u2 = bc−1 mod q. 4. Compute v = (gu1 au2 mod p) mod q. 5. Check v = b.
|
|
|
|
n | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
y | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 0 |