什么是区块链钱包
在介绍区块链钱包之前,我们先详细介绍下比特币的地址生成过程。
大的流程是:私钥–》公钥–》地址。
先啰嗦一点计算机知识:位,字节,字,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,可以去淘宝看看有得卖后,其实就是一个类似银行开通网银发我们的U盾类似的硬件。发两张图大家看看,本人也没有用过,图片来自淘宝,不过这玩意弄不好也容易有安全漏洞,还是好好保存和备份好才是王道。
最后讲讲钱包安全
钱包安全, 主要是两点, 一是防盗, 二是防丢。
- 防盗
防盗要做到防止私钥泄露, 这里要理解 keystore 和助记词的区别,上面已经提到,没有完全理解可以往上翻再看看。
助记词作为钱包私钥的友好格式,是非常方便大家做备份和导入的,由于它的明文性,我们不建议它以电子方式保存,而是抄写在物理介质上保管好,它和 keystore 作为双重备份互为补充。
而 keystore 可以放在线上存储, 比如云盘等, 也可以存储在自己的 U 盘里(硬件钱包就是利用这一点), 这比线上存储相对安全一些, 即使黑客盗取了你的 keystore, 在没有该 keystore 的密码情况下, 还是无法盗取其中资产, 所以这时候该 keystore 的密码显得尤为重要。建议用户将 keystore 和 密码分开存储, 不要放在同一地方, 并且使用高强度、随机生成的密码。
- 防丢
防丢的策略主要是多重备份, 多次备份。比如备份一个钱包的时候不光备份 keystore, 也要备份助记词和私钥, 这是多重备份
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179511.html原文链接:https://javaforall.cn