所有了解比特币的钱币爱好者都知道,比特币是一种加密的数字货币,主要是因为比特币有一个密钥来保护自己的比特币不被窃取,比特币密钥分为一个比特币私钥和一个比特币公钥,其中比特币公钥用于加密,可以公开。说到这里。币圈小白要问了,比特币公钥是什么?比特币公钥生成的原理是什么?唐';t别急,接下来小编会为币圈小白们解答。
比特币公钥的定义
公钥是私钥乘以椭圆曲线(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(国家标准和技术研究所)确定的。
刚才P是一个大素数,那么spec256k1选P有多大呢?我们可以看看
p=115792089237316195423570985008687907853269846564056403945758400790834671663这个p可以确定一个椭圆,我们可以在里面取一个点(x,y)
。x=5506626302227734366957871889516853432625060345377594175500187360389116729240y=32670510020758816978083085130507043184471273380659243275938904335757337482424把这个点上的x和y带入上面的公式,看看等式两边是否成立:
python2.7.10(默认2017.15.7:17:16:57)
。[XY001]onDarwin [AppleLLVM9.0.0(clang-900.0.31)compatiblewithGCC4.2.1].Formoreinformation,typeHelp,Copyright,QuotaorLicense.
x=550662630222773436695787188951685343262506034537594175500187360389116729240
y=3267051002075881697808308513050704318447127338065924327593890433575333373737482424
p=11579208923731619542357085008687970785326984656405640394575840790834671663[xy
(x**37)%p-y**2%p
0l
以上是我用Python计算的结果,看到的时候符合我的预期。
椭圆曲线运算
上面的椭圆曲线我们已经知道了,看起来很有趣,但是我觉得椭圆曲线的运算更有趣。公钥的算法使用这些基本运算:
加法运算
。无穷远点定义
乘法运算