了解比特币的币友都知道,比特币是一种加密数字货币,主要是因为比特币有着密钥用来保护自己的比特币不被盗,而比特币密钥分为比特币私钥和比特币公钥,其中比特币公钥用来加密并且是可以公开的,说道这里,币圈小白
了解比特币的币友都知道,比特币是一种加密数字货币,主要是因为比特币有着密钥用来保护自己的比特币不被盗,而比特币密钥分为比特币私钥和比特币公钥,其中比特币公钥用来加密并且是可以公开的,说道这里,币圈小白就要问了,比特币公钥是什么?比特币公钥生成原理又是什么?别急,接下来币圈子小编就来为币圈小白们解答。
比特币公钥定义
公钥是将私钥通过一个椭圆曲线乘法(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)定义
乘法运算
本站声明:本文内容来源于币圈子,如有侵权,请联系我们,我们将及时处理。
原创文章,作者:币圈吴彦祖,如若转载,请注明出处:https://www.kaixuan.pro/news/426216/