公钥Public Key)是 非对称密码学 中可以公开分发的一半密钥材料,用来加密发给私钥持有者的数据、验证 数字签名,或识别某个 私钥 对应的主体。

核心问题

公钥解决的是“如何在不共享秘密的情况下让别人和我建立密码学关系”的问题。它可以公开复制和传播,因此适合放在服务器配置、证书、软件包元数据、设备固件或代码仓库里。

但公钥本身只说明“存在一把对应私钥”,不自动说明“这把公钥属于谁”。因此工程系统还需要指纹、信任链、数字证书、带外确认或内置根公钥来建立信任。

核心机制

公钥和 私钥 成对生成。典型用途有三类:

  1. 加密:发送方用接收方公钥加密或包裹会话密钥,只有对应私钥能解密。
  2. 验签:接收方用公钥检查签名是否由对应私钥生成,以及消息是否被篡改。
  3. 身份绑定:系统把公钥绑定到用户、域名、设备、软件发布者或机构身份。

常见抽象为:

其中 pk 是公钥,M 是消息,\sigma 是签名。公钥常见编码和容器包括 PEM、DER、JWK、SSH public key 和 X.509 数字证书

ECDSA 为例,公钥是曲线点 Q

Q = dG

d私钥G 是公开基点,dG椭圆曲线标量乘法。验签算法是通用算法,所有设备可以使用同一段 verify 代码;公钥是传给算法的参数,用来指定“只接受哪把私钥签出来的签名”。

如果设备没有内置或配置可信公钥,攻击者可以自己生成一对密钥、用自己的私钥签恶意内容、再用自己的公钥验签通过。公钥的工程作用不是保密,而是作为信任锚告诉设备“只认这一把签名权威”。

工程用途

  • HTTPS / TLS:浏览器通过证书链确认服务器公钥属于目标域名。
  • 软件更新:客户端内置公钥或根证书,用来 验签 更新包。
  • SSH 登录:服务器保存用户公钥,用户用私钥证明自己。
  • 设备身份:设备公钥被写入证书或注册表,用于后续认证。
  • API 和令牌系统:服务端发布 JWK 公钥集,调用方用它验证令牌签名。

观察指标包括公钥来源、指纹、算法、长度、有效期、撤销状态、用途约束和轮换覆盖。

边界与常见坑

  • 公开不等于可信:任何人都能给你一个公钥,关键是确认它属于预期主体。
  • 公钥不是秘密:把公钥暴露出来通常不是泄露;把私钥或可签名权限暴露出来才是严重事故。
  • 验签成功不等于授权成功:验签只能证明签名和公钥匹配,还要检查主体、用途、时间、权限和撤销状态。
  • 不要只信 kid 或文件名:密钥 ID 只是查找线索,不是信任证明。
  • 公钥轮换需要兼容窗口:旧签名、旧证书和缓存客户端可能仍需要旧公钥验证。

相关术语