0%

对称密码与公钥密码

对称密码 (也称: 共享密码)

简单来说, 任何一端生成一个密码, 发送给另一端. 此后两端通信使用都是用该密码进行加密解密.

存在的问题

如图中 Sniffer 所做, 任何 Client 和 Server 间的数据都可以被窃取. 包括图中 1 所做的: 交换对称秘钥. 一旦 Sniffer 获取了通信两端用于加密数据的对称秘钥, 那么后续的密文都可以被解密.

常见算法


公钥密码

公钥密码都是基于某个数学难题, 从而实现如下功能:

  • 某个算法可以生成两个数据, 一个叫做私钥, 一个叫做公钥
  • 私钥
    • 可加密任何数据
    • 可解密被公钥加密的数据
    • 用于生成公钥
    • 只能自己保留
  • 公钥
    • 可加密任何数据
    • 可解密被私钥加密的数据
    • 可以公开给别人

上图中,

  1. 客户端 -> 服务端: 传递 公钥
    1. 客户端使用某种算法生成了一对秘钥(公钥私钥), 并将 公钥 发送给了服务端
    2. 服务端收到了 公钥. 同时, Sniffer 也窃听到了公钥
  2. 服务端 -> 客户端: 传递 对称密码
    1. 服务端生成了一个 对称密码, 然后使用刚收到的公钥加密了这个 对称密码, 并发送给了客户端
    2. 客户端收到了这段密文. 使用自己的 私钥 解密了密文, 获得了从服务端传来的 对称密码
    3. 但此时, Sniffer 虽然也窃取到了这段密文, 但是 Sniffer 没有 私钥, 因此无法解密这段内容
  3. 客户端 -> 服务端: 使用 对称密码 通信
    1. 客户端使用刚解密得到的 对称密码 对数据加密, 然后发送给客户端
    2. 服务端又收到了密文, 并使用之前生成的 对称密码 解密数据, 得到了原文
    3. 此时, Sniffer 依然能够窃取到密文, 但是他没有 对称密码, 所以还是无法解密
  4. 客户端 -> 服务端: 使用 对称密码 通信
    1. 客户端和服务端继续使用 对称密码 进行通信
    2. Sniffer 即便窃取到密文, 也无法解密

解决的问题

解决了 对称密码秘钥配送问题. 即: 客户端成功的将密码安全的发送给服务端, 而不被窃听者获取到原文.

常见算法

  • RSA