在介绍区块链钱包之前,我们先详细介绍下比特币的地址生成过程冷钱包。
大的流程是:私钥–》公钥–》地址冷钱包。
先啰嗦一点计算机知识:位冷钱包,字节,字,KB,MB
位:“位(bit)冷钱包是电子计算机中最小的数据单位。每个人的状态只有0或1。
字节:8个二进制位构成1个“字节(Byte),它是存储空间的基本计量单元冷钱包。一个字节用16进制表示为两个字符,如1011 1111AF、110 000表示E0。
字:“字”由若干个字节构成,字的位数叫做字长,不同档次的机器有不同的字长冷钱包。例如一台8位机,它的1个字就等于1个字节,字长为8位。如果是一台16位机,那么,它的1个字就由2个字节构成,字长为16位。字是计算机进行数据处理和运算的单位。
KB:K表示1024,即210次方冷钱包。KB表示1K个Byte,也就是1024字节。
MB:1MB = 220 Bytes = 1048576Bytes
私钥是一个256位随机数,根据上面的计算机知识,所谓256位就是256个0和1组成的数字,256除以8等于32,即32个字节,用16进制表示这个数的范围大小是介于0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间的数冷钱包。
冷钱包我们随机生成一个合法的私钥如下:
8F72F6B29E6E225A36B68DFE333C7CE5E55D83249D3D2CD6332671FA445C4DD3
椭圆曲线算公钥
生成了私钥之后冷钱包,我们使用椭圆曲线加密算法(ECDSA-secp256k1)计算私钥对应的非压缩公钥,共65字节,其中一个字节为0x非压缩公钥如下:
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个字符转换成一系列的单词(可以是英文、法文、中文甚至是你会的方言),它最早是由 BIP 提案可以产生12个、15个、18个、21个和24个特定的单词冷钱包。这些单词有一个统一和固定的词库,不是凭空而来的。例如,我们熟悉它imToken 钱包生成的助记词有12个。
用户可以将助记词理解为明文私钥,即拥有助记词,就相当于掌握了该钱包的使用权,无需密码,即你创建钱包输入的密码也是不需要的冷钱包。
冷钱包
理解了钱包的本质是私钥后,就需要私钥保存好,冷钱包是指网络不能访问到你私钥的钱包冷钱包。冷钱包往往依靠“冷”设备确保比特币私钥的安全,比如不联网的电脑、手机、写着私钥地址的小本本等。冷钱包避免了被黑客盗取私钥的风险,但是可能面临物理安全风险,比如电脑硬盘损坏(比如冠希)、小本本被当做厕纸使用等等。
热钱包
热钱包是指互联网能购访问你私钥的钱包冷钱包。热钱包往往是在线钱包的形式。使用热钱包时,最好在不同平台设置不同密码,且开启二次认证,以确保自己的资产安全。
硬件钱包
硬件钱包顾名思义是用你摸得着的硬件,方便你生成和存储密钥,比较知名的有:Trezor,Ledger,可以去淘宝看看有卖的,其实是一个类似银行开网银发给我们的U类似的硬件冷钱包盾。
最后讲讲钱包安全
钱包安全,主要是两点,一是防盗,二是防丢冷钱包。
防盗
防盗要做到防止私钥泄露,这里要理解 keystore 上面提到的助记词和助记词的区别,如果你不完全理解,你可以翻过来看看冷钱包。
助记词作为钱包私钥的友好格式,是非常方便大家做备份和导入的,由于它的明文性,我们不建议它以电子方式保存,而是抄写在物理介质上保管好,它和 keystore 作为双重备份补充冷钱包。
而 keystore 可以在线存储,如云盘,也可以存储在自己的 U 盘子里(硬件钱包就是用这个)比网上存储更安全,即使黑客偷了你的 keystore,在没有该 keystore 在密码的情况下,资产仍然不能被盗,所以这个时候应该是 keystore 的密码显得尤为重要冷钱包。建议用户将 keystore 和 密码分开存储,不要放在同一个地方,并使用高强度、随机生成的密码。
防丢
防丢的策略主要是多重备份,多次备份冷钱包。比如备份一个钱包的时候不光备份 keystore,还需要备份助记词和私钥,这是多重备份