A method of identifying user, generating digital signature, and verifying digital
signature by selecting a modulus p in the form of p=(2dk-2ck-1)/r,
p=(2dk-2(d-1)k+2(d-2)k- . . . -2k+1)/r,
p=(2dk-2ck-1)/r, p=(2dk-2ck+1)/r, and
p=(24k-23k+22k+1)/r, selecting an elliptic curve
E and an order q; selecting a basepoint G; generating a private key w; generating
a public key W=wG; distributing p, E, q, G, and W to at least a prover, a verifier,
and a signer; generating the prover's private key wp and public key
Wp=wpG; retrieving the prover's public key Wp;
generating a private integer kp; combining kp and G to form
K using p; sending K to the verifier; sending a challenge integer c to the prover;
combining c, kp, and wp to form a response integer v; sending
v to the verifier; combining cG, K, and Wp using p and checking to see
if the combination is equal to vG. If not so, stop. Otherwise, generating, by the
signer, the signer's private key ws; generating a private integer ks;
combining ks and G to form K using p; combining K and a message M to
form an integer h; combining h, ks, and ws to form an integer
s; sending M and (K,s) as a digital signature of M; retrieving Wp; receiving
M and (K,s); combining K and M to form an integer h; and combining h, K, and Wp
using p and checking to see if the combination is equal to sG. If so, the
digital signature is verified.