比特币钥匙,地址

版权声明:本文为博主原创文章,转载请注明出处:https://blog.csdn.net/qq_31261509 https://blog.csdn.net/qq_31261509/article/details/79394147

比特币基础之钥匙,地址

翻译来自此处


比特币持有者拥有数字钥匙,比特币地址和数字签名。数字钥匙由公钥和私钥组成,比特币地址是公开的,数字签名是验证交易是否合法的依据。

公钥密码学和密码货币

比特币中,数字钥匙由公钥和私钥组成。公钥只能由私钥单向推出,比特币地址能够由公钥推出

如何实现单向推到,而不能由公钥推出私钥,也就是实现非对称性呢?

我们主要采取的方案是椭圆曲线密码学。
这里写图片描述
想要更详细的了解可以参看:https://zhuanlan.zhihu.com/p/26029199

椭圆曲线密码学中,
K = k*G
其中k表示私钥,K表示公钥。G表示在椭圆曲线上的一个点,对于所有的比特币使用者,G点在椭圆曲线上是相同的。
做一个简单的例子k=4,执行下列步骤四次,落在椭圆曲线上的最终点就是公钥K,也是一个点:

  • 做椭圆曲线在G点处的切线,与椭圆去线的交点为P。
  • 做P关于x轴对称的点即为新的G点

上述仅仅是简单的相加,但原理和实际上的是相同的。

比特币地址

比特币地址可以通过公钥导出,是公开的,由一系列数字以及字母组成。起始数字为”1”。

我们如何通过公钥推到出比特币地址呢?
比特币地址到推到用到了单方向哈希算法(one-way cryptographic hasing),
开始时候是公钥K,我们对它进行 SHA (Secure Hash Algorithm) 操作,然后进行 RIPEMD (RACE Integrity Primitives Evaluation Message Digest) 操作,分别声明为 SHA256 和 RIPEMD160,并且将公钥定义为 K,则地址为 A:

                A = RIPMD160(SHA256(K))

由公钥推出地址主要用到了SHA算法以及RIPEMD160算法产生了中间介质 A。中间介质 A 还通过Base58和Base58Check编码最终形成了比特币地址。

这里写图片描述


Base58 和 Base58Check 编码介绍


Base58Check 是 Base58 编码格式,被频繁的使用在比特币中,他建立在错误检测中。checksum 被添加在一个被编码的数据结尾的处。checksum是通过对数据哈希操作,它能够检测类型错误。当展示数据的Base58Check时,编码软件将计算数据的checksum并且进行比较它。如果两者不匹配,那么将出现Base58Check不正确的错误提示。这样就可以避免资金遗失。

为了转换数据到Base58Check格式,我们对数据data进行一下操作:

  • 我们首先在数据的前面添加一个前缀(prefix),被称之为版本。

  • 然后进行”double-SHA”,意味着我们对其进行两次SHA256操作

           checksum = SHA256(SHA256(prefix+data))
    

而结果将产生 32-byte 哈希,但是我们仅仅取它前面的开始的 4 Bytes。这里的 4 Bytes 作为 错误检测。并且它被链接在结尾处。
而结果包含三部分:前缀,数据,和检验和。并且它被编码成Base58。下图介绍了具体例子:
这里写图片描述

在比特币中,大部分数据表示了展现形式是Base58Check-encoded -一个可比较,并且能够容易发现错误的形式。Base58Check地址 的版本前缀以及具体展现如下图:

Type Version prefix(hex) Base58 result prefix
Bitcoin Address 0x00 1
Pay-to-Script-Hash 0x05 3
Bitcoin Testnet Address 0x6F m or n
Private Key WIF 0x80 5, K, or L
BIP-38 Encrypted Private Key 0x0142
BIP-29 Extended Public Key 0x0488B21E xpub

私钥格式


并且私钥也有不同类型的编码格式。

公钥格式


正如我们之前见到的,公钥是一个在椭圆曲线上的一个点。它通常的表现形式是以 04 前缀开头,并且紧跟着两个 256-bit 数据。一个是x,另一个是y。前缀 04 被用来区分以前缀 02 或者 03 开头的未被压缩的公钥。

压缩公钥

如果我们知道了公钥的 x 轴坐标,通过 y2 mod p = (x3 + 7) mod p,我们可以推断出其 y 轴的坐标。 但是我们如何判断 y 的正负号呢?也就是刚开始我们将 y 的正负号存储起来。由于 y 在模p有限域上有奇偶2个取值,判断 y 的奇偶比 判断正负号更加的方便。于是前缀为 02 则表示 y 为偶,03 则表示y为奇。

这里写图片描述

压缩私钥

有待更新

高级钥匙以及地址

编码私钥(BIP-38)

–未完待续

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试