上个月OKEx突然暂停提币,让所有OK投资者当了整整7周的欢乐持豆人;作为小额受害者之一的我也开始学习冷钱包相关知识,毕竟私钥攥在自己手里,币才像是自己的。兜兜转转学了一圈,发现我所使用的比太钱包每次收款后都会变个地址,不禁让人有些好奇...仔细研究发现是HD钱包在暗中作祟,看来如今玩币可不能靠中学玩币的知识储备了,得与时俱进才行!

HD钱包本身并没什么亮点,但提到HD钱包之前不得不提及助记词:

本文不构成任何投资建议,请各位注意市场风险。

BIP39引入的助记词机制

助记词是BIP39中为了使私钥更加容易保存、更human friendly而提出的一个概念,通过在1024个助记词组成的助记词库中随机生成的有序助记词序列可产生唯一可确定的种子,并供HD钱包所用。

太长不看系列

助记词库是一张索引与内容一一对应的二维表,可以在https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt查看;

助记词规则:

  • ENT(Entropy)位数为128~256之间的所有32的倍数;
  • checksum位数 = ENT位数 / 32,即checksum位数为4,5,6,7,8中的一个;
  • 助记词(Mnemonic Sentences,MS)个数由(ENT位数 + checksum位数) / 11决定,即12,15,18,21,24中的一个;

随机助记词的产生过程:

  • 随机生成ENT;
  • 取前checksum位的ENT做一遍checksum,将结果拼接在ENT后;
  • 将拼接后的结果顺序拆分为助记词个数那么多个,其中每11位对应一个助记词;

所有组合的结果如下:

熵的位数checksum位数熵+checksum位数助记词个数
128413212
160516515
192619818
224723121
256826424

图示如下(以128位熵、4位checksum和12个助记词为例):

img

可以发现,助记词生成的随机性关键在于生成的熵是否随机,随后的步骤使用到的均为确定性算法;以比太钱包为例,其在生成助记词时调用的XRandom会要求用户随机摇晃收集、开启摄像头采集画面以为随机生成ENT提供足够的熵。

有了助记词之后,只需要将助记词与盐(由mnemonic一词+可选的密码组成)送入PBKDF2函数即可推算出种子;期待的种子位数为512位,其中前256位为主私钥(Master Private Key),后256位为主链码(Master Chain Code),用于随后提及的HD钱包中推导其他的Private Key;

助记词有一个特点:至多4个字母就可以确定词库中的一个助记词,意味着你够心大的话只需要记住助记词的前四个字母,这也是市面上助记板类产品大多只预留了4个字母位置的原因,智能的钱包软件在你输入3~4个字母后会为你补全;

img

对投资者而言有用的

  1. 牢记助记词 = 密码+Keystore = 私钥 = 你的数字资产控制权!
  2. 慎用非开源钱包,有条件的自行下载源码、检查、编译、安装钱包!
  3. 大额资产存放在冷钱包!

冷钱包

所谓冷钱包,泛指私钥不接触外部环境的数字资产钱包,与我们日常使用的热钱包相对应;知名的冷钱包软件有比太(BTC)imToken(冷钱包功能只支持ETH)等,通过将这些应用安装在开启飞行模式的备用手机上就能将离线手机当做冷钱包使用;它们的缺点是由于开发者们大多用爱发电,各做各的,每一个币种都需要独立的App来管理。市面上如Ledger这类公司将冷钱包独立为硬件钱包,同时支持使用一组助记词管理多币种多账户,受到不少投资者追捧。

使用冷钱包的流程大差不差,一般地都分为观察钱包与冷钱包两部分,下面以软件冷钱包为例:

  • 冷钱包随机生成助记词,要求用户输入密码、记录助记词、验证助记词
  • 观察钱包扫描冷钱包二维码,从而获取地址,进而查询其对应余额、交易等信息;
  • 每当需要交易时,观察钱包生成交易信息以二维码形式展现,冷钱包启动摄像头扫描观察钱包上的交易信息,输入密码后为交易签名,将签名后的交易展现在冷钱包屏幕上;
  • 观察钱包扫描冷钱包签名后交易信息,将交易广播至区块链。

尽管冷钱包机制看似无懈可击,但使用不开源的冷钱包产品还是会有以下风险:

  • 冷钱包生成助记词的方式不随机,导致助记词泄露
  • 冷钱包在生成交易签名时故意将私钥泄露给观察钱包,给开发者获取私钥提供了可能;
  • 冷钱包用声音、光、震动等奇奇怪怪的方式泄露私钥...

HD钱包

HD钱包(Hierachical Deterministic Wallet), 是BIP32/44提出并优化的一种钱包机制,其允许用户通过一个种子按规则衍生出无数地址(公钥)及对应私钥,为单助记词多账户多币种提供了理论依据,HD钱包也被广泛运用在其他币种上。

HD钱包的一大特点是其拥有海量地址,HD钱包软件通常在某地址收到付款后就更换展示的主地址,将收款过的地址雪藏起来。HD一词中的Hierarchical暗示由主私钥按规则可推算出子私钥、孙私钥,从而理论上对应无限个地址。由于HD钱包的特性,在链上你只能一次查看一个地址所拥有的资产,因此当你使用HD钱包与他人交易时,他人通过你给的一个地址不可能了解你整个HD钱包的资产状况。

HD钱包对BTC这类UTXO币种而言还有额外意义:UTXO(Unspend Transaction Output)模型意味着,整个区块链只记录交易本身,而不记录交易结果。这样的机制原生不提供余额功能,要查看一个地址的余额只能通过在链上查找与它发生关联的所有交易实现,这引入了一个问题:我们不可能要求每个地址的每一笔花费都花完地址的所有余额,那所谓的找零要如何处理呢?在传统钱包中,余额为1BTC的A向B转账0.5BTC的交易中实际上有一个输入(A -1BTC)、两个输出(A +0.5BTC B +0.5BTC);在HD钱包中,假设A、C为同一种子按HD钱包规则生成的两个地址,那么在HD钱包中,这个交易就变为了(A -1BTC)、(A +0.5BTC C +0.5BTC);

Q & A

  • HD钱包收款后要如何支付呢?

HD钱包会记录收款后的地址,每次需要支付时会用地址对应的私钥签名交易;同时由于多数币种的交易支持多个输入输出,理论上说使用HD钱包转账会面临比普通确定性钱包转账更高的矿工费(交易中多出了不少地址信息,导致交易变大)

  • 向已经收过款的旧地址转账的BTC就不属于我了吗?

HD钱包设计初衷就是为了不让你在多次交易中使用同一个地址,但由于种子还在你手中,你还是拥有你使用过的所有旧地址的控制权。

  • HD钱包提高了BTC交易的匿名性,违法犯罪分子狂喜?!

同上,尽管地址一次一换看上去是提高了匿名性,但数字货币->法币的这条路还是给你堵得死死的:所有想活命的交易所内部都建立了违法犯罪相关的黑名单地址库,就算只知道你HD钱包的地址之一,但只要该地址有任何风吹草动,执法部门就可以开始干活啦!

Last modification:December 3rd, 2020 at 07:36 pm
If you think my article is useful to you, please feel free to appreciate