跳转至

Lecture 6:实体认证

学习目标

完成本讲后,应当能够:

  • 区分单向认证与双向认证;
  • 说明实体认证需要来源认证与新鲜性;
  • 解释挑战-响应协议如何阻止简单重放;
  • 比较时间戳、序列号和随机数在新鲜性检查中的作用;
  • 识别冒充攻击、重放攻击与反射攻击;
  • 按协议假设、消息流、消息内容和协议动作分析认证协议。

1. 实体认证的目标

实体认证(entity authentication)是一个实体向另一实体证明自己当前所声称身份的过程。参与者可以是人,也可以是计算机或设备。若只有 Bob 确认 Alice 的身份,称为单向认证(unilateral authentication);若双方都确认对方身份,称为双向认证(mutual authentication)。

协议中常用以下术语:

  • 声明者(claimant):声称某个身份的一方;
  • 主体(principal):声明者所声称的身份;
  • 验证者(verifier):检查身份声明的一方。

开放网络上的认证比安全的本地连接困难。攻击者可能监听、插入、修改或重放消息。因此,验证者需要同时确认:

  1. 来源认证(origin authentication):消息确实来自声称的主体;
  2. 新鲜性(freshness):消息是本次协议中新生成或新响应的,而非旧消息的重放。

只验证来源而不检查新鲜性,旧的合法消息仍可能被攻击者再次使用。

2. 挑战-响应认证

直接在网络上发送用户名和密码会暴露凭据。即使先加密密码,攻击者仍可能记录并重放之前捕获的密文;直接发送密码哈希也可能遭遇相同问题。

挑战-响应(challenge-response)协议让验证者先发出挑战值,声明者再用共享秘密计算响应。挑战通常是一次性数值(nonce,number used once):

\[ \text{Verifier}\to\text{Claimant}: N $$ $$ \text{Claimant}\to\text{Verifier}: F(K,N) \]

\(K\) 是双方共享的秘密,\(F\) 是经过设计的认证运算,例如基于密钥的消息认证码(Message Authentication Code,MAC)。验证者检查响应是否正确。旧响应针对旧挑战,通常不能回答新的挑战,从而抵御简单重放。

挑战必须与本次会话及双方身份正确绑定。随机挑战通常应难以预测且不重复;计数器也可提供新鲜性,但需要双方状态一致并妥善处理重置、丢包和并发会话。仅使用普通哈希 \(h(K\parallel N)\) 时,还需评估其编码歧义和协议安全性;实际实现应使用标准 MAC 或认证协议。

3. 公钥认证方式

假设 Alice 的公钥经过证书认证,且 Bob 能可靠取得并验证该公钥。可用以下思路进行单向认证:

  • Bob 发送只有 Alice 能解密的挑战密文,Alice 返回挑战内容;或
  • Bob 发送新鲜挑战 \(R\),Alice 对其签名,Bob 使用 Alice 的公钥验证。

签名挑战时,应将协议上下文一并纳入签名,例如双方身份、协议名称、会话用途和挑战值。否则,同一签名可能被挪到另一个协议或另一通信对象中使用。公钥认证也依赖证书、公钥目录或其他可信机制正确绑定身份与公钥。

4. 新鲜性机制

4.1 时间戳

消息中附带发送时间,接收方检查时间是否落在允许窗口内。该方法要求时钟可靠同步,并需要处理时钟漂移、网络延迟和窗口内的重复消息。接收方通常还要记录窗口内已处理的消息,避免同一消息被再次接受。

4.2 逻辑时间戳与序列号

通信双方可维护消息计数器。发送方递增序列号并将其放入消息,接收方检查编号是否符合预期,再更新本地状态。序列号不依赖墙上时钟,但双方状态必须保持一致;丢包、重连、计数器回绕或状态回滚都可能造成误拒绝或重放风险。

4.3 随机数挑战

验证者为每次认证产生一个新随机数 \(N\),并要求对方在受认证的响应中包含 \(N\)。若 \(N\) 不重复,旧响应无法通过新挑战检查。协议有时还要求随机数不可预测,以降低攻击者提前准备有效响应的机会。

5. 常见认证攻击

冒充攻击

攻击者自行生成消息,谎称自己是另一个实体。有效的 MAC 或数字签名可帮助阻止攻击者伪造来源,但前提是密钥没有泄露,且验证者正确绑定密钥与身份。

重放攻击

攻击者重新发送以前捕获的合法消息。新鲜性检查可拒绝旧消息:使用一次性挑战、时间戳或序列号,并对这些字段进行认证保护。

反射攻击

攻击者把验证者在一个方向发出的挑战或认证数据,反射回验证者,诱使它为攻击者完成认证。防护方法包括:在受认证数据中加入发送方与接收方身份、协议角色或方向标签,并避免双向流程对称到可互相冒充。

6. 如何设计与分析认证协议

按以下顺序梳理协议:

  1. 安全目标:需要确认哪一方的身份?是否需要双向认证、完整性或不可否认性?
  2. 协议假设:双方预先共享哪些密钥?公钥如何认证?时钟或计数器状态是否可信?
  3. 消息流:每条消息由谁发给谁,顺序是什么?
  4. 消息内容:是否包含随机数、时间戳、身份、协议用途和受保护数据?哪些字段被 MAC 或签名覆盖?
  5. 协议动作:收到消息后如何验证、更新状态、拒绝重复项或终止会话?
  6. 攻击检查:攻击者能否冒充身份、重放旧消息、反射挑战,或将消息移到另一会话、角色或协议中?

协议目标必须落实为可检查的字段与验证步骤。例如,若 Bob 要证明电子合同来自 Alice 且 Alice 日后不能否认,仅用 MAC 不够,因为共享密钥的 Bob 也能生成该 MAC;需要考虑由 Alice 的私钥生成、第三方可用公钥验证的数字签名。

7. 协议消息中的上下文绑定

课件用共享密钥 MAC 与公钥签名展示了多种协议构造。分析这些构造时,重点不是只看是否出现了 MAC 或签名,而是确认认证保护覆盖了什么:

  • 发起者与接收者身份;
  • 当前挑战、时间戳或序列号;
  • 消息方向与角色;
  • 协议名称、用途及会话上下文;
  • 需要保护的业务数据。

若响应只认证随机数,却未绑定身份或方向,攻击者可能把一个会话中的有效响应移用到另一个会话。两个方向若签署相同字段且顺序含糊,也可能造成反射、重放或角色混淆。协议应使用无歧义的编码,并让每方验证收到的字段与预期会话完全一致。

复习重点

  1. 实体认证需要证明来源,并证明响应足够新鲜;
  2. 挑战-响应通过将新挑战纳入受认证的响应来抵御简单重放;
  3. 时间戳依赖时钟同步,序列号依赖状态一致,随机数依赖唯一性与适当的随机生成;
  4. 冒充、重放和反射是不同攻击,防护需要分别检查来源、新鲜性和身份/方向绑定;
  5. 分析协议时同时检查假设、消息流、消息字段与接收方动作。