比特币的密码学基础与以太坊相同(都用 secp256k1),但地址生成方式完全不同。
比特币和以太坊都使用 secp256k1 椭圆曲线 生成公钥,但地址编码方式不同:
graph TB
PK["🔑 私钥<br/>256 位随机数"]
PK -->|"ECDSA secp256k1<br/>点乘运算"| PUB["📢 公钥<br/>65 字节(未压缩)<br/>33 字节(压缩)"]
subgraph BTC地址生成
PUB -->|"SHA-256"| H1["哈希1"]
H1 -->|"RIPEMD-160"| H2["公钥哈希<br/>20 字节"]
H2 -->|"Base58Check"| ADDR1["1 开头的地址<br/>P2PKH"]
H2 -->|"Bech32"| ADDR2["bc1q 开头<br/>P2WPKH"]
end
subgraph ETH地址生成
PUB -->|"Keccak-256"| H3["哈希"]
H3 -->|"取后20字节"| ADDR3["0x 开头<br/>40 个十六进制字符"]
end
| 特性 | Bitcoin | Ethereum |
|---|---|---|
| 曲线 | secp256k1 | secp256k1 |
| 公钥格式 | 压缩(33字节)常用 | 未压缩(65字节) |
| 哈希算法 | SHA256 + RIPEMD160 | Keccak-256 |
| 地址编码 | Base58Check / Bech32 | Hex(十六进制) |
| 地址长度 | 25-62 字符 | 42 字符(含0x) |
| 校验机制 | 内置校验和 | EIP-55 大小写校验 |
椭圆曲线上的点有 (x, y) 两个坐标。未压缩公钥存储完整的 x 和 y(65字节),压缩公钥只存 x + y 的奇偶标记(33字节),因为知道 x 就能算出 y。
比特币主要使用压缩公钥以节省空间。