2017-01-09 66 views
0

their documentationCurveZMQ安全性如何工作?

客户端和服务器有长期的永久密钥,并为每个 连接,他们创建和安全地交换短期瞬态 键。每个密钥都是公钥/密钥对,遵循椭圆曲线安全模型。

要启动安全连接,客户端需要服务器永久公钥 。然后它会生成一个临时密钥对,并向包含其短期公钥的服务器发送一个HELLO 命令。 HELLO命令对攻击者毫无价值;它不识别 客户端。

的服务器,当它得到一个HELLO,生成自己的短期密钥 对(一个连接使用总共四个键),并在“曲奇”,它发回编码这种新 私钥客户端作为 WELCOME命令。它还发送其短期公钥,加密后只有客户端可以读取它 。然后它丢弃这个短期钥匙 对。

在此阶段,服务器尚未为客户端存储任何状态。这是 生成一个密钥对,发送回客户端的方式只有 客户端可以读取,并抛出它。

客户回来了加密的“证实”,所以只有服务器可以读取它同修命令,它提供 服务器以其饼干回来,并在客户端永久公共密钥, 。就 客户端而言,现在服务器已通过身份验证,因此它也可以在命令中发回元数据。

服务器读取INITIATE并且现在可以验证客户端永久公钥 。它还解压缩cookie并获取连接的短期密钥对 。至于服务器现在涉及到 ,客户端现在已通过身份验证,因此服务器可以安全地发送其 元数据。双方然后可以发送消息和命令。

这握手提供了一些保护措施,但主要是,完美 前向安全性(不能使用短期甚至 键,如果你记录下来,再后来获得永久 键访问破解加密数据)和保护客户身份(客户永久公开 密钥未以明文形式发送)。

我可以理解,他们基本上是产生一套新的密钥对每个通信会话,使开裂,获得了一个临时会话私有密钥,或者获得永久私有密钥,仍然会保护过往的通信是是通过一组不同的私钥完成的。

我没有得到的是cookie部分。 cookie的用途究竟是什么?为什么服务器应该将cookie传递给客户端,只是为了重新获得它?无论如何,它看起来并不像客户端使用cookie。

回答

0

我猜测zeromq使用TCP SYN cookie(可能是事务cookie不确定)。 这是为了保护服务器免受DDOS攻击。

当TCP数据包以第一个序列号'n'(带有一些复杂的数学函数)发送时。接收器需要用'n + 1'序列来确认。发件人然后减1,并获得初始序列号('n')。

SYN cookies被放置在这个初始序列中,因此如果DDOS泛滥,序列将被篡改,并且服务器无法检索cookie。然后它不能完成握手过程并因此终止连接。

在任何合法的握手中,cookie都不能被篡改。所以Curve Server在发送给客户端以验证客户端的真实性后立即丢弃它。

更多信息: https://en.wikipedia.org/wiki/SYN_cookies

主要有两个目的,这个握手过程:

  1. 不要存储与客户端(或状态),直到它被认证什么。因此,短期密钥对被丢弃(记住,与客户端的每个连接有一个单独的密钥对 - 瞬态)
  2. 验证从两端

    一个。第一个客户端获取用客户端瞬时公钥加密的cookie和服务器临时密钥对。现在,从客户端角度看,服务器已经过验证,因为它以客户端可理解的加密方式发送数据。

    b。其次,当客户端发送回Cookie(服务器瞬时密钥对),使用服务器长期公钥,服务器解密,验证cookie,并得到客户的永久公共key.Now客户端进行身份验证加密

0

我进入了相同的问题。我在the documentationHELLO Command部分找到了我的答案。

当服务器获得一个有效的HELLO命令,它应当生成一个新的 临时密钥对,和编码都在 WELCOME命令公钥和密钥,如下所述。 服务器不会保留这个 临时密钥对,并且应该保持客户端的最小状态,直到 客户端响应一个有效的INITIATE命令。 这可以防止 遭受拒绝服务攻击,其中未经身份验证的客户端会发送许多HELLO命令来使用服务器资源。