Title: Verifying K Value in Sagemath Post by: krashfire on February 07, 2024, 07:08:16 PM How do i verify if the found K value is the correct value given for an R signature and a public key?
i really need help for someone to check my code. Code:
how do i verify the k value found? my calculations are wrong. it verifies the wrong k value. Title: Re: Verifying K Value in Sagemath Post by: mamuu on February 07, 2024, 08:44:58 PM Hello there
"R = E.lift_x(r)" there are 2 possibilities in this line for point R "R" or "-R" If "public_key" is not a string but a "point" object(like G) with "E" element (Ellipric Curve) "R= u2*public_key + u1*G" it's the right thing to do. Thank you. Title: Re: Verifying K Value in Sagemath Post by: krashfire on February 08, 2024, 04:24:59 AM Hello there "R = E.lift_x(r)" there are 2 possibilities in this line for point R "R" or "-R" If "public_key" is not a string but a "point" object(like G) with "E" element (Ellipric Curve) "R= u2*public_key + u1*G" it's the right thing to do. Thank you. So you are saying i should instead write it like this? Code:
Title: Re: Verifying K Value in Sagemath Post by: mamuu on February 08, 2024, 09:35:52 PM on sagemath
------------------------------- sage:#prime [type:integer] but prime sage:P = 115792089237316195423570985008687907853269984665640564039457584007908834671663 sage:#Elliptic Curve y2=x3+7 for P [type:curve] sage:E = EllitpicCurve(GF(P),[0,7]) sage:#Elliptic Curve Order [type:integer] sage:N = E.order() sage:#Base Point G [type:point] sage:G= E(55066263022277343669578718895168534326250603453777594175500187360389116729240,32670510020758816978083085130507043184471273380659243275938904335757337482424) sage:# "public_key = secret*G" or "public_key = E(pubkey_x,pubkey_y)" [type:point], we know "pubkey_x,pubkey_y" sage:public_key = E(pubkey_x,pubkey_y) sage:# "K=random_number*G" [type:point] than "r = K[0]" [type:integer] , you known "r" sage:K = E.lift_x(r) sage:#K is_correct ? we don't know sage:r = your_value #[type:integer] sage:s = your_value #[type:integer] sage:z = your_value #[type:integer] sage:w = 1/s %N sage:u1 = z * w %N sage:u2 = r * w %N sage:#correct "K" point [type:point] sage:u2*public_key + u1*G #[type:point] sage:+K == u2*public_key + u1*G #(true or false) sage:-K == u2*public_key + u1*G #(true or false) sage r == Integer(+K[0]) #(true or false) [type:integer] sage r == Integer(-K[0]) #(true or false) [type:integer] sage:var("k x") sage:k*s == r*x+z #[type:variable] sage : K*s == r*public_key + z*G #[type:point] (true or false) this line type: point R = E.lift_x(r) Title: Re: Verifying K Value in Sagemath Post by: krashfire on February 10, 2024, 02:27:38 AM on sagemath ------------------------------- sage:#prime [type:integer] but prime sage:P = 115792089237316195423570985008687907853269984665640564039457584007908834671663 sage:#Elliptic Curve y2=x3+7 for P [type:curve] sage:E = EllitpicCurve(GF(P),[0,7]) sage:#Elliptic Curve Order [type:integer] sage:N = E.order() sage:#Base Point G [type:point] sage:G= E(55066263022277343669578718895168534326250603453777594175500187360389116729240,32670510020758816978083085130507043184471273380659243275938904335757337482424) sage:# "public_key = secret*G" or "public_key = E(pubkey_x,pubkey_y)" [type:point], we know "pubkey_x,pubkey_y" sage:public_key = E(pubkey_x,pubkey_y) sage:# "K=random_number*G" [type:point] than "r = K[0]" [type:integer] , you known "r" sage:K = E.lift_x(r) sage:#K is_correct ? we don't know sage:r = your_value #[type:integer] sage:s = your_value #[type:integer] sage:z = your_value #[type:integer] sage:w = 1/s %N sage:u1 = z * w %N sage:u2 = r * w %N sage:#correct "K" point [type:point] sage:u2*public_key + u1*G #[type:point] sage:+K == u2*public_key + u1*G #(true or false) sage:-K == u2*public_key + u1*G #(true or false) sage r == Integer(+K[0]) #(true or false) [type:integer] sage r == Integer(-K[0]) #(true or false) [type:integer] sage:var("k x") sage:k*s == r*x+z #[type:variable] sage : K*s == r*public_key + z*G #[type:point] (true or false) this line type: point R = E.lift_x(r) Ok. Got it. Thank you so much! But I still need to verify the K value found. How do I do it correctly? Your method only shows whether K+ or K- is the correct one. But I still need to verify the K value by brute forcing. So how do I write the code to verify the K found? Title: Re: Verifying K Value in Sagemath Post by: whanau on February 23, 2024, 06:57:44 PM Ok. Got it. Thank you so much! But I still need to verify the K value found. How do I do it correctly? Your method only shows whether K+ or K- is the correct one. But I still need to verify the K value by brute forcing. So how do I write the code to verify the K found? # Compute the new signature point P = k * G (k = your new k on test) # Check if the x-coordinate of the signature point matches r if P.x() == r: print(f"Found k candidate: {k:x} ") private_key = (s * k - z) * mod_inv(r, n) % n print("Private Key : %02x " % private_key) Title: Re: Verifying K Value in Sagemath Post by: krashfire on February 29, 2024, 01:29:48 PM # Compute the new signature point P = k * G (k = your new k on test) # Check if the x-coordinate of the signature point matches r if P.x() == r: print(f"Found k candidate: {k:x} ") private_key = (s * k - z) * mod_inv(r, n) % n print("Private Key : %02x " % private_key) Thank You!! Title: Re: Verifying K Value in Sagemath Post by: Bglhn on March 21, 2024, 09:44:30 AM Hello, what is your formula to find k? I've been looking for this too and couldn't find a solution.
Title: Re: Verifying K Value in Sagemath Post by: mamuu on March 21, 2024, 10:06:46 PM on sagemath ------------------------------- sage:#prime [type:integer] but prime sage:P = 115792089237316195423570985008687907853269984665640564039457584007908834671663 sage:#Elliptic Curve y2=x3+7 for P [type:curve] sage:E = EllitpicCurve(GF(P),[0,7]) sage:#Elliptic Curve Order [type:integer] sage:N = E.order() sage:#Base Point G [type:point] sage:G= E(55066263022277343669578718895168534326250603453777594175500187360389116729240,32670510020758816978083085130507043184471273380659243275938904335757337482424) sage:# "public_key = secret*G" or "public_key = E(pubkey_x,pubkey_y)" [type:point], we know "pubkey_x,pubkey_y" sage:public_key = E(pubkey_x,pubkey_y) sage:# "K=random_number*G" [type:point] than "r = K[0]" [type:integer] , you known "r" sage:K = E.lift_x(r) sage:#K is_correct ? we don't know sage:r = your_value #[type:integer] sage:s = your_value #[type:integer] sage:z = your_value #[type:integer] sage:w = 1/s %N sage:u1 = z * w %N sage:u2 = r * w %N sage:#correct "K" point [type:point] sage:u2*public_key + u1*G #[type:point] sage:+K == u2*public_key + u1*G #(true or false) sage:-K == u2*public_key + u1*G #(true or false) sage r == Integer(+K[0]) #(true or false) [type:integer] sage r == Integer(-K[0]) #(true or false) [type:integer] sage:var("k x") sage:k*s == r*x+z #[type:variable] sage : K*s == r*public_key + z*G #[type:point] (true or false) this line type: point R = E.lift_x(r) +K and -K are [points], and k is [integer]. in this case K=(x/s)*PubKey + (z/s)*G or K = k*G k=randint(1,N) #i.e. a random number, you can only try to find this number. it is very difficult in this process. You can find "k" directly with the values r,s,z With E.lift_x(R) you get either "+K" or "-K" and this is a "point". However, you cannot find the value "k", which is an integer. Title: Re: Verifying K Value in Sagemath Post by: Bglhn on March 21, 2024, 11:48:53 PM So how did you find your G spot? and p is your prime? I'm trying to learn, but I don't have enough knowledge.
Title: Re: Verifying K Value in Sagemath Post by: mamuu on March 22, 2024, 07:05:58 AM So how did you find your G spot? and p is your prime? I'm trying to learn, but I don't have enough knowledge. You have to research and learn, I can't explain this situation, you can now learn by communicating with an artificial intelligence. Title: Re: Verifying K Value in Sagemath Post by: vjudeu on March 22, 2024, 07:14:19 AM Quote So how did you find your G spot? Nobody knows that. It seems someone used 0x48ce563f89a0ed9414f5aa28ad0d96d6795f9c62 as a magic number to start with, but nobody knows why: https://www.youtube.com/watch?v=NGLR2N4EK58And there are more magic numbers outside Bitcoin, even with reward for explaining them: https://bitcointalk.org/index.php?topic=5469657.0 Quote you can now learn by communicating with an artificial intelligence AI is terrible at math, try asking about block hashes and transactions, in most cases it will be completely wrong, and it can give you for example an answer, where Bitcoin transaction format is mixed with Ethereum and other altcoins. |