从their documentation:CurveZMQ安全性如何工作?
客户端和服务器有长期的永久密钥,并为每个 连接,他们创建和安全地交换短期瞬态 键。每个密钥都是公钥/密钥对,遵循椭圆曲线安全模型。
要启动安全连接,客户端需要服务器永久公钥 。然后它会生成一个临时密钥对,并向包含其短期公钥的服务器发送一个HELLO 命令。 HELLO命令对攻击者毫无价值;它不识别 客户端。
的服务器,当它得到一个HELLO,生成自己的短期密钥 对(一个连接使用总共四个键),并在“曲奇”,它发回编码这种新 私钥客户端作为 WELCOME命令。它还发送其短期公钥,加密后只有客户端可以读取它 。然后它丢弃这个短期钥匙 对。
在此阶段,服务器尚未为客户端存储任何状态。这是 生成一个密钥对,发送回客户端的方式只有 客户端可以读取,并抛出它。
客户回来了加密的“证实”,所以只有服务器可以读取它同修命令,它提供 服务器以其饼干回来,并在客户端永久公共密钥, 。就 客户端而言,现在服务器已通过身份验证,因此它也可以在命令中发回元数据。
服务器读取INITIATE并且现在可以验证客户端永久公钥 。它还解压缩cookie并获取连接的短期密钥对 。至于服务器现在涉及到 ,客户端现在已通过身份验证,因此服务器可以安全地发送其 元数据。双方然后可以发送消息和命令。
这握手提供了一些保护措施,但主要是,完美 前向安全性(不能使用短期甚至 键,如果你记录下来,再后来获得永久 键访问破解加密数据)和保护客户身份(客户永久公开 密钥未以明文形式发送)。
我可以理解,他们基本上是产生一套新的密钥对每个通信会话,使开裂,获得了一个临时会话私有密钥,或者获得永久私有密钥,仍然会保护过往的通信是是通过一组不同的私钥完成的。
我没有得到的是cookie部分。 cookie的用途究竟是什么?为什么服务器应该将cookie传递给客户端,只是为了重新获得它?无论如何,它看起来并不像客户端使用cookie。