掌握非对称加密是理解区块链的第一步。私钥是你对链上资产的唯一控制凭证,公钥用于生成地址和验证签名。
私钥是一个随机生成的 256 位数字(32 字节),本质上就是一个非常大的随机数。在十六进制下,它看起来像这样:
e9873d79c6d87dc0fb6a5778633389f4453213303da61f20bd67fc233aa33262私钥的安全性来源于其巨大的可能空间:2^256 ≈ 10^77,这个数字比可观测宇宙中的原子数量还要多。所以两个人"碰巧"生成相同私钥的概率几乎为零。
公钥由私钥通过 椭圆曲线数字签名算法(ECDSA) 计算得到。以太坊和比特币都使用 secp256k1 曲线。
公钥可以公开分享,因为从公钥无法反推出私钥(单向函数)。
以太坊地址 = 公钥经过 Keccak-256 哈希 → 取后 20 字节 → 加 0x 前缀。
graph LR
A["🎲 随机数生成器"] -->|"256位随机数"| B["🔑 私钥<br/>32 字节"]
B -->|"ECDSA<br/>secp256k1 曲线<br/>点乘运算"| C["📢 公钥<br/>64 字节<br/>(未压缩)"]
C -->|"Keccak-256 哈希<br/>取后 20 字节"| D["📍 地址<br/>20 字节<br/>0x..."]
style A fill:#e1f5fe
style B fill:#fff3e0
style C fill:#e8f5e9
style D fill:#f3e5f5
数字签名用于证明"这笔交易确实是由私钥持有者发起的",而不需要暴露私钥本身。
sequenceDiagram
participant Alice as Alice(发送方)
participant Network as 区块链网络
participant Bob as Bob(验证方)
Alice->>Alice: 用私钥对交易数据签名
Alice->>Network: 发送交易 + 签名
Network->>Bob: 广播交易
Bob->>Bob: 用 Alice 的公钥验证签名
Note over Bob: 验证通过 ✅<br/>确认是 Alice 发起的
hk 和随机数 r 计算签名 (r, s)(r, s) 是否与 h 匹配哈希函数是纯粹的单向函数——输入和输出之间没有数学关系,只能验证"是否相等"。
ECDSA 基于椭圆曲线的数学结构,私钥和公钥之间存在确定的数学关系,这使得:
graph TB
PK["🔑 公钥(相同的 secp256k1)"]
subgraph ETH["以太坊"]
E1["Keccak-256 哈希"]
E2["取后 20 字节"]
E3["0x 前缀 → 地址"]
end
subgraph BTC["比特币"]
B1["SHA-256 哈希"]
B2["RIPEMD-160 哈希"]
B3["Base58Check / Bech32 编码 → 地址"]
end
PK --> E1 --> E2 --> E3
PK --> B1 --> B2 --> B3