I have currently started a course on cryptography and am an absolute beginner. While reading through Schnorr's Protocol I came across several ways in which it was described.
One of the approach is described here: - https://www.youtube.com/watch?v=mV9hXEFUB6A
A second approach using discrete logarithmic is described here - https://asecuritysite.com/encryption/schnorr
The third article had a slightly different mathematics to the discrete log implementation- https://blockgeeks.com/guides/what-is-zksnarks/#The_Schnorr_Identification_Protocol
I apologize if this is completely novice. I just want to know how are they different and which protocol was initially published by Claus Schnorr?
edit: Thanks for the reply. My main doubt is while learning Schnorr's signature, The implementation on the Asecurity source given and the Blockgeeks source given is different. What is the difference between them? What Asecurity says:
With Schnorr identification, Peggy (the prover) has a proving public key of (N,g,X)(N,g,X) and a proving secret key of (N,x)(N,x). NN is a prime number for the modulus operation, and xx is the secret, and where:
On the registration of the secret, Peggy generates a random value (yy), and then computes YY:
This value is sent to Victor (who is the verifier). Victor then generates a random value (c)(c) and sends this to Peggy. This is a challenge to Peggy to produce the correct result. Peggy then computes:
He then sends this to Victor in order to prove that he knows xx. Victor then computes two values:
If the values are the same (val1≡val2val1≡val2), Peggy has proven that she knows xx.
This works because:
Anna wants to prove to Carl that she knows a value x such that y = g^x to a base g.
Anna picks a random value v from a set of values Z, and computes t = g^v.
Anna computes c = H(g,y,t) where H() is a hash function.
Anna computes r = v – c*x.
Carl or anyone can then check if t = g^r * y^c.