公钥是什么

公钥(Public Key)是使用椭圆曲线乘法从私钥(私钥是什么)计算得来的,这是一个不可逆的过程:K=k×G,其中,k是私钥,G是一个常数点(被称为生成点),K是计算结果,即公钥。其反向操作被称为“查找离散对数”——已知K,求k,其难度与尝试所有k的可能值的难度差不多,也就是说,与暴力求解基本等同。在演示如何从私钥生成公钥之前,我们先仔细看一下椭圆曲线加密算法

生成一个公钥

从一个密钥(形式上是一个随机生成的数字k)开始,我们将它与曲线上预定义的点相乘,可以得到曲线上的另一个点,这就是相应的公钥K,而这个预定义的点叫作生成点G。生成点是作为secp256k1标准的一部分定义的,对于比特币而言,其所有密钥均使用相同G点。

K=k×G

这里,k是密钥,G是生成点,K是生成的公钥,也是椭圆曲线上的一个点。由于生成点对所有比特币用户来说都是一样的,一个密钥k与G相乘后总能得到相同的公钥K。k与K之间的关系是固定的,但是只能从k到K进行单向计算。这也是比特币地址(从K衍生而来)可以与任何人共享,却不会暴露用户私钥(k)的原因。

私钥可以转换为公钥,但是公钥不能转换回私钥,因为从数学的角度,这种计算是单向的。

为实现椭圆曲线乘法,我们使用之前生成的私钥k,与生成点G相乘,以获得公钥K:

blob.png

公钥K定义成一个点K=(x,y):

K=(x,y)

where,

blob.png

为了形象化演示一个点与整数的相乘,我们使用一个简单的基于实数的椭圆曲线——记住,实数与整数在数学上都是一样的。我们的目标是找到生成点G的倍数kG。也就是G相加k次。在椭圆曲线中,一个点与其自身相加等同于在这个点上画一条切线,找到切斜与曲线相交的点,相交点相对x轴对称的点就是我们要找的点。

 

868区块链学习网为您整理《公钥是什么》仅供参考。