As we already saw, the public key is nothing but a point in the curve. The one we get after multiplying the generator the number of times defined by the secret.
Now, it seems a waste of space to save the x and y coordinates when we know it is the solution to the equation
y^2 % p == (x^3 + 7) If we know
x, we can calculate
y. Public keys are present in most transactions, and since each block can contain several hundred transactions, by cutting the required space for each public key, we are saving a lot of storage (and network traffic). That’s the reason for the compressed public keys. They are basically, just the x coordinate of the point.
By basically, well, because since in the equation we have y squared, and the curve is symmetrical with respect to the x-axis, we need to somehow be able to know if y is positive or negative. We will use a prefix to distinguish positive and negative y.
02 indicates a positive y value.
03 a negative one.
But remember, we defined the curved not over the Euclidean plane, but on the finite field of prime order p. Here, the y coordinate is always positive. We distinguish between odd and even. Even values correspond to positive values when working over the Euclidean plane. Which means,
02 is used for even values, while
03 is reserved for odd values.
The old, uncompressed public keys are identified by the prefix
To sum this up. The public key, by definition, is an ordered pair representing a point in the curve. Old, uncompressed public keys are identified with the prefix
04 and contain both coordinates. The newer form to represent the public key is to use just the x coordinate, and the prefix is used not just to identify the key as a “compressed key“, but also to inform whether y is positive or negative.