在互联网上传输共享密钥都会遇到这个问题,怎么能让对方安全地拿到密钥而不会被拦截到呢?

主要有三种解决方式:

  1. 公钥机制
  2. Diffie-Hellman
  3. 密钥分配中心
    ...

下面将详细讲解这些解决方案,如何安全地将秘钥配送到目的地。

公钥机制

非对称加密:使用公钥加密、私钥解密,避免直接传输共享密钥。

流程:

  1. 接收方生成密钥对:接收方生成公私钥对,公钥公开,私钥保密。

  2. 发送方加密共享密钥:发送方用接收方的公钥加密共享密钥(如 AES 密钥)。

  3. 传输加密的共享密钥:将加密后的共享密钥发送给接收方。

  4. 接收方解密:接收方用自己的私钥解密,获得共享密钥。


Diffie-Hellman

数学原理:基于离散对数问题,双方通过公开交换参数生成共享密钥,无需传输密钥本身。


密钥分配中心——KDC

可信第三方:通过一个中心化的权威机构(密钥分配中心——Key Distribution Center, KDC)为通信双方分配临时会话密钥。

image

密钥分配流程(以 Kerberos 协议为例)
角色:

  • 用户A:想与服务B通信。
  • KDC:密钥分配中心,存储所有用户和服务的长期密钥。

步骤1:用户A向KDC证明身份

  1. 用户A登录:输入账号密码。
  2. 生成临时请求:
    • 用户A向KDC发送明文请求:“我是A,想联系B”。
    • 未加密传输:此步骤仅声明意图,不含敏感信息。

步骤2-3:KDC生成「会话密钥」和「票据」

  1. 验证用户A身份:
    • KDC用A的密码生成长期密钥(如通过哈希计算),解密A的历史认证数据(若密码正确)。
  2. 创建会话密钥:
    • KDC生成一个临时会话密钥 $ ( K_{AB} ) $ (仅本次通信使用)。
  3. 加密并打包:
    • 用户A的包:用A的长期密钥加密 $ ( K_{AB} ) $ 和服务B的地址。
    • 服务B的票据:用服务B的长期密钥加密 $ ( K_{AB} ) $ 和用户A的信息。

步骤4:用户A获取会话密钥和票据

  1. 接收KDC的回复:
    • 用户A收到两个加密包:
      • 包1:用A的密码解密后得到 $ ( K_{AB} ) $ 和B的地址。
      • 包2(票据):无法解密(用B的密钥加密),需直接转发给B。

步骤5:用户A联系服务B

  1. 发送票据和认证信息:
    • 用户A将票据和一条用 $ ( K_{AB} ) $ 加密的时间戳发送给B。
  2. 服务B解密票据:
    • B用自己的长期密钥解密票据,获得 $ ( K_{AB} ) $ 和用户A的信息。
  3. 验证时间戳:
    • B用 $ ( K_{AB} ) $ 解密时间戳,确认请求是新鲜的(防止重放攻击)。

步骤6:双方安全通信

  • 用户A和服务B 使用临时会话密钥 $ ( K_{AB} ) $ 加密后续所有通信。
  • 会话结束后: $ ( K_{AB} ) $ 被丢弃,下次通信生成新密钥。
posted on 2025-05-06 14:24  Mysticbinary  阅读(109)  评论(0)    收藏  举报