手工客

关注公众号 shougongke

关闭
手工客 > 区块链 > 正文

比特币公钥是什么?比特币公钥生成原理是什么?

了解比特币的币友都知道,比特币是一种加密数字货币,主要是因为比特币有着密钥用来保护自己的比特币不被盗,而比特币密钥分为比特币私钥和比特币公钥,其中比特币公钥用来加密并且是可以公开的,说道这里,币圈小白就要问了,比特币公钥是什么?比特币公钥生成原理又是什么?别急,接下来手工客小编就来为币圈小白们解答。

比特币公钥定义

公钥是将私钥通过一个椭圆曲线乘法(K = k * G ,其中k是私钥,G是被称为生成点的常数点,而K是所得公钥)的算法计算得来,是真正的比特币地址。

在比特币系统中,一个密钥对包括一个私钥,和由其衍生出的唯一的公钥。公钥用于接收比特币,而私钥用于比特币支付时的交易签名。

比特币公钥是什么?比特币公钥生成原理是什么?

公钥和私钥之间的数学关系,使得私钥可用于生成特定消息的签名。此签名可以在不泄露私钥的同时对公钥进行验证。

比特币公钥生成原理是什么?

有了私钥,再通过椭圆曲线算法,就可以产生出公钥啦!这个私钥和公钥是配对的!

比特币公钥是什么?比特币公钥生成原理是什么?

椭圆曲线的定义非常简单,满足下面公式的所有(x,y)坐标的集合,就是我们所说的椭圆曲线y^2/modp=(x^3/+7)/modp

上面公式中,mod是取余符号,而p是一个很大的素数,到这一步,公式中就只剩下自变量x和因变量y了,你完全可以把它看成初中学过的二元多次函数,不过,并不是所有实数x都满足这个曲线,所以实际上椭圆曲线是一个散点图,下图是当p为17时,满足上述公式的图形:

比特币公钥是什么?比特币公钥生成原理是什么?

spec256k1 椭圆曲线

实际上,p取不同的素数,椭圆曲线会呈现出完全不同的形态,p越大,这个椭圆也就越大,可承载的数值范围也就越大,冲突率会降低,乃至于更安全,所以出于安全性考虑,比特币中采用的是一个特定的椭圆曲线,我们叫它 spec256k1.它是由 NIST(National Institute of Standards and Technology)这个组织确定的。

刚才说p是一个很大的素数,那么 spec256k1 所选的p有多大呢?我们可以看一下

P=115792089237316195423570985008687907853269984665640564039457584007908834671663

这个p可以确定一个椭圆,我们再在其中取一个点(x,y)

X=55066263022277343669578718895168534326250603453777594175500187360389116729240

Y=32670510020758816978083085130507043184471273380659243275938904335757337482424

把该点中的x和y带入上面的公式中,看等式两边是否成立:

Python 2.7.10 (default, Jul 15 2017. 17:16:57)

[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>>x=55066263022277343669578718895168534326250603453777594175500187360389116729240

>>>y=32670510020758816978083085130507043184471273380659243275938904335757337482424

>>>p=115792089237316195423570985008687907853269984665640564039457584007908834671663

>>> (x**3+7)%p - y**2%p

0L

上面是我用Python算出的结果,可以看到时符合预期的。

椭圆曲线运算

上面我们已经认识了椭圆曲线,它看上去很有趣,但我觉得更有趣的是椭圆曲线的运算,公钥的算法就是运用了这些基本运算:

加法运算

无限点(point at infinity)定义

乘法运算

阅读全文