Bitcoin Forum
October 21, 2018, 12:49:29 AM
 News: Make sure you are not using versions of Bitcoin Core other than 0.17.0 [Torrent], 0.16.3, 0.15.2, or 0.14.3. More info.
 Home Help Search Donate Login Register
 Pages: [1]
 Author Topic: How to generate public key from private key  (Read 194 times)
TAnalyzer
Newbie

Offline

Activity: 8
Merit: 0

 December 16, 2017, 08:40:29 PM

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?
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction. Advertise here.
1540082969
Hero Member

Offline

Posts: 1540082969

Ignore
 1540082969

1540082969
 Report to moderator
mda
Member

Offline

Activity: 93
Merit: 10

 December 16, 2017, 09:04:22 PM

https://coinb.in/#verify is good enough for this? Do it off-line of course.
TAnalyzer
Newbie

Offline

Activity: 8
Merit: 0

 December 16, 2017, 09:19:27 PM

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.
achow101
Moderator
Legendary

Offline

Activity: 1554
Merit: 1704

 December 17, 2017, 01:11:56 AM

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

TAnalyzer
Newbie

Offline

Activity: 8
Merit: 0

 December 17, 2017, 02:48:32 PM

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?
aplistir
Full Member

Offline

Activity: 269
Merit: 114

 December 17, 2017, 03:13:47 PM

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...

TAnalyzer
Newbie

Offline

Activity: 8
Merit: 0

 December 17, 2017, 07:23:59 PM

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

i get this public key which is not the right one

achow101
Moderator
Legendary

Offline

Activity: 1554
Merit: 1704

 December 17, 2017, 10:36:03 PM

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

i get this public key which is not the right one

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.

hopeAo
Jr. Member

Offline

Activity: 42
Merit: 1

 December 25, 2017, 08:01:38 AM

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?

I think this link should help

 Pages: [1]