{K = k * G}
其中 k 是私钥,G 是生成点,在该曲线上所得的点 K 是公钥。因为所有比特币用户的生成点是相同的,一个私钥 k 乘以 G 将得到相同的公钥 K。k 和 K 之间的关系是固定的,但只能单向运算,即从 k 得到 K。这就是可以把比特币地址(K 的衍生)与任何人共享而不会泄露私钥(k)的原因。
因为其中的数学运算是单向的,所以私钥可以转换为公钥,但公钥不能转换回私钥。为实现椭圆曲线乘法,我们以之前产生的私钥 k 和与生成点 G 相乘得到公钥 K:
K = 1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD * G
公钥 K 被定义为一个点 K = (x, y):
K = (x, y)
其中,x =
F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF57 9DC341A
y = 07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2 E505BDB
为了展示整数点的乘法,我们将使用较为简单的实数范围的椭圆曲线。请记住,其中的数学原理是相同的。我们的目标是找到生成点 G 的倍数 kG。也就是将 G 相加 k 次。在椭圆曲线中,点的相加等同于从该点画切线找到与曲线相交的另一点,然后映射到 x 轴。
大多数比特币程序使用 OpenSSL 加密库进行椭圆曲线计算。例如,调用 EC_POINT_mul() 函数,可计算得到公钥。