基础
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. 网络安全

密钥分配

Previous实体鉴别

Last updated 1 year ago

对称密钥的分配

对称密钥分配存在以下两个问题:

  1. 如果 n 个人中的每一个需要和其他 n – 1 个人通信,就需要 n(n - 1) 个密钥。但每两人共享一个密钥,因此密钥数是 n(n - 1)/2。如果 n 是个很大的数,所需要的密钥数量就非常大。

  2. 通信的双方怎样才能安全地得到共享的密钥呢?正是因为网络不安全,所以才需要使用加密技术。但密钥又需要怎样传送呢?

目前常用的密钥分配方式是设立密钥分配中心 KDC(Key Distribution Center)。KDC 是大家都信任的机构,其任务就是给需要进行秘密通信的用户临时分配一个会话密钥(仅使用一次)。

  1. 用户 A 向密钥分配中心 KDC 发送时用明文,说明想和用户 B 通信。在明文中给出 A 和 B 在KDC登记的身份。

KDC 还可在报文中加入时间戳,以防止报文的截取者利用以前已记录下的报文进行重放攻击。

目前最出名的密钥分配协议是 Kerberos V5。

公钥的分配

设想用户 A 要欺骗用户 B,A 可以向 B 发送一份伪造是 C 发送的报文,A 用自己的私钥进行数字签名,并附上 A 自己的公钥,谎称这公钥是 C 的。B 如何知道这个公钥不是 C 的呢?

显然,这需要有一个值得信赖的机构来将公钥与其对应的实体(人或机器)进行绑定(binding)。这样的机构就叫做认证中心 CA(Certification Authority)。每个实体都有 CA 发来的证书(certificate),里面有公钥及其拥有者的标识信息(人名或 IP 地址)。此证书被 CA 进行了数字签名。

在图中假定用户 A 和 B 都是 KDC 的登记用户。A 和 B 在 KDC 登记时就已经在 KDC 的服务器上安装了各自和 KDC 进行通信的主密钥 KAK_AKA​ 和 KBK_BKB​。密钥分配分为三个步骤:

KDC 用随机数产生“一次一密”的会话密钥 KABK_{AB}KAB​ 供 A 和 B 的这次会话使用,然后向 A 发送回答报文。这个回答报文用 A 的密钥 KAK_AKA​ 加密。这个报文中包含这次会话使用的密钥 KABK_{AB}KAB​ 和请 A 转给 B 的一个票据(ticket),该票据包括 A 和 B 在 KDC 登记的身份,以及这次会话将要使用的密钥 KABK_{AB}KAB​。票据用 B 的密钥 KBK_BKB​ 加密,A 无法知道此票据的内容,因为 A 没有 B 的密钥 KBK_BKB​,当然 A 也不需要知道此票据的内容。

当 B 收到 A 转来的票据并使用自己的密钥 KBK_BKB​ 解密后,就知道 A 要和他通信,同时也知道 KDC 为这次和 A 通信所分配的会话密钥 KABK_{AB}KAB​。

此后,A 和 B就可使用会话密钥 KABK_{AB}KAB​ 进行这次通信了。

会话密钥 KABK_{AB}KAB​ 是一次性的,因此保密性较高。而 KDC 分配给用户的密钥 KAK_{A}KA​ 和 KBK_{B}KB​,都应定期更换,以减少攻击者破译密钥的机会。