The data behind ECC keys are numbers that graph a curve using an equation: $ y^2 = z^3 + Ax + B $ And an agreed-upon "generator" X,Y point on the curve. For example, `secp256k1` uses Generator point $A=0$ and $B=7$, giving us: $ \begin{align} y^2 & = z^3 + 0x + 7 \\ & = z^3 + 7 \end{align} $ The Private Key is just a secret number ($k$ -- a very large number), which that generator point gets multiplied by, yielding a new point ($P$). That new point is the Public Key. $ P = k \times G $ Variables for this: * $P$: Public Key point $(x, y)$ * $G$: Generator point $(x, y)$ * $k$: Private key number (scalar) So basically: $ PublicKeyXY = PrivateKey \times GeneratorXY $ It's not a simple matter of multiplying $G.X \times k$ and $G.Y \times k$. Instead, a [Point Multiplication](https://en.wikipedia.org/wiki/Elliptic_curve_point_multiplication#Point_multiplication) algorithm like **Double-and-add** is needed. This is really fast to compute, but the inverse: $ k = \frac{P}{G} $ is infeasibly slow, making it near-impossible to determine the Private Key for a given Public Key $(x, y)$ and a generator, particularly when using large numbers. Here's an example of what these values really look like: ``` Private key (k) = 1896210029587523673235534059566342111348873350953180246605090801317300429416071118492133488973633185117643667899428 Public key X (P.x) = 11955080011875801947143167170210257597950619449551741375614902271810826641322600871986272531089904595463635788387886 Public key Y (P.y) = 7955743933195102999097862967723910443024419264467030513387549320823099633244329839669516991481576026437937402559720 ``` You could conceivably just write down `k` on a post-it note and stick it behind the fridge and have a Private Key you could use for all sorts of things. This all means: * Fast computation * Small, compact storage * Low memory requirements * Improbably-difficult brute-forcing