<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Feb 12, 2015 at 9:22 PM, Trevor Perrin <span dir="ltr"><<a href="mailto:trevp@trevp.net" target="_blank" onclick="window.open('https://mail.google.com/mail/?view=cm&tf=1&to=trevp@trevp.net&cc=&bcc=&su=&body=','_blank');return false;">trevp@trevp.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Those could be good use cases.  I'd love to see in-depth analysis, if<br>
you (or anyone) has time:<br></blockquote><div><br></div><div>I can try to sketch out a quick overview of the ones I really like.</div><div><br></div><div>Where Noise Pipes fit your typical TLS-style use cases, these protocols would benefit from something that looks more like DTLS.</div><div><br></div><div>Additionally, some of them might prefer Axolotl-like 0 round-trip operation if they can discover a peer's public key in advance.</div><div><br></div><div><b>ZeroMQ</b></div><div><br></div><div>- What is it?</div><div><br></div><div><a href="http://zeromq.org/">http://zeromq.org/</a><br></div><div><br></div><div>A highly flexible brokerless messaging system supporting a wide range of interaction patterns</div><div><br></div><div>- Who's using it?</div><div><br></div><div>Lots of people: <a href="http://zeromq.org/docs:labs">http://zeromq.org/docs:labs</a></div><div><br></div><div>Perhaps most notable in a crypto(-fail) context is SaltStack, a Puppet/Chef-like configuration management platform, that infamously used an RSA public exponent of 1 in their homebrew crypto because ZeroMQ didn't support any encryption options at the time: <a href="https://github.com/saltstack/salt/commit/5dd304276ba5745ec21fc1e6686a0b28da29e6fc">https://github.com/saltstack/salt/commit/5dd304276ba5745ec21fc1e6686a0b28da29e6fc</a></div><div><br></div><div>- What are the communication patterns?</div><div><br></div><div>ZeroMQ has an extremely diverse range of communication patterns that are all fundamentally rooted in asynchronous messaging. There are so many patterns I can't name them all off the top of my head, so really you should just read the documentation:</div><div><br></div><div><a href="http://zguide.zeromq.org/page:all">http://zguide.zeromq.org/page:all</a><br></div><div><br></div><div>- What crypto do they have?</div><div><br></div><div>ZeroMQ supports an encryption protocol called CurveZMQ, independently developed by Pieter Hintjens but adapted from djb's CurveCP:</div><div><br></div><div><a href="http://curvezmq.org/">http://curvezmq.org/</a><br></div><div><br></div><div>Unlike CurveCP, CurveZMQ uses TCP at layer 4 (as opposed to CurveCP's UDP with a custom and not super-awesome decongestion algorithm) and includes improvements to the key exchange protocol suggested by CodesInChaos. It is probably the most common real-world usage of a CurveCP-like protocol.</div><div><br></div><div><b>Cap'n Proto</b></div><div><br></div><div>- What is it?</div><div><br></div><div><a href="https://capnproto.org/">https://capnproto.org/</a><br></div><div><br></div><div>Both a re-envisioning of Google's Protocol Buffers as a serialization format (providing zero-copy operation and various other improvements) and a distributed RPC protocol that can be considered an improvement on CapTP, which preserves many of the same features.</div><div><br></div><div>- Who's using it?</div><div><br></div><div>Cap'n Proto is primarily used as the foundation for <a href="https://sandstorm.io/">https://sandstorm.io/</a> but implementations exist in many other languages, and it is generally interesting to anyone who wants a distributed RPC system employing a serialization format with a schema</div><div><br></div><div>- What are the communication patterns?</div><div><br></div><div>Cap'n Proto employs a highly flexible asynchronous messaging system with advanced promise pipelining features that eliminate network round-trips commonplace in most other RPC protocols: <a href="https://capnproto.org/rpc.html">https://capnproto.org/rpc.html</a></div><div><br></div><div>- What crypto do they have (or want)?</div><div><br></div><div>Cap'n Proto presently does not support encryption (besides hooks for doing it yourself with your own transport encryption library). Kenton, the author, has said he would like to build atop NaCl/libsodium.</div><div><br></div><div>From what I've heard from Kenton, he would like the minimal encryption protocol needed to secure messages that otherwise derive their security from CapTP-like protocols.</div><div><br></div><div>Cap'n Proto is highly focused on eliminating superfluous network round-trips, so a protocol that does the same (i.e. Axolotl-like 0-round trip encryption between peers that can discover each others' keys through other peers) would be the preferred mode of operation.</div></div><div><br></div><div><b>Consul/Serf</b><br></div><div><br></div><div>- What is it?</div><div><br></div><div><a href="https://www.consul.io/">https://www.consul.io/</a><br></div><div><br></div><div>A Zookeeper-like cluster management system, distributed lock service, and key-value store. In addition to that, it can also perform healthchecks. It seems pretty interesting.</div><div><br></div><div>- Who's using it?</div><div><br></div><div>I work at Square. We're interested in using it. I gather a number of other companies are using Consul, but its maker Hashicorp does not publicly advertise the users so it's hard to gauge. </div><div><br></div><div>- What are the communication patterns?</div><div><br></div><div>Consul is a peer-to-peer system which runs an instance per host in a distributed infrastructure. It uses two protocols for coordination:</div><div><ul><li>SWIM: an eventually consistent replicated state machine for group membership: <a href="http://www.cs.cornell.edu/~asdas/research/dsn02-SWIM.pdf">http://www.cs.cornell.edu/~asdas/research/dsn02-SWIM.pdf</a></li><li>Raft: a consensus algorithm that provides partition tolerance in the wake of byzantine failures</li></ul><div>- What crypto do they have (or want)?<br></div></div><div><br></div><div>Consul supports TLS for client-server operation. However...</div><div><br></div><div>The gossip protocol is secured by a homebrew algorithm using NaCl/libsodium primitives:</div><div><br></div><div><a href="https://www.serfdom.io/docs/agent/encryption.html">https://www.serfdom.io/docs/agent/encryption.html</a><br></div><div><br></div><div>All nodes encrypt asynchronous messages with a global preshared symmetric key. That's it. I guess they recently added key rotation?</div><div><br></div><div>I can provide more examples if you'd like to dig deeper...</div><div><br></div>-- <br><div class="gmail_signature">Tony Arcieri<br></div>
</div></div>