新手学习以太坊相关知识,如果有问题或建议,请在g此z处h留言。[互联网去中心化小白手册]
上一节了解了公钥和地址的基础概念,这节将上面的知识融合在一起,了解一下钱包技术等相关知识。
1 钱包
“钱包”这个词在以太坊中代表几种不同的东西。
- 抽象来说,钱包主要是一个用户界面。钱包控制对以太坊的访问,管理私钥和地址,跟踪账户余额,创建并签名交易。
- 以太坊钱包还可以跟智能合约交互,比如管理ERC20代币
ERC-20代币是一种在以太坊区块链上创建和发行的标准化数字代币。ERC代表“以太坊请求评论”(Ethereum Request for Comments),20是该标准的提案编号。ERC-20定义了一套规则和接口,确保不同的代币能够在以太坊生态系统内互相兼容,允许它们在不同的应用程序和钱包中顺利进行转账、交易、存储等操作。
- 从程序员的角度,钱包这个词特指用来存储和管理用户密钥的系统。每个钱包都包含一个密钥管理系统
2 钱包技术概述
最最最基础的几包就是单一私钥和计算出来对应地址,在每一个场合都使用同一个地址,但是这样子基本没有隐私,任何人都可以跟踪你的账户和交易并关联起来。
对于以太坊钱常见误解是认为钱包包含以太币或者代币,其实钱包只保存了密钥。以太币和其他代币都保存在以太坊区块链上,用户使用钱包中保存的私钥来签名交易,进而控制以太币或代币。
钱包主要分两类,取决于它所保存的密钥之间是否存在关联。
- 非确定性钱包:保存的每一个私钥都是通过不同的随机数独立生成的,私钥之间没有任何关联,这类钱包称为JBOK(Just a Bunch Of Keys)钱包
- 确定性钱包:所有密钥都是从一个主密钥衍生而来的,这个主密钥就是种子密钥。最常见的派生方法是使用一个类似树形的结构,称为层级饰确定性钱包,HD(hierarchical deterministic) 钱包。
为来防止数据丢失,钱包丢失事件,一般将种子编码为一个英文词列表(也可以为其他语言)--钱包助记词,丢失之后钱包将被控制!!
3 确定性(种子密钥)钱包
确定性钱包基于种子密钥的钱包,包含了从同一个种子密钥(主密钥)所派生的私钥。种子密钥是一个随机生成的数字,它与其他数据(索引号或链码)一起生成私钥。有种子密钥就可以获得整个钱包的访问权限,这种设计有利有弊。
3.1 层级式确定性钱包(BIP-32/BIP-44)
书中的确定性钱包最高级的形式是有比特币的BIP-32标准定义的HD钱包。
树形结构可以用来表示组织结构的含义,例如一组密钥专门用来收款,另一组专门用来付款。也可以把这样的结构跟公司的组织架构对应,把树形结构的分支跟部门、区域、具体的职能或公司内部的账户分类相匹配。
3.2 种子密钥和助记词(BIP-39)
要安全的备份和恢复私钥有很多方法,最方便快捷的是使用一组有序的单词,只要可以将这些单词组成正确的序列,就可以重建出一把独一无二的私钥。
- 基于BIP-39的助记词标准
- 基于BIP-32的层级式确定性钱包标准
- 基于BIP-43的多用途层级式确定性钱包结构
- 基于BIP-44的多币种和多账户钱包
随着未来开发,标准可能会改变遗弃。这些准则规定了现在钱包的形式和功能。
4 助记词标准(BIP-39)
助记词中的单词代表用来生成钱包的种子密钥中的内容。创建钱包后,展示一组12或24个单词组成的字符串。助记词用来支持标准的钱包中恢复和重建所有的密钥。
助记词是由BIP-39定义的,BIP-39只是助记词标准的一种实现,以太坊比特币钱包之前还有别的方法,清单不同,BIP-39接受度最广。 生成助记词
- 创建一个128比特(位)或256比特(位)的密码学强度的随机数,称为S
- 取出S的SHA-256哈希值的前(S的长度/32)比特,作为随机数S的校验值
- 将上一步得到的校验值加到随机数S的末尾
- 以11比特为单位,将随机数S与校验值的结合数分为多个组
- 将每一个11比特的值根据预先定义的字典映射为单词
- 保持初始的次序,得出的单词字符串即我们所需的助记词
从助记词到种子密钥
助记词代表128或256比特的随机数。使用密钥扩展算法,例如PBKDF2可以将这个随机数言生成512比特长的种子,进而用来构建确定性钱包和派生其他密钥。
密钥拓展算法需要两个参数:助记词和盐(salt),加盐的目的是防止通过循环表格的方式来实现暴力破解;加盐另一个目的是引入额外的密码来保护种子密钥。
- PBKDF2密钥扩展算法的第一个参数是步骤6中产生的助记词。
- PBKDF2密钥扩展算法的第二个参数是“盐”,盐的内容由用户提出, 可以是一个可选的密码,并跟"mnemonic"组合在一起。
- PBKDF2针对助记词和盐进行2048轮哈希运算,使用的是HMACSHA512算法,产生一个512比特的数作为最终输出。这个数字就是种子密钥。
作为助记词的第二道防线:如果助记词备份泄露,密码是助记词和钱包种子密钥安全的第二道防线。
钱包是任何面向用户的区块链应用的基础,一定要保护好自己的钱包!!!
5 致谢
- ETH 《精通以太坊》[1]
- 以太坊官网 密码学[2]
参考资料
[1]ethereum_book: https://github.com/inoutcode/ethereum_book/tree/master?tab=readme-ov-file
[2]以太坊官网: https://ethereum.org