本节摘要:公钥密码学(非对称加密)用一对数学上关联的密钥——公钥公开、私钥保密,实现加密解密与签名验签两种模式,是区块链身份系统的技术基础。本节讲解密钥对的数学直觉、两种使用模式、以及椭圆曲线密码学(ECC)为何取代 RSA 成为链上标准。
阅读完本节,你应当能够:
传统对称加密像一把锁配一把钥匙:加密解密用同一把,问题是怎么把钥匙安全送到对方手里——送钥匙的过程恰恰最容易被截获。这叫"密钥分发问题"。
公钥密码学换了个思路:每个用户有一对数学上绑定的钥匙。公开的"公钥"像一把任何人都能用的锁,保密的"私钥"是唯一能打开它的钥匙。别人要给我发密信,用我的公钥上锁;只有我的私钥能开。钥匙不用送了——公钥本来就是公开的。区块链更进一步:这把"钥匙对"直接成了身份本身。
关键直觉:公钥密码的两把钥匙不是"两把不同的锁",而是一对数学孪生——公钥可以公开,是因为从公钥推导私钥在计算上不可行(离散对数/大数分解难题)。安全建立在"算不出来",而不是"藏起来"。
椭圆曲线密码学基于椭圆曲线上的离散对数难题:给定曲线上的点 P 和整数 k,计算 kP 很容易;给定 P 和 kP,反推 k 极难。私钥就是一个随机大整数 k,公钥就是 kP(一个点)。比特币、以太坊都基于 secp256k1 曲线。
| 维度 | RSA | ECC |
|---|---|---|
| 密钥长度 | 2048~4096 bit | 256 bit |
| 同等安全性密钥更短 | 否 | 是 |
| 计算速度 | 慢 | 快 |
| 签名大小 | 大 | 小(64 字节) |
| 链上应用 | 历史/兼容场景 | 比特币、以太坊等主流 |
ECC 在相同安全强度下密钥短得多、签名小得多、速度快得多——链上数据宝贵,签名越小越好,所以 ECC 一统江湖。
地址是公钥的"压缩摘要"——从地址反推公钥、从公钥反推私钥,每一步都不可行。所以地址可以放心公开。
⚠️ 常见坑:把"地址"当"账号"随便给别人没问题,但私钥泄露 = 资产归零。链上没有"忘记密码找回"——私钥丢了,谁也帮不了你(详见 3.6)。
💡 关键直觉:公钥密码学在链上最重要的应用不是"加密",而是"签名"——公有链的交易数据本身大多公开,不需要加密;真正天天在用签名证明"这笔交易是你授权的"。
椭圆曲线密码的安全性建立在椭圆曲线离散对数问题上:给定曲线上的点 G(基点)和一个整数 k,计算 P = k×G 很容易(点乘法,毫秒级);但给定 P 和 G,反推 k(离散对数)在计算上不可行。
这个"正向容易、逆向极难"的不对称性,正是公钥密码学的核心:私钥 k 是秘密,公钥 P 可以公开,因为从 P 推 k 做不到。RSA 则依赖大整数分解难题(两个大素数相乘容易,从乘积反推因子极难)。
理解这一点,就理解了为什么"公钥可以公开"不是约定而是数学——公开公钥不泄露私钥,是因为求解难度在数学上不可行,与道德、法律、运营都无关。
| 实践 | 说明 | 风险点 |
|---|---|---|
| 私钥离线生成 | 在无网设备上生成密钥对 | 在线生成可能被木马截获 |
| 私钥不联网 | 大额私钥存硬件钱包 | 联网设备易被攻击 |
| 公钥适度公开 | 公开公钥用于验签 | 无风险,但别当隐私保护 |
| 密钥轮换 | 定期更换大额密钥 | 老密钥泄露风险累积 |
| 备份加密 | 备份文件加密存储 | 明文备份=泄露 |
⚠️ 常见坑:把公钥当"加密邮箱"用。链上公钥更多用于验签而非加密——交易内容本来就公开,加密反而增加存储负担。链上的"机密性"需求远小于"认证性"需求。
把对称加密拉进来对比,才能凸显非对称的适用场景:
| 维度 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥 | 单密钥 | 公钥+私钥 |
| 速度 | 快(万倍级) | 慢 |
| 密钥分发 | 难(需安全信道) | 易(公钥可公开) |
| 典型算法 | AES、ChaCha20 | RSA、ECC |
| 链上应用 | 钱包数据本地加密 | 签名、身份 |
实践建议:实际系统几乎总是"混合加密"——用非对称加密协商/交换会话密钥,再用对称加密加密大量数据(性能好)。这是 TLS、加密钱包的共同模式,理解它有助于看懂各类安全协议的通用结构。
把本章与前面章节联系起来,公钥密码在链上有五类高频应用:
洞察:链上 99% 的"你是谁"问题都由 ECC 签名解决,链下的"怎么保密通信"则由混合加密解决——公钥密码学是链上链下安全体系的共同地基。
问:公钥可以公开,那私钥和公钥的关系会不会被反推?
不会。从私钥算公钥容易(椭圆曲线点乘),从公钥反推私钥在计算上不可行(离散对数难题)。这就是"单向性"——公开公钥不泄露私钥,是数学保证而非约定。
问:为什么不直接用私钥当地址?
地址是公钥的哈希压缩,更短、更易读、更安全(公钥本身也不暴露)。且地址不直接关联公钥,增加了一层隐私。
问:ECDSA 和 Ed25519 哪个好?
都是主流椭圆曲线签名。Ed25519 更现代(常数时间实现、防侧信道、签名更短),ECDSA 生态更广泛(比特币、以太坊在用)。新系统可优先考虑 Ed25519。
问:公钥密码会被量子计算攻破吗?
会——Shor 算法能破解离散对数与大数分解。行业已在研究后量子密码(格密码、多变量密码),未来迁移是确定性趋势,只是时间未定。
无论公钥密码学多精妙,密钥管理的疏漏都会前功尽弃。实践要点:
| 层级 | 实践 | 说明 |
|---|---|---|
| 生成 | 高质量随机源 | 弱随机=私钥可预测 |
| 存储 | 硬件钱包/离线介质 | 私钥不落联网设备 |
| 使用 | 最小暴露原则 | 能用签名别用明文传输密钥 |
| 备份 | 助记词分地保存 | 单点备份=单点风险 |
| 轮换 | 定期更换大额密钥 | 长期密钥风险累积 |
| 销毁 | 安全擦除旧介质 | 旧设备转卖前彻底清除 |
核心原则:密钥安全 = 生成(随机) + 存储(隔离) + 使用(最小暴露)三环节都要守住——任何一环失守,数学再强也白搭。
把"公钥可公开、私钥保密"的关系画成图,建立直觉:

这张图浓缩了密钥体系的全部要点:私钥→公钥→地址,单向派生;公开的永远公开,保密的永保机密。把它记在脑子里,钱包安全就守住了一半。
用这组自检题巩固本节:
自检通过的标准:能向别人解释"为什么公钥公开不泄露私钥"——这是公钥密码学最核心也最反直觉的一点。
把公钥密码学压缩成一句话记忆卡:
"公开的不能推秘密,秘密的能推公开"——从私钥推导公钥容易(点乘),从公钥反推私钥不可行(离散对数)。这种"单向性"让公钥可以放心公开,也构成了区块链身份体系的数学根基。
对照实践记忆:**私钥=签名笔(能花币)、公钥=验章(验证是你花的)、地址=信箱(别人给你寄币)**。三个角色的关系想清楚,钱包体系就理解了。
本节最后再澄清两个高频误区:
误区一:"公钥加密更安全"。加密强度取决于算法与密钥长度,与"公钥/私钥"无关。公钥密码的优势是密钥管理简单(公钥公开),不是"更安全"。
误区二:"链上交易是加密的"。多数公有链交易不加密——数据公开是为了可验证。公钥密码在链上的主力是签名(认证),不是加密(保密)。保密与认证是两个不同目标,别混为一谈。
公钥密码学给了我们"身份"和"印章"。下一节看数字签名如何把"用私钥盖章"变成可验证、防抵赖的完整协议。
问:公钥能推出私钥吗?地址能推出公钥吗?
答:都是单向门。私钥推公钥是椭圆曲线乘法,正向计算毫秒级,反向求解是椭圆曲线离散对数问题,现有算力下不可行;公钥到地址再过一层哈希,同样单向。所以公开地址与公开公钥都不泄露私钥——但要注意顺序不可逆推:泄露私钥等于交出全部控制权,没有补救。
问:既然公钥可以随便公开,为什么地址不直接用公钥?
答:三个原因。其一,哈希缩短了长度,公钥六十五字节 vs 地址二十字节,转账手续费与存储都省;其二,哈希隐藏了公钥,在量子威胁未落地前多一层屏障(公钥只在花费那一刻暴露);其三,哈希带校验设计(如 Base58Check 版本字节),能拦截绝大多数手滑输错。地址是"公钥的舞台化名",既方便又留了后手。