基础
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鉴别(authentication)Next实体鉴别

Last updated 1 year ago

数字签名就能够实现对报文的鉴别。

然而这种方法有一个很大的缺点,就是对较长的报文进行数字签名会使计算机增加非常大的负担,因为这需要进行较多的时间来进行运算。

密码散列函数

散列函数具有以下两个特点:

  1. 散列函数的输入长度可以很长,但其输出长度则是固定的,并且较短。

  2. 不同的散列值肯定对应于不同的输入,但不同的输入却可能得出相同的散列值。

报文鉴别码

在报文鉴别中使用散列函数的方式如下:

  1. 用户 A 首先根据自己的明文 X 计算出散列 H(X)。为方便起见,把得出的散列 H(X) 记为 H。

  2. 用户 A 把散列 H 拼接在明文 X 的后面,生成了扩展的报文(X,H),然后发送给 B。

  3. 用户 B 收到了这个扩展的报文(X,H)。B 通过散列函数的运算,计算出收到的明文 X 的散列 H(X)。若 H(X)=H,则 B 似乎可以相信所收到的明文是 A 发送过来的。

    因为散列的长度 H 是早已知道的固定值,因此很容易便可以把收到的散列 H 和明文 X 分离开。

上面列举的做法,实际上是不可行的。设想某个入侵者创建了一个伪造的报文 M ,然后也同样地计算出其散列 H(M),并且冒充 A 把拼接有散列的扩展报文发送给 B。B 收到扩展的报文(M,H(M))后,按照上面步骤 3 的方法进行验证,发现一切都是正常的,就会误认为所收到的伪造报文就是 A 发送的。

解决上述问题的办法并不复杂,就是对散列进行一次加密。

从上图可以看出,在 A 从报文 X 导出散列 H 后,就对散列 H 用密钥 K 加密。这样得出的结果叫做报文鉴别码 MAC(Message Authentication Code)。

  • A 把已加密的报文鉴别码 MAC 拼接在报文 X 的后面,得到扩展的报文,发送给 B。

  • B 收到扩展的报文后,先把报文鉴别码 MAC 与报文 X 分离出来。然后用同样的密钥 K 对收到的报文鉴别码 MAC 进行解密运算,得出加密前的散列 H。再把报文 X 进行散列函数运算,得出散列 H(X)。最后,把计算出的散列 H(X) 与 H 进行比较。如一致,就可以相信所收到的报文 X 的确是 A 发送的。

由于入侵者不掌握密钥 K ,所以入侵者无法伪造 A 的报文鉴别码 MAC,因而无法伪造 A 发送的报文。这样就完成了对报文的鉴别。

上面给出的鉴别报文的方法实际上还有不少问题有待解决。例如,采用什么样的方法可以安全有效地来分发通信双方共享的密钥 K?一种可行的方法是采用公钥系统。

用户 A 用其私钥对散列 H 进行加密,得出报文鉴别码 MAC。然后 A 把报文鉴别码 MAC 拼接在报文 X 的后面,构成扩展的报文发送给 B。B 收到扩展的报文后,采取的做法和前面所述的基本一样,不同的地方是,对收到的报文鉴别码 MAC 是用 A 的公钥进行解密。

由于入侵者没有 A 的私钥,因此他不可能伪造出 A 发出的报文。采用这样的方法得到的扩展报文,不仅是不可伪造的,也是不可否认的。