数字货币钱包,需要澄清的是它并不是用来装钱的,也不是用来装比特币、以太坊。从技术上来说钱包就是用来存放私钥的工具,拥有了私钥就意味着你拥有了所对应地址上数字货币的支配权。
从比特币诞生以来,由于私钥保管不当所造成的钱包失窃现象屡见不鲜,其中影响最深的当属 Mt.Gox 交易所被盗一事,至今仍在影响着币圈价格的走势。在区块链生态与使用者中所发生的安全事件,交易所被盗与钱包失窃占有最大的比重,而交易所被盗也是由钱包私钥保管不当所致。因此,打造安全可靠方便易用的数字资产钱包至关重要。
01概念
钱包是作为提供用户界面的应用程序,起到控制用户访问权限,管理密钥和地址,跟踪余额以及创建和签署交易等功能。从技术方面来看,“钱包”是指用于存储和管理用户密钥的数据结构。交易信息被记录在区块链中,用户通过与他们的钱包中的密钥签署交易来控制网络上的数字货币。下面以比特币为例,介绍数字货币钱包中各项技术机理。
在比特币中,经常出现三个词:私钥、公钥和地址,他们经常被一同提起。一个比特币钱包中包含一系列的密钥对,每个密钥对包括一个私钥和一个公钥。私钥是一个数字,通常是随机选出的。有了私钥,我们就可以使用椭圆曲线乘法这个 单向加密函数产生一个公钥。有了公钥,我们就可以使用一个单向加密哈希函数生成比特币地址。三者的产生关系大致入下图所示。

通过非对称密码学的适用性可以使得任何人都可以验证每笔交易的每个签名,同时确保只有私钥的所有者可以产生有效的签名。
私钥
私钥是对一个比特币地址拥有取钱权限的代表,掌握了私钥就掌握了其对应地址上比特币的支配权。私钥可以算出公钥,公钥可以再算出比特币地址。每次交易的时候,付款方必须出具私钥,以及私钥产生的签名,每次交易签名不同,但是由同一个私钥产生。
支持比特币协议的应用都可以正确把这段字符串转换成比特币的私钥,再转换出公钥,再得到一个地址,如果该地址上面有对应的比特币,就可以使用这个私钥花费上面的比特币。
私钥本质上是一个随机数,由 32 个 byte 组成的数组,薇:HYQ991022  1 个 byte 等于 8 位二进 制,一个二进制只有两个值 0 或者 1。所以私钥的总数接近 2256 个,这个数量已经超过了宇宙中原子的总数,想要遍历所有的私钥,耗尽整个太阳的能量也是不可能的。私钥的安全是由数学保证,要想通过技术手段攻破,或许要等量子计算机技术的成熟。
公钥
通过椭圆曲线乘法可以从私钥计算得到公钥,这是不可逆转的过程:K = k * G 。其中 k 是私钥,G 是被称为生成点的常数点,而 K 是所得公钥。其反向运算,被称为“寻找离散对数”——已知公钥 K 来求出私钥 k——是非常困难的,就像去 试验所有可能的 k 值,即暴力搜索。因此私钥的所有者可以容易地创建公钥,然后与世界共享,知道没有人可以从公钥中反转函数并计算出私钥。这个数学技巧成为证明比特币资金所有权的不可伪造和安全的数字签名的基础。
公钥是用来验证私钥的签名,一般我们很少会看到公钥,使用私钥签名交易之后,会把自己的公钥一起和交易发送出去,这样对于一个完整的交易来说,他就使用交易里包含的公钥验证私钥的签名是否正确。
地址
比特币地址是一个由数字和字母组成的字符串,可以与任何想给你比特币的人分享。在交易中,比特币地址通常以收款方出现。如果把比特币交易比作一张支票,比特币地址就是收款人,也就是我们要写入收款人一栏的内容。支票不需要指定一个特定的账户,而是用一个抽象的名字作为收款人,这使它成为一种相当灵活的支付工具。与此类似,比特币地址使用类似的抽象,也使比特币交易变得很灵活。

地址的产生过程大致如上图所示,就比特币而言,一个私钥可以对应多个比特币地址。通常我们使用钱包转账是从一个地址转到另一个地址,也可以扫描二维码进行,像 EOS 则是账户之间的互转。
02原理
根据多个秘钥是否相关联,可以分为两种不同类型的钱包。第一种是非确定性钱包,其中每个密钥都是从随机数独立生成的,密钥彼此无关。另一种是确定性钱包,其中所有的密钥都是从一个主密钥派生出来,这个主密钥即为种子(seed)。该类型钱包中所有密钥都相互关联,如果有原始种子,则可以再次生成全部密钥。确定性钱包中使用了许多不同的密钥推导方法,最常用的推导方法是使用树状结构,称为分级确定性钱包或 HD 钱包。
非确定性(随机)钱包
在最早的一批比特币客户端中( Bitcoin Core,现在称作比特币核心客户端),钱包只是随机生成的私钥集合,这种类型的钱包被称作零型非确定钱包。从最开始就生成足够多的私钥并且每个密钥只使用一次。这种钱包现在正在被确定性钱包替换,因为它们难以管理、备份以及导入。随机密钥的缺点就是如果你生成很多私钥,你必须保存它们所有的副本。这就意味着这个钱包必须被经常性地备份。每一个密钥都必须备份,否则一旦钱包不可访问时,钱包所控制的资金就付之东流。下图展示的是一个非确定性钱包,其含有的随机密钥是个松散的集合。

这种情况直接与避免地址重复使用的原则相冲突——每个比特币地址只能用一次交易。地址重复使用将多个交易和地址关联在一起,这会减少隐私。当你想避免重复使用地址时,零型非确定性钱包并不是好的选择,因为你要创造过多的私钥并且要保存它们。虽然比特币核心客户端包含零型钱包,但比特币的核心开发者并不鼓励大家使用。
确定性(种子)钱包
确定性,或者“种子”钱包包含通过使用单项离散函数而可从公共的种子生成的私钥。种子是随机生成的数字。这个数字也含有比如索引号码或者可生成私钥的“链码”。在确定性钱包中,种子足够恢复所有的已经产生的私钥,所以只用在初始创建时的一个简单备份就足以搞定。并且种子也足够让钱包导入或者导出。这就很容易允许使用者的私钥在钱包之间轻松转移。

确定性钱包的最高级形式是通过 BIP0032 标准定义的 HD 钱包。HD 钱包包含以树状结构衍生的密钥,使得父密钥可以衍生一系列子密钥,每个子密钥又可以衍生出一系列孙密钥,以此类推,无限衍生。
相比较随机(不确定性)密钥,HD 钱包有两个主要的优势。
第一,树状结构可以被用来表达额外的组织含义。比如当一个特定分支的子密钥被用来接收交易收入并且有另一个分支的子密钥用来负责支付花费。不同分支的密钥都可以被用在企业环境中,这就可以支配不同的分支部门、子公司、具体功能以及会计类别。

第二,它可以允许让使用者去建立一个公共密钥的序列而不需要访问相对应的私钥。这可允许 HD 钱包在不安全的服务器中使用或者在每笔交易中发行不同的公共钥匙。公共钥匙不需要被预先加载或者提前衍生,而在服务器中不需要可用来支付的私钥。
种子与助记词
HD 钱包具有管理多个密钥和地址的强大机制。由一系列英文单词生成种子是个标准化的方法,这样易于在钱包中转移、导出和导入,如果 HD 钱包与这种方法相结合,将会更加有用。 这些英文单词被称为助记词,标准由 BIP-39 定义。 今天,大多数比特币钱包(以及其他加密货币的钱包)使用此标准,并可以使用可互操作的助记词导入和导出种子进行备份和恢复。
由于私钥长度达 64 位,可读性较弱,手抄比较麻烦,而备份到电脑中有被盗的风险。因此聪明的钱包商发明了助记词,利用特殊的算法可以将 64 位长度的私钥转换成十几个甚至二十几个英文单词。
生成原理:随机生成一个 128 到 258 位的数字,叫做熵;熵通过 SHA256 哈希得一个值,取前面的几位(熵长/32),记为 y;熵和 y 组成一个新的序列,将新序列以 11 位为一部分,已经预先定义 2048 个单词的字典做对应,生成的有顺序的单词组就是助记词。

私钥和助记词可以相互转换,因此助记词是私钥的另一种体现。目前很多钱包已经采用了助记词备份的方式,很多用户因不规范的助记词保存方式比如将助记词截图或保存到电脑中,遭遇了钱包被盗的事件。正确的保存方式是将助记词抄写到纸上,保存起来;或者可以通过一些加密手段,将助记词拆分后保存到不同地方,增强安全性。

点赞(0)

评论列表 共有 0 条评论

暂无评论

联系编辑

微信二维码

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部