基础
network
network
  • TCP/IP 网络模型
    • 应用层
      • 域名系统 DNS
      • 超文本传输协议 HTTP
    • 传输层
      • 用户数据报协议 UDP
      • 传输控制协议 TCP
        • TCP 报文段
        • 建立连接(三报文握手)
        • 连接释放(四报文握手)
    • 网络层
      • IPv4 地址
        • 分类的 IP 地址
        • 划分子网
        • 无分类编址 CIDR(构造超网)
      • IP 数据报的格式
      • 地址解析协议 ARP
      • IPv6 地址
    • 网络接口层
      • 数据链路层
        • 点对点协议 PPP
        • CSMA/CD 协议
          • MAC 帧的格式
          • 交换式集线器 (switching hub)
      • 物理层
  • Session 与 Cookie
  • 键入网址到网页显示,期间发生了什么?
  • Linux 系统是如何收发网络包的?
  • HTTP
    • HTTP 常见的状态码
    • HTTP 缓存技术
    • HTTP 常见字段
    • HTTPS
  • Group 1
    • 局域网
    • 网卡
    • 专用地址
    • 端口号
    • 网络安全
      • 数据加密模型
      • 数字签名
      • 鉴别(authentication)
        • 报文鉴别
        • 实体鉴别
      • 密钥分配
Powered by GitBook
On this page
  1. Group 1
  2. 网络安全
  3. 鉴别(authentication)

实体鉴别

Previous报文鉴别Next密钥分配

Last updated 1 year ago

实体鉴别和报文鉴别不同。报文鉴别是对每一个收到的报文都要鉴别报文的发送者,而实体鉴别是在系统接入的全部持续时间内对和自己通信的对方实体只需验证一次。

最简单的实体鉴别过程如下图所示。A 向远端的 B 发送带有自己身份 A(例如,A 的姓名)和口令的报文,并且使用双方约定好的共享对称密钥 KABK_{AB}KAB​ 进行加密。B 收到此报文后,用共享对称密钥 KABK_{AB}KAB​ 进行解密,从而鉴别了实体 A 的身份。

重放攻击(replay attack)

这种简单的鉴别方法具有明显的漏洞。例如,入侵者 C 可以从网络上截获 A 发给 B 的报文,C 并不需要破译这个报文(因为这可能得花很长时间),而是直接把这个由 A 加密的报文发送给 B,使 B 误认为 C 就是 A;然后 B 就向伪装成 A 的 C 发送许多本来应当发给 A 的报文。这就叫做重放攻击 (replay attack)。

为了对付重放攻击,可以使用不重数(nonce)。不重数就是一个不重复使用的大随机数,即“一次一数”。在鉴别过程中不重数可以使 B 能够把重复的鉴别请求和新的鉴别请求区分开。下图给出了这个过程:

在图中,A 首先用明文发送其身份 A 和一个不重数 RAR_ARA​ 给 B。接着,B 响应 A 的查问,用共享的密钥 KABK_{AB}KAB​ 对 RAR_ARA​ 加密后发回给 A,同时也给出了自己的不重数 RBR_BRB​。最后,A 再响应 B 的查问,用共享的密钥 KABK_{AB}KAB​ 对 RBR_BRB​ 加密后发回给 B。由于不重数不能重复使用,所以 C 在进行重放攻击时无法重复使用所截获的不重数。

在使用公钥密码体制时,可以对不重数进行签名鉴别。例如在上图中,B 用其私钥对不重数 RAR_ARA​ 进行签名后发回给 A。A 用 B 的公钥核实签名,如能得出自己原来发送的不重数 RAR_ARA​,就核实了和自己通信的对方的确是 B。同样,A 也用自己的私钥对不重数 RBR_BRB​ 进行签名后发送给 B。B 用 A 的公钥核实签名,鉴别了 A 的身份。

公钥密码体制虽然不必在互相通信的用户之间秘密地分配共享密钥,但仍有受到攻击的可能。让我们看下面的例子:

  1. C 冒充 A,发送报文给 B,说:“我是 A”。

  2. B 选择一个不重数 RBR_BRB​,发送给 A,但被 C 截获了。

  3. C 用自己的私钥 SKCSK_CSKC​ 冒充是 A 的私钥,对 RBR_BRB​ 加密,并发送给 B。

  4. B 向 A 发送报文,要求对方把解密用的公钥发送过来,但这报文也被 C 截获了。

  5. C 把自己的公钥 PKCPK_CPKC​ 冒充是 A 的公钥发送给 B。

  6. B 用收到的公钥 PKCPK_CPKC​ 对收到的加密的 RBR_BRB​ 进行解密,其结果当然正确。于是 B 相信通信的对方是 A,接着就向 A 发送许多敏感数据,但都被 C 截获了。