Author

Topic: How to generate public key from private key (Read 310 times)

staff
Activity: 3458
Merit: 6793
Just writing some code
December 17, 2017, 06:36:03 PM
#8
Thanks for the explenation

when i multiply G with my secret key i get astronomical number, which is not the public key, what am i doing wrong consider those params?

var Gx = 79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
var Gy = 483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8

var private key = 845ADD761F80CD7BA8AD296B262939D6191370D286D29D4F06A4F1C9A8DE4E4B

i get this public key which is not the right one

C532FC9C12D71842216394CD94771F9B72302CABD0C5D4CCCF1585131548378D1B9F08218A4E3A0 F5E06D981D74720B8F59235385F25AECE75E6FFA787AF3988DD1D215B39C94994D0600D31C1971E 88CF8623AC07DCB72279CD66038AD281049F0E028D31C40417FDD97364A8D6664AEB3437740CE41 D37928CF956E64E61E8
Since this is finite field arithmetic, everything needs to be done modulo n (n is defined in the secp256k1 spec). Doing all operations mod n (or doing all operations and then performing mod n) should fix this problem.
newbie
Activity: 8
Merit: 0
December 17, 2017, 03:23:59 PM
#7
i have only one missing part to understand the complete picture.
G is a point on the curve with two coordinates(X,Y), how can you multiply the with a number and end up with a single number(public key) and not with a new point?

What you get is a new point, which is your public key.
There are two possible ways to represent your public key. Either the long one with
04 + x_coordinate + y_coordinate
or (the compressed way) if y is even
02 + x_coordinate
and for odd y
03 + x_coordinate

Your public key is a point in the field. It is just represented in the way I described above. And you can always calculate the x and y coordinates from the compressed format too.

from the public key you can calculate your address, and for that you have to take SHA256 and Ripemod160 hashes. And add a few check bytes to the end...


Thanks for the explenation

when i multiply G with my secret key i get astronomical number, which is not the public key, what am i doing wrong consider those params?

var Gx = 79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
var Gy = 483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8

var private key = 845ADD761F80CD7BA8AD296B262939D6191370D286D29D4F06A4F1C9A8DE4E4B

i get this public key which is not the right one

C532FC9C12D71842216394CD94771F9B72302CABD0C5D4CCCF1585131548378D1B9F08218A4E3A0 F5E06D981D74720B8F59235385F25AECE75E6FFA787AF3988DD1D215B39C94994D0600D31C1971E 88CF8623AC07DCB72279CD66038AD281049F0E028D31C40417FDD97364A8D6664AEB3437740CE41 D37928CF956E64E61E8
full member
Activity: 378
Merit: 197
December 17, 2017, 11:13:47 AM
#6
i have only one missing part to understand the complete picture.
G is a point on the curve with two coordinates(X,Y), how can you multiply the with a number and end up with a single number(public key) and not with a new point?

What you get is a new point, which is your public key.
There are two possible ways to represent your public key. Either the long one with
04 + x_coordinate + y_coordinate
or (the compressed way) if y is even
02 + x_coordinate
and for odd y
03 + x_coordinate

Your public key is a point in the field. It is just represented in the way I described above. And you can always calculate the x and y coordinates from the compressed format too.

from the public key you can calculate your address, and for that you have to take SHA256 and Ripemod160 hashes. And add a few check bytes to the end...
newbie
Activity: 8
Merit: 0
December 17, 2017, 10:48:32 AM
#5
The public key is calculated by taking the generator point G and performing elliptic curve point multiplication on it with the private key. Given private key d and generator G, you do d * G. The process for elliptic curve point multiplication is detailed on wikipedia. The curve parameters are the ones for the secp256k1 curve which are defined here (section 2.4.1): http://www.secg.org/sec2-v2.pdf

thank you very much.

i have only one missing part to understand the complete picture.
G is a point on the curve with two coordinates(X,Y), how can you multiply the with a number and end up with a single number(public key) and not with a new point?
staff
Activity: 3458
Merit: 6793
Just writing some code
December 16, 2017, 09:11:56 PM
#4
The public key is calculated by taking the generator point G and performing elliptic curve point multiplication on it with the private key. Given private key d and generator G, you do d * G. The process for elliptic curve point multiplication is detailed on wikipedia. The curve parameters are the ones for the secp256k1 curve which are defined here (section 2.4.1): http://www.secg.org/sec2-v2.pdf
newbie
Activity: 8
Merit: 0
December 16, 2017, 05:19:27 PM
#3
https://coinb.in/#verify is good enough for this? Do it off-line of course.

i'm not interested of any website to do it for me, i want to understand the algorithm behind it.
mda
member
Activity: 144
Merit: 13
December 16, 2017, 05:04:22 PM
#2
https://coinb.in/#verify is good enough for this? Do it off-line of course.
newbie
Activity: 8
Merit: 0
December 16, 2017, 04:40:29 PM
#1
i went through loads of articles include ECDSA ones but i couldn't find a detailed scheme on how to generate the public key out of the private one.
anyone has any idea?
Jump to: