先说说什么是“钱包”,一般我们理解的钱包是这样的
钱包
这里的钱包最主要的功能是:存放现金
那区块链钱包一样么?
区块链“钱包”其实和我们理解的钱包不是一回事。哪里不一样呢?首先,“钱包”里面是没有钱的,那我们钱包里有什么?区块链“钱包”里存的其实是私钥(这个后面说)。从这点来看,区块链钱包更像银行存折,存折里没有钱,但是存折上有余额和所有交易记录,存折里有多少钱,要问银行:“我卡上有多少钱?”。为什么会这样呢?因为银行保存有账本,你有多少钱,要查下账本上,你的卡里有多少钱才知道。
银行查账
那么区块链是怎样的呢?
分布式节点
如图所示,一个典型的去中心化的分布式节点,每个节点都独立的维护自己的账本,每个节点依靠“共识”来记账,保证每人手上的账本都是真实的,无法篡改的,并且账本数据都是一样的。这个时候,你想看看你的钱包余额有多少,直接看自己账本上自己钱包地址对应的余额就行,也可以去网络中任何一个可信节点查询账本数据。
如果我想实现转账(花钱)怎么办?
这点和银行汇款就很像了,先写我(Alice的钱包地址)转账给(Bob的钱包地址)10个币,就行了,那么要是别人写了转我的钱怎么办?别怕,和银行一样,这里要用你自己的私钥签名,这样就能保证只有你才能“花”你的钱。
到这里,我们已经接触到了私钥、钱包地址、交易等等概念,我们来看看怎么回事。
根据secp256k1加密算法(一种椭圆曲线加密算法)可以用私钥推导出公钥(其实就是密钥对),在用公钥哈希推导出钱包地址,但是钱包地址无法反推出公钥,这样,只要我们掌握了私钥,就什么都有了。可见私钥非常非常重要。私钥可以理解为银行存折密码,密码丢了,钱就没有了。
现在我们因该能理解我们遇到的第一种钱包了:全节点钱包(全功能节点钱包)这种钱包不直接对外提供接口,理论上最安全,但是缺点也很明显,必须要维护巨大的区块链数据(账本)并且数据必须同步到最新,否则会导致无法查询交易状态,甚至无法交易等情况出现。
有的同学说我就想查帐,转帐,还要这么复杂,有没有方便点的方法呢?这时候,该轻钱包出场了。
顾名思义,轻钱包不用维护巨大的区块数据,轻钱包只要保管私钥,签名交易,然后将签好名的交易发送到信任的全节点就行了。当然,这里需要有诚实的全节点开放这个功能,愿意提供代发交易的服务。如果将交易信息发到恶意节点,会有潜在风险。
还要谨防一种伪装成轻钱包的钱包。这种钱包从使用上来看好像是轻钱包,但是实际上私钥都是保存在节点服务器上,只要节点愿意,可以随时拿到私钥。
安全的交易方式 不安全的交易方式
如图所示,两种钱包虽然发送交易的流程完全一样,但是私钥保存的方式不一样,会导致严重的安全问题。
说了那么多你因该明白了,区块链钱包其实是个用来管理私钥的管理程序。
按照管理私钥的方式,钱包又能分为非确定性钱包和确定性(种子)钱包。
详见深入浅出 HD 钱包基本原理
比特币早期的钱包客户端 Satoshi Client 里面会自动随机生成 100 个私钥、公钥对,这些私钥之间完全没有关联,这种钱包也叫做随机钱包(Random Wallet)或者非确定性钱包(Non-Deterministic Wallet),钱包的备份和恢复必须针对每个私钥进行。或者说,钱包的作用就是管理100个甚至更多的公私钥对,可以想象,这个管理过程是非常繁重,每次备份,必须备份所有有余额的公私钥对,并且非常不方便记忆。好处是每个公私钥对都是独立的,任何一个公私钥对泄露或者遗失,不会对其他公私钥对产生影响,安全性非常高。
为了方便私钥管理,就有了确定性钱包(Deterministic Wallet)和现在普遍被大家接受的分层确定性钱包(Hierarchical Deterministic Wallet)。
HD wallet
如图所示,这种树状结构的公私钥对管理方式优势特别明显,所有的child keys 和 grandchild keys都可由seed推导得出。所以我们只需要记住seed就可以了。同样,这种“方便的”私钥管理方式的缺点也很明显,如果seed一旦泄露,所有的账号都会被泄露。并且特别重要的一点,不光seed泄露会导致损失全部钱包资产,任何一个子私钥,加上主公钥,就能反推出主私钥,这个是特别致命的。所以在HD钱包的使用上,需要特别慎重!
网友评论