什么是硬件钱包

在说硬件钱包之前,我们先从区块链地址说起。

什么是区块链地址?从中我们能理解到区块链地址是根据非对称加密算法,生成私钥和公钥,从公钥根据一系列的计算推导出地址。任何人均可以生成大量的私钥、公钥、地址,那么问题来了,怎么来生成这些能,总不能我们自己来纸笔根据算法自己计算出来,这肯定是不现实的,区块链钱包工具正是这样的工具来帮忙我们生成私钥、公钥、生成符合某个公链规范的地址(不同的公链有不同的算法规范)。

在介绍和数钱包之前,我们先以比特币为例,详细介绍下地址生成过程。

大的流程是:私钥--》公钥--》地址。先啰嗦一点计算机知识:位,字节,字,KB,MB位:“位(bit)”是电子计算机中最小的数据单位。每一位的状态只能是0或1。

字节:8个二进制位构成1个“字节(Byte)”,它是存储空间的基本计量单位。1个字节用16进制来表示是两个字符,比如1011 1111可以表示为AF、1110 0000可以表示为E0。

字:“字”由若干个字节构成,字的位数叫做字长,不同档次的机器有不同的字长。例如一台8位机,它的1个字就等于1个字节,字长为8位。如果是一台16位机,那么,它的1个字就由2个字节构成,字长为16位。字是计算机进行数据处理和运算的单位。

KB:K表示1024,也就是2的10次方。1KB表示1K个Byte,也就是1024个字节。

MB:1MB = 220 Bytes = 1048576Bytes

私钥是一个256位随机数,根据上面的计算机知识,所谓256位就是256个0和1组成的数字,256除以8等于32,即32个字节,用16进制表示这个数的范围大小是介于0x0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间的一个数。

我们随机生成一个合法的私钥如下:8F72F6B29E6E225A36B68DFE333C7CE5E55D83249D3D2CD6332671FA445C4DD3

椭圆曲线算公钥

生成了私钥之后,我们使用椭圆曲线加密算法(ECDSA-secp256k1)计算私钥所对应的非压缩公钥,生成的公钥共65字节, 其中一个字节是0x04,非压缩的公钥如下:

0406CCAE7536386DA2C5ADD428B099C7658814CA837F94FADE365D0EC6B1519385FF83EC5F2C0C8F016A32134589F7B9E97ACBFEFD2EF12A91FA622B38A1449EEB

对公钥哈希技术

对上面的公钥进行SHA-256哈希计算,得到结果:2572e5f4a8e77ddf5bb35b9e61c61f66455a4a24bcfd6cb190a8e8ff48fc097d

计算 RIPEMD-160哈希值

取上一步结果,进行RIPEMD-160计算,得到结果:

0b14f003d63ab31aef5fedde2b504699547dd1f6

加入地址版本号

比特币主网版本号“0x00”,取上一步结果,在前面加上16进制的00,即:000b14f003d63ab31aef5fedde2b504699547dd1f6

计算 SHA-256 哈希值

取上一步结果,进行SHA-256计算,可得:

ddc2270f93cc84cc6869dd373f3c340bbf5cb9a8f5559297cc9e5d947aab2536 然后,对以上结果再次计算 SHA-256 哈希值,得到:

869ac57b83ccf75ca9da8895823562fffb611e3c297d9c2d4612aeeb32850078上一步结果的前4个字节(8位十六进制)869ac57b。把这4个字节加在第五步的结果后面作为校验位,将这4个字节加载第五步的结果后面,这就是比特币地址的16进制形态了:869ac57b000b14f003d63ab31aef5fedde2b504699547dd1f6

用Base58编码变换地址,对上一步的结果进行Base58编码,得到:

1QCXRuoxWo5Bya9NxHaVBArBQYhatHJrU7

啰嗦了这么长,是为了让开发者能够清楚怎么出编程开发出一个钱包工具。从上面的比特币的地址生成流程来看,钱包的本质其实就是一个私钥,它是一个随机的哈希值字符串,拥有了私钥就拥有了该钱包的使用权。但是为什么在讲区块链钱包的时候,还有keystore,助记词、冷钱包、热钱包、硬件钱包等等相关的概念,让人产生很多迷惑。

keystore:这个比较好理解,大家在用钱包工具创建钱包密钥的时候,要输入一个密码,这个密码是做什么用的呢?keystore 是使用输入的密码加密过后的私钥, 使用 keystore 进行交易转账等钱包操作, 必须知道该 keystore 的密码。

助记词:从上面例子中私钥是一个256位的数字,用16进制表示是:8F72F6B29E6E225A36B68DFE333C7CE5E55D83249D3D2CD6332671FA445C4DD3,是一个64个0-F的字符组成的,它没有任何的含义,人类很难理解和记忆。助记词则是通过某个算法(可以理解成谍战剧中发电报中用的密码本)把这64个字符转换成一系列的单词(可以是英文、法文、中文甚至是你会的方言), 它最早是由 BIP39提案产生的 , 可以是12个, 15个, 18个, 21个, 24个特定的单词。这些单词有一个统一的、固定的词库, 并不是凭空而来。比如我们熟悉的imToken 创建钱包生成的助记词个数是12个。

用户可以将助记词理解为明文私钥, 即拥有助记词, 就相当于掌握了该钱包的使用权, 无需密码,即你创建钱包输入的密码也是不需要的。

冷钱包:理解了钱包的本质是私钥后,就需要私钥保存好,冷钱包是指网络不能访问到你私钥的钱包。冷钱包往往依靠“冷”设备确保比特币私钥的安全,比如不联网的电脑、手机、写着私钥地址的小本本等。冷钱包避免了被黑客盗取私钥的风险,但是可能面临物理安全风险,比如电脑硬盘损坏(比如冠希)、小本本被当做厕纸使用等等。

热钱包:热钱包是指互联网能购访问你私钥的钱包。热钱包往往是在线钱包的形式。使用热钱包时,最好在不同平台设置不同密码,且开启二次认证,以确保自己的资产安全。

硬件钱包:硬件钱包顾名思义是用你摸得着的硬件,方便你生成和存储密钥,比较知名的有:Trezor,Ledger,和数钱包、库神等。

最后讲讲钱包安全钱包安全, 主要是两点, 一是防盗, 二是防丢。

防盗:防盗要做到防止私钥泄露, 这里要理解 keystore 和助记词的区别,上面已经提到,没有完全理解可以往上翻再看看。

助记词作为钱包私钥的友好格式,是非常方便大家做备份和导入的,由于它的明文性,我们不建议它以电子方式保存,而是抄写在物理介质上保管好,它和 keystore 作为双重备份互为补充。

而 keystore 可以放在线上存储, 比如云盘等, 也可以存储在自己的 U 盘里(硬件钱包就是利用这一点), 这比线上存储相对安全一些, 即使黑客盗取了你的 keystore, 在没有该 keystore 的密码情况下, 还是无法盗取其中资产, 所以这时候该 keystore 的密码显得尤为重要。建议用户将 keystore 和 密码分开存储, 不要放在同一地方, 并且使用高强度、随机生成的密码。

防丢:防丢的策略主要是多重备份, 多次备份。比如备份一个钱包的时候不光备份 keystore, 也要备份助记词和私钥, 这是多重备份。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180817A0ZI8Y00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券