Furthermore, B chooses at random a value ` ∈ {1, 2, . . . , Q
1
}. When the
attacker A makes the `-th query to the random oracle H
1
, with some identity
ID
`
, the algorithm B sets P K
`
= H
1
(ID
`
) = bP , and sends this value to the
attacker. Later, if the attacker A asks for the secret key of ID
`
to the extracting
oracle, then the algorithm B stops and outputs “fail”.
For the rest of identities {ID
j
}
1≤j≤Q
e
+Q
1
that A queries to the extracting
oracle or to the random oracle H
1
, B can provide consistent answers as follows:
B chooses a random element x
j
∈ Z
∗
q
and computes the values P K
j
= x
j
P and
SK
j
= x
j
Y , where Y is the master public key. Then B sets H
1
(ID
j
) = P K
j
,
and stores this relation in a random oracle list for H
1
. If the query was a random
oracle query, B sends to A the value P K
j
. If the query was an extracting query,
B sends to A the value SK
j
for the secret key, as well.
The only inconsistency problem happens if two different executions (with
different identities ID
i
and ID
j
) of this simulation result in the same value
P K
i
= P K
j
. The probability of such a collision is, however, less than
(Q
1
+Q
e
)
2
2
·
1
q
.
On the other hand, every time that A asks for a valid ring signature for a
message m and a ring U, the algorithm B proceeds as follows:
1.
Choose at random c
0
∈ Z
q
.
2.
For i = 0, 1, . . . , n − 1, choose T
i
at random in G
1
. If i 6= n − 1, compute
c
i+1
= H
2
(U, m, e(T
i
, P ) · e(c
i
P K
i
, Y )). In order to compute this value, the
algorithm B constructs, as before, a random oracle list for H
2
. If the input is
already in the list, it outputs the matching value. If not, it chooses a random
value in Z
q
, outputs it and stores the new relation in the list.
3.
Define H
2
(U, m, e(T
n−1
, P ) · e(c
n−1
P K
n−1
, Y )) to be c
0
. Store this relation
in the list for H
2
.
4.
Send the tuple (U, m, c
0
, T
0
, T
1
, . . . , T
n−1
) to A.
For the queries of A to the random oracle H
2
, the algorithm B proceeds in the
same way: it looks for the input in the list, outputting the matching value if it
finds it, or a random value otherwise. Now the risk is that, in step 3 of the above
simulation pro cess, the obtained tuple (U, m, e(T
n−1
, P ) · e(c
n−1
P K
n−1
, Y )) has
been already queried by A to the random oracle H
2
. The probability of such a
collision is less than
Q
2
q
for each execution of the signature simulation, and so
less than
Q
s
Q
2
q
for the whole process.
Summing up, the algorithm B successfully simulates the environment of A
with probability greater than ²
1
= (1 −
(Q
1
+Q
e
)
2
2q
)(1 −
Q
s
Q
2
q
).
We denote by ω the whole set of random tapes that take part in an attack
by A, with the environment simulated by B, but excluding the randomness
related to the oracle H
2
. The success probability of A in forging a valid ring
signature scheme is then taken over the space (ω, H
2
). If we denote by S the set
of successful executions of A, we have that Pr[(ω, H
2
) ∈ S] ≥ ε.
Now consider a ring signature (U, m, c
0
, T
0
, T
1
, . . . , T
n−1
) forged by A. We
denote as R
i
the value e(T
i
, P ) · e(c
i
P K
i
, Y ), for all i = 0, . . . , n − 1. We use the
notation Q
1
, Q
2
, . . . , Q
Q
2
for the different queries that A makes to the random
oracle H
2
. By the ideal randomness of this oracle, the probability that A has
69