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.
Solinas, Jerome Anthony