新闻资讯

比特币账户私钥、公钥、地址的生成

来源:新2-新2备用-新2网址发布时间:2020-01-15 06:49:13浏览:66

  由上一篇ECC算法笔记记录的公钥生成方式:K = k * G :

  私钥 k 通常是随机选出的一串数字串(经过sha256加密),然后通过ECC算法来产生一个公钥(K),最后通过单项Hash算法来生成Bitcoin地址。

  地址是为了人们交换方便而弄出来的一个方案,因为公钥太长了(130字符串或66字符串)。地址长度为25字节,转为base58编码后,为34或35个字符。base58是类似base64的编码,但去掉了易引起视觉混淆的字符,又在地址末尾添加了4个字节校验位,保障在人们交换个别字符错误时,也能够因地址校验失败而制止了误操作。

  由于存在公钥有两种形式,那么一个公钥便对应两个地址。这两个地址都可由同一私钥签署交易。

  存在三种密钥,并且都是使用Base58Check编码成 ASCII 码呈现:

  4. 取上一步结果,前面加入地址版本号(比特币主网版本号“0x00”):

  6.取上一步结果的前4个字节(8位十六进制)

  7.hash of public key,把这4个字节加在第4步的结果后面,作为校验(这就是比特币地址的16进制形态)

  最终给用户使用的:用base58编码变换一下地址(这就是最常见的比特币地址形态)

  本质上私钥就是一串随机选出的 256 个 bit 的 01 数字(32 字节 * 8 = 256 bits),但是这串数字却控制着你的比特币账号的所有权,因此这串数字相当重要,要具有足够的随机性,一般采用密码学安全的伪随机数生成器(CSPNG),并且需要有一个来自具有足够熵值的源的种子(seed)。

  比特币客户端软件使用Secp256k1ECDSA 标准生成椭圆曲线,使用椭圆生成一个私钥,然后再从私钥中生成对应的公钥。

  如果自行选取简单的123456密码,最终生成的账户可是“公交车账户”了哈哈。

  Bitcoin 的公钥是通过 椭圆曲线密码学算法(K = k * G)来生成,其中公式中的:

  Bitcoin 使用了 secp256k1 标准定义的一种特殊的椭圆曲线和一系列的数学常量。

  如上公式,以私钥 k 为起点,与预定的生成点 G 相乘来生成公钥 K,并且因为所有 Bitcoin 用户的生成点 G 都是相同的(常量),所以由一个确定的私钥 k 生成一个确定的公钥 K,并且是单向的。

  简单来说,对于压缩公钥生成地址时,则只取非压缩公钥的X部分即可。

  从上面的输出示例中可以看到 public key 一共有 130 个 16 进制的字符,共 520 个字节,其中的前缀为04,这里的 04 表示该公钥为非压缩格式,即完整存储了 x 和 y 坐标(各 256 个 bits),但是从 secp256k1 的椭圆曲线方式可以看到,只要知道其中一个坐标值,另外一个坐标值都是可以通过解方程得出的,因为可以只存储其中一个坐标,这样就可以节约 256 个 bits,从而引入了压缩格式的公钥。

  上面的 04 前缀表示非压缩格式,如果为压缩格式,则前缀为02或03,有两个前缀主要是因为方程(y = x + ax + b)的左侧的 y 为平方根,可能为正或者为负。

  如下为一个与上面示例对应的压缩格式的公钥值:

  公钥哈希就是大家看到的比特币地址,大部分比特币地址由公钥通过 base58Check 编码而来,把公钥地址从 512-Bit 哈希到 160-Bit ,但并不是所有的比特币地址都是公钥推导出来,也有可能是通过脚本建立在比特币网络中的虚拟币(比如彩色币)的脚本标识。

  我们通常看到的 Bitcoin 地址都是经过 Base58Check 编码后的地址,Base58Check 编码也用于私钥,加密的密钥以及脚本中,用来提高可读性和录入的正确性。

  下图描述了通过 公钥生成 Base58Check 编码格式的地址的整个过程:

  (摘自 wiki)相比Base64,Base58不使用数字0,字母大写O,字母大写I,和字母小写l,以及+“和”/符号。

  为了进一步增加安全性,Base58Check 格式又在 Base58 的基础上新增了内置检查错误的校验和(checksum),该校验和是添加到末尾的额外 4 个字节,校验和的生成算法如下:

  其中 私钥 的前缀为 128(即 0x80),对应的编码后前缀为 5,如下为我们的私钥编码后的:

  下面为公钥以及生成的 Base58Check 格式的地址信息:

  因此实际上在 bitcoin 中大多数需要向用户展示的数据都是使用的 Base58Check 编码格式。

  学习 btc 钱包私钥、公钥和地址的生成过程

 
新2-新2备用-新2网址