在探索以太坊乃至整个区块链世界的奥秘时,我们经常会遇到一些核心概念,如“账户”、“地址”和“密钥”,公钥(Public Key)扮演着至关重要的角色,它是接收以太坊转账、验证所有权的基石,这个关键的公钥究竟是如何生成的呢?本文将深入浅出地为您揭示以太坊公钥生成的过程。
要理解公钥的生成,首先必须从它的“孪生兄弟”——私钥(Private Key)谈起,在以太坊的密码学体系中,私钥是整个所有权和控制权的源头。
私钥通常以一个长长的十六进制字符串或助记词(Mnemonic Phrase,如12或24个单词)的形式存在,方便用户备份和恢复。

以太坊的公钥生成过程并非凭空而来,而是基于一套严谨的密码学算法,这套算法就是椭圆曲线密码学(Elliptic Curve Cryptography, ECC),具体到以太坊1.0和2.0早期阶段,采用的是secp256k1曲线。
这个过程可以概括为以下两步:
我们将私钥(一个256位的随机数)视为一个整数,通过secp256k1椭圆曲线算法,将这个整数映射为椭圆曲线上的一个特定点,这个点由其坐标(x, y)唯一确定。

这一步可以形象地理解为:我们有一个巨大的、具有特定数学性质的“椭圆曲线操场”,私钥就像是一个“秘密编号”,通过这个编号,我们可以在操场上找到一个独一无二的“位置”(即点)。
这个在椭圆曲线上找到的点(x, y),其x坐标和y坐标组合在一起,就构成了以太坊的公钥。
0x开头的64个字符的十六进制字符串,由x坐标(32字节)和y坐标(32字节)拼接而成。公钥本身还不能直接接收以太坊,我们还需要从公钥进一步生成以太坊地址(Address),这个过程如下:

0x前缀。最终得到的这个以0x开头的40个字符的字符串,就是我们在钱包里看到的、可以用来接收以太坊的以太坊地址。
让我们用一张图来清晰地展示整个过程:
私钥(随机256位数) → [椭圆曲线算法 secp256k1] → 公钥(椭圆曲线上点的x,y坐标) → [Keccak-256哈希 取后20字节] → 以太坊地址
这个过程形成了一个从源头(私钥)到最终表现形式(地址)的完整链条,每一步都依赖于强大的密码学原理,确保了: