
简单来说, 任何一端生成一个密码, 发送给另一端. 此后两端通信使用都是用该密码进行加密解密.
存在的问题
如图中 Sniffer 所做, 任何 Client 和 Server 间的数据都可以被窃取.
常见算法
公钥密码都是基于某个数学难题, 从而实现如下功能:
- 某个算法可以生成两个数据, 一个叫做私钥, 一个叫做公钥
- 私钥
- 可加密任何数据
- 可解密被公钥加密的数据
- 用于生成公钥
- 只能自己保留
- 公钥
- 可加密任何数据
- 可解密被私钥加密的数据
- 可以公开给别人

上图中,
- 客户端 -> 服务端: 传递 公钥
- 客户端使用某种算法生成了一对秘钥(公钥 和 私钥), 并将 公钥 发送给了服务端
- 服务端收到了 公钥. 同时, Sniffer 也窃听到了公钥
- 服务端 -> 客户端: 传递 对称密码
- 服务端生成了一个 对称密码, 然后使用刚收到的公钥加密了这个 对称密码, 并发送给了客户端
- 客户端收到了这段密文. 使用自己的 私钥 解密了密文, 获得了从服务端传来的 对称密码
- 但此时, Sniffer 虽然也窃取到了这段密文, 但是 Sniffer 没有 私钥, 因此无法解密这段内容
- 客户端 -> 服务端: 使用 对称密码 通信
- 客户端使用刚解密得到的 对称密码 对数据加密, 然后发送给客户端
- 服务端又收到了密文, 并使用之前生成的 对称密码 解密数据, 得到了原文
- 此时, Sniffer 依然能够窃取到密文, 但是他没有 对称密码, 所以还是无法解密
- 客户端 -> 服务端: 使用 对称密码 通信
- 客户端和服务端继续使用 对称密码 进行通信
- Sniffer 即便窃取到密文, 也无法解密
解决的问题
解决了 对称密码 中 秘钥配送问题. 即: 客户端成功的将密码安全的发送给服务端, 而不被窃听者获取到原文.
常见算法
坚持原创技术分享,您的支持将鼓励我继续创作!
微信打赏