对比上一篇比特币账户私钥、公钥、地址的生成,现在再总结对比一下以太坊中地址生成的不同之处。
私钥、公钥和地址是如何生成的?
以太坊地址生成的流程也是:私钥 -> 公钥 -> 地址。因此地址的生成需要三步:
- 生成一个随机的私钥(32字节)
- 通过私钥生成公钥(64字节)
- 通过公钥得到地址(20字节)
私钥推导公钥
私钥是一组64位的16进制字符,通过私钥我们能够访问一个账户。以太坊的私钥生成是通过secp256k1椭圆曲线算法生成的,secp256k1是一个椭圆曲线算法,同比特币。
公钥推导地址
和比特币相比,在私钥生成公钥这一步其实是一样的,区别在公钥推导地址第一部分,以太坊中非圧缩型公钥的处理就简单粗暴很多了,下图为Public Key生成Address的过程。
以太坊地址生成的过程
第一步:私钥 (private key)
伪随机数经secp256k1曲线生成(256bit 16进制32字节)
18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725
第二步:公钥 (public key)
1. 拿私钥产生的256bit私钥经secp256k1椭圆曲线推出的公钥(前缀04+X公钥+Y公钥):
04 50863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2 3522cd470243453a299fa9e77237716103abc11a1df38855ed6f2ee187e9c582ba6
2. 拿公钥(整段非压缩公钥)来hash,计算公钥(压缩格式)的 SHA-256 哈希值(32bytes):
600ffe422b4e00731a59557a5cca46cc183944191006324a447bdb2d98d4b408
3. 取上一步结果取后40位(20bytes)即以太坊地址:
5cca46cc183944191006324a447bdb2d98d4b408
第三步:地址 (address)
0x5cca46cc183944191006324a447bdb2d98d4b408
笔记参考: