Skip to content

第5章:数字签名、证书与认证协议

签名的目标

数字签名用私钥生成签名、公钥验证。常见安全目标是选择消息攻击下的存在性不可伪造:即使攻击者获得自己选定消息的签名,也难以为新的消息产生有效签名。

签名不加密消息,也不自动证明现实世界行为已经发生。它证明的是在指定假设下,持有相应秘密的实体对某个编码消息进行了签名。

Schnorr 关系与 nonce

在阶为素数 qq 的群中,私钥 xx、公钥 y=gxy=g^x。简化 Schnorr 形式取随机 kk,计算 R=gkR=g^k,令 e=H(R,y,m)e=H(R,y,m),输出 s=k+ex(modq)s=k+ex\pmod q。验证等式为

gs=Rye.g^s=R\,y^e.

若同一个 kk 用于两个不同挑战 e1,e2e_1,e_2,则

x=(s1s2)(e1e2)1(modq).x=(s_1-s_2)(e_1-e_2)^{-1}\pmod q.

这展示了随机数复用如何直接暴露私钥。真实标准还规定群元素编码、哈希到标量、验证限制等细节,不能只实现这个等式就认为完整安全。

证书与信任

证书把身份或域名与公钥绑定,由受信任机构签名。验证方需要检查链、名称、有效期和相应约束,而不是仅检查“某个签名能验证”。

证书信任依赖根密钥、签发流程、吊销或更新机制。证书中包含公钥而非私钥;获得一个人的证书不会因此获得其签名能力。

认证密钥交换

认证密钥交换将临时密钥材料与身份、角色、协议参数及握手上下文绑定。只签一个孤立的随机数,可能遗漏会话身份或允许跨协议误用。

使用临时 DH 并正确擦除临时秘密,可使长期认证密钥后来泄露时,历史会话仍受到保护,称为前向安全。它不保证已被攻陷的端点无法读取当前明文。

口令认证还要应对低熵秘密的离线猜测。给口令加盐的成本型哈希用于存储验证,不会把弱口令变成高熵随机密钥。

练习

  1. 由两次复用 nonce 的 Schnorr 签名推导私钥公式。
  2. 一张证书签名有效但域名不匹配,为什么仍应拒绝?
  3. 区分前向安全、身份认证与端点安全。

上次更新: