钱包-账号-地址-公私钥
画了个示意图,表示钱包-账号-地址-公私钥之间的关系
钱包
钱包不是账号,钱包是一个应用程序,主要用于管理账号、保管私钥、发送和接受代币的客户端。
钱包中可以有很多账号,账号也能导入不同的钱包。
一个钱包应用程序也能创建多个钱包,每个钱包管理不同的账号。
账号
每个账户都是由一对钥匙组成:公钥和私钥。
每个账户都对应一个地址,而账户名是地址的标签。
账户由钱包来管理,一个钱包可以包含多个账户。
账号与公钥、私钥、地址,在以太坊中是一一对应的,而在有的区块链中账号与公私钥对、地址不是一一对应的,比如:EOS。
地址
地址由40位长度的十六进制的字符组成,如:0xbb5c219853cd0c8b86f463f9b7b480447bcfb57e。
地址标记着一个账号,可以公开给别人,用于别人给你转账。
地址不是公钥,地址是由公钥生成,公钥由私钥生成,这两个过程是不可逆的,即地址不能推算出公钥,公钥也不能推算出私钥。下面将介绍这两个过程的具体实现。
公钥
公钥压缩格式是33字节,非压缩格式是65字节。即压缩格式是66位长度的十六进制,非压缩格式是130位长度的十六进制字符组成。以0x02/0x03开头为压缩公钥。
公钥对账号的交易进行加密。即使用公钥签名交易,然后使用私钥去验证交易。
公钥做Keccak-256哈希后取末尾的40位长度的十六进制字符得到地址。
公钥是通过使用secp256k1椭圆曲线加密算法计算私钥所对应的公钥获得。
公钥、私钥、地址,它们是一一对应的,唯一的,不可修改的。
私钥
私钥由64位长度的十六进制的字符组成,比如:0xE4356E49C88C8B7AB370AF7D5C0C54F0261AAA006F6BDE09CD4745CF54E0115A,
私钥一定要妥善保管,不能被公开和泄漏,拥有私钥就相当于拥有此账号的使用权。
私钥有多种表现形式:如keystore、助记词。
总结
钱包应用程序用于管理多个账号,在以太坊中账号与公私钥对、地址是一一对应的,公钥、私钥、地址也是一一对应的,私钥生成公钥,公钥生成地址,且不可逆,私钥是账号的核心且不可泄漏,地址可以公开用于转账。
创建账号就是创建私钥的过程。
- 私钥由随机数生成的64位长度的十六进制的字符。
- 公钥由私钥生成 (使用
secp256k1
椭圆曲线算法)。 - 地址由公钥生成,(使用
Keccak256
哈希算法生成)。
下面是创建账户后产生地址的流程图。