比特币钱包:核心钱包与轻钱包

钱包,是属于比特币系统中的一个前端工具,其最基本的功能就是 用来管理用户的比特币地址、发起转账交易、查看交易记录等,在这方 面与我们生活中使用的钱包是类似的。一开始的比特币钱包是跟比特币 核心客户端一起发布的,前面介绍比特币核心客户端的时候已经初步 做了了解,这个钱包是比特币核心钱包,其使用过程必须要配合完整的 区块链数据副本,因此一般也只适合在桌面端使用。

我们在使用比特币钱包的时候,经常会遇到一个名词:比特币地 址。通过钱包转账就是将比特币从一个地址转移到另外一个地址,暂且 不论这个转移的过程是什么样的,那这个地址到底是什么意思,它又是 通过什么来产生的呢?我们先来看一组名词关键字:私钥、公钥和钱包 地址。

私钥与公钥来自公开密钥算法的概念,我们常说比特币是一种加密 数字货币,之所以这么说,是因为比特币的系统设计中巧妙地使用了现 代加密算法,而其中一个运用就是生成比特币地址,比特币地址的生成 与公开密钥算法密切相关。什么叫公开密钥算法呢?传统的加密算法, 其加密和解密方法是对称的,比如凯撒密码,通过将字母移位来加密, 比如字母a替换成c,b替换成d,d替换成f这样,本来是abc的单词就变成 了cdf,然而这种加密算法一旦泄露,别人也就知道了解密算法,换句 话说,只有一个密钥。针对这种问题,公开密钥算法就应运而生,而公开密钥算法属于一种不对称加密算法,拥有两个密钥:一个是私钥,一 个是公钥。公钥可以公开给别人看到,私钥必须要妥善保存,使用私钥 加密(通常习惯上将私钥加密称为“私钥签名”)的数据可以用公钥解 密,而使用公钥加密的数据可以用私钥解密,两者是互相匹配的。目前 使用比较广泛的公开密钥算法主要有rsa算法和椭圆曲线加密算法 (…口,rsa是利用了素数分解难度的原理,ecc是利用了椭圆曲线 离散对数的计算难度,比特币中使用的是椭圆曲线加密算法。

接下来,我们就来看下比特币地址是怎么生成的,为了直观展示, 我们看一幅示意图:

比特币地址是怎么生成的

这便是比特币地址的生成过程,过程大致是这样的。

  • 首先使用随机数发生器生成一个私钥,私钥在比特币中的作用 非常重要,可以用来证明用户的身份,也可以签发交易事务。

  • 私钥经过SECP256K1算法处理生成了公钥,SECP256K1是一种特定的椭圆曲线算法,需要注意的是,通过算以从私钥生成公钥, 但是却无法反向从公钥生成私钥,这也是公钥为什么可以公开的原因。

  • 公钥接下来先使用SHA256哈希算法计算,再使用尺RIPEMD160 哈希算法计算,计算出公钥哈希。比特币的代通过2次哈希来计算地 址值,这样能进一步确保哈希后的数值唯一性,进一步降低不同数据进 行哈希后相同的概率与SHA256—样,RIPEMD160也是一种哈希算法。

  • 将一个地址版本号连接到公钥哈希〔比特币主网版本号为 0x00〕,然后对其进行两次SHA256运算,将计算得到的结果取前面4字 节作为公钥哈希的校验值。

  • 将0x00版本号与公钥哈希以及校验值连接起来,然后进行BASE58编码转换,最终得到了比特币地址。

以上便是比特币地址的生成过程了,我们可以发现比特币的地址其 实就是通过公钥转化而来的,将上图简化一下,就是下面这么一个过 程:

比特币地址的生成过程简化图

所以,在比特币系统中,本质上并没有一个叫作“地址”的东西,因 为“地址”是可以通过公钥转化而来的,可以理解为公钥的另外一种形 式,而公钥又是可以通过私钥计算出来的,因此在比特币钱包中,真正 需要妥善保存的是生成的私钥数据,这玩意可千万不能弄丢了,一旦丢 失,那可比忘记银行卡密码还麻烦。比特币钱包的主要功能就是保管私 钥。

比特币的核心钱包是跟核心客户端在一起的,可以完成创建钱包地 址、收发比特币、加密钱包、备份钱包等功能,由于核心钱包是与核心 客户端在一起使用的,因此在进行转账交易时,可以进行完整的交易验 证,当然付出的代价就是必须得带上那么大量的账本数据,到2017年8 月份这份数据已经超过了 13068,而且还在持续不断地增长中,因此并 不方便用户的实际使用,实际上除了这一点不方便外,在私钥管理上也 有麻烦的地方,通过官方的核心钱包可以无限制地创建自己所需数量的 钱包地址,然而这些地址对应的私钥管理也就成了问题,如果不小心损 坏了某一个私钥数据,那就找不回来了,基于这些问题,发展出了新的 解决方案。

很多时候,我们在进行支付的时候,只是想通过一个支付验证,知 道支付已经成功发起就可以了。对于完整的交易验证(需要在完整的账 本数据上校验,比如是否包含足够的余额,是否双花等)可以交给核心 节点,这样就可以将钱包功能部分剥离出来,由此产生了spv钱包,事 实上这个概念在比特币白皮书中就介绍过了,我们来看下它的原理是什 么,spv钱包的大致过程如下所示。

  • 首先下载完整的区块头数据,注意是区块头,而不是所有的区 块链数据,这样可以大大减少需要获取的账本数据量,区块头中包含有 区块的梅克尔根,spv方式主要就是靠它来实现的。

  • 如果想要验证某笔支付交易,则计算出这笔交易事务的哈希值txhash

  • 找到txhash所在的区块,验证一下所在区块的区块头是否包含 在账本数据中。

  • 获得所在区块中计算梅克尔根所需要的哈希值。

  • 计算出梅克尔根。

  • 若计算结果与所在区块的梅克尔根相等,则支付交易是存在的。

  • 根据该区块所处的高度位置,还可以确定该交易得到了多少个 确认。

我们看到了,spv原理的钱包就是使用了梅克尔树来验证支付是否 已经发生,这也是为什么称之为简单支付验证的原因,不过我们也可以 发现,支付验证所做的事情很少,仅仅能看到当前的支付交易是否被发 起而已,并不能保证这笔交易事务最终会进入到主链中,也就是说还需 要等待核心节点进行全面的交易验证并且矿工打包到区块后进入主链。 在这个过程中是有可能发生失败的,所以spv钱包虽然带来了便捷性但 也牺牲了安全性。时至今日,已经出现了各种各样的比特币钱包,在 他bitcoin.org网站上我们可以一见端倪:

我们可以看到有各种类型的钱包可以使用,大家在选用自己的钱包 时,务必了解清楚钱包的功能和来源,以免遭受损失。

接下来我们再来介绍一种管理多个私钥的钱包技术,即分层确定性钱包,有时也简称为好的wallets,

这个在比特币开发的bip32中有专门的建议论述。简单地说,分层确 定性钱包具有如下的特点。

  • 用一个随机数来生成根私钥,这与任何一个比特币钱包生成私 钥没有区别;

  • 用一个确定的、不可逆的算法,基于根私钥生成任意数量的子

私钥

比如比特币中使用的SHA256就是一个确定不可逆的算法,可以很 容易使用SHA256设计出一个90模型:SHA256 ,这个就算

而制定的不同实现方法,基本原理都是类似 的。

所谓的分层,除了私钥由主私钥来生成逐层的私钥以外,公钥也 样,通过主公钥生成所有的子公钥。实际上,生成的密钥本身,都可以 作为根来继续生成子密钥,这就是所谓的分层了。注意,这里通过公钥 生成子公钥,不需要私钥的参与,无论是主私钥还是子私钥都不需要参 与。我们来看下示意图,如下:

blob.png

2〕可以保证主私钥的冷存储,无论增加多少个地址,只需要主公 钥就可以了。

3〕方便审计,只需要提供主公钥或者某个分支的子公钥,就可以 查看下级的数据而又保证不能被交易。

4〕有了这棵树,还可以配合权限,设定不同层级的权限,能查看 余额还是能交易等。当然啦,便捷性往往都是要牺牲安全性的,缺点很 明显,这种钱包,由于私钥之间是具有固定关系的,不那么随机了,因 此只要暴露任何一个私钥,再加上主公钥做关联分析,就很有可能使整 个树状密钥结构都泄露。


玖壹区块链声明

加微信:469649885区块链培训教程
还可免费获取区块链培训班试学名额

分享:

扫一扫在手机阅读、分享本文

区块链评论

玖壹区块链培训

玖壹区块链培训学院简称(玖壹学院http://www.91xiubbs.com/)提供区块链技术培训资料、区块链开发培训视频教程等下载,不过网上自学区块链技术课程必然存在一些缺陷:遇到问题易卡壳、学习周期漫长、无针对性等。区块链培训机构现场面对面的讲授区块链培训课程可以让您和团队在最短时间内掌握正确、系统、高效的区块链实战技术。