[zeromq-dev] Curvezmq guide on handshake etc. could use some clarifications

Jonas Thiem jonasthiem at googlemail.com
Tue Sep 16 16:48:37 CEST 2014


I read through some parts of the Curvezmq guide:
http://curvezmq.org/page:read-the-docs#toc5 .. and I wondered with
some folks in freenode / #zeromq about some details and we couldn't
figure them out.

Let me note I'm not a cryptographer or anything, I just have very
basic understanding of asynchronous encryption. So feel free to ignore
this if I don't make any sense.

Our unanswered questions were:
1. Is the initial HELLO from the client to the server unencrypted?
Because it seems like it should be encrypted with the server public
key to ensure only the server can read it to mitigate MITM - but the
guide doesn't seem to specifically mention this.

2. Is the client ever required to have his secret key to read
something during the handshake process?

   Because while everything seems to be encrypted to the client using
the temporary keypairs and the client needs to prove it owns the
permanent public key by sending, it appears that the client only needs
the corresponding permanent secret key if it wants to receive
something after the whole handshake procedure. (or not at all if it
only plans to send, not to receive)

   That would mean for a protocol where sending administration
commands under some client identity without necessarily reading the
response, curve zmq wouldn't sufficiently ensure the client's

3. If the client's identity isn't ensured, does the zmq authenticator
- given a list of valid public keys - do this? (make a roundtrip with
secret data to the client and verify it can read it, therefore owns
the according secret key?) Otherwise, am I supposed to handle this in
my application protocol?

I hope I made some sense with those questions. If those points could
be cleared up in the guide, that would be very helpful.

PS: mrvn on the IRC channel suggested making some graphical
illustrations in addition:

More information about the zeromq-dev mailing list