<div dir="ltr">[re-sending now that I'm on the list so it won't bounce]<div class="gmail_extra"><br><div class="gmail_quote">On Fri, Feb 13, 2015 at 5:58 PM, Kenton Varda <span dir="ltr"><<a href="mailto:kenton@sandstorm.io" target="_blank">kenton@sandstorm.io</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi all,<div><br></div><div>I can add more background on the Cap'n Proto case.</div><div><br></div><div>Cap'n Proto is a distributed object capability protocol. A set of processes may hold object-capabilities granting access to objects hosted in other processes, and they may freely exchange these capabilities between each other. If process Alice holds a capability hosted by process Carol, Alice necessarily has a connection open to Carol. But if process Bob has never had any capabilities hosted by Carol, and vice versa, they may not have a connection. So when Alice takes her capability pointing to Carol and sends it to Bob, then Bob needs to open a new direct connection to Carol. Since we expect this to happen frequently, we want it to be fast.</div><div><br></div><div>So, we commonly have the following use case:</div><div>- Alice has preexisting open connections to Bob and Carol.</div><div>- Alice wishes to instruct Bob to open a direct connection to Carol in order to access some capability hosted there, and instruct Carol to accept that connection and allow Bob to access the capability.</div><div>- Bob doesn't care about Carol's identity except that she is the Carol that Alice told him to connect to. Similarly, Carol doesn't care about Bob's identity except that he is the Bob that Alice said was going to connect. Note in particular that we don't care if Alice can MITM this connection, because Alice is only delegating authority she already had anyway.</div><div><br></div><div>I'd like to optimize the connection opening between Bob and Carol such that:</div><div>- When Alice decides to introduce Bob to Carol, she can immediately send the introduction message to each without any non-local preparation.</div><div>- As soon as Bob receives the introduction message from Alice, he can start sending messages to Carol, without any handshake. Similarly, Carol can immediately begin sending messages to Bob.</div><div><br></div><div>I think that this can be done:</div><div>- Alice can be sure to maintain up-to-date short-term public keys for every process to which she is connected.</div><div>- Alice can forward Bob's key to Carol and vice versa in the introduction message.</div><div>- Now Bob and Carol have all they need to generate a shared secret and start sending messages.</div><div>- If Bob and Carol have already been introduced previously, they can keep using their existing session. This means there is only ever one session for any pair of keys, which seems useful for preventing replay attacks.</div><div><br></div><div>However, I'm not a crypto protocol designer so, obviously, I shouldn't attempt to design my own. Would be great if there were some common construct for this purpose.</div><div><br></div><div>Thanks,</div><div>-Kenton</div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Feb 12, 2015 at 11:30 PM, Tony Arcieri <span dir="ltr"><<a href="mailto:bascule@gmail.com" target="_blank">bascule@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Nanomsg is another interesting case study on people puzzling out encryption for an asynchronous message-oriented protocol:<div><br></div><div><a href="https://www.freelists.org/post/nanomsg/nanomsg-and-encryption" target="_blank">https://www.freelists.org/post/nanomsg/nanomsg-and-encryption</a><span><font color="#888888"><br></font></span></div><span><font color="#888888"><div class="gmail_extra"><div><br></div>-- <br><div>Tony Arcieri<br></div>
</div></font></span></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div></div>