<div dir="ltr">Makes perfect sense. :)</div><div class="gmail_extra"><br><div class="gmail_quote">2017-11-10 0:28 GMT+01:00 Trevor Perrin <span dir="ltr"><<a href="mailto:trevp@trevp.net" target="_blank">trevp@trevp.net</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Thu, Nov 9, 2017 at 9:30 PM, Piotr Lizończyk<br>
<<a href="mailto:piotr.lizonczyk@gmail.com">piotr.lizonczyk@gmail.com</a>> wrote:<br>
> Separate document sounds reasonable - choosing to follow another philosophy<br>
> for structuring negotiation data contents wouldn't mean diverging from<br>
> NoiseSocket spec at all.<br>
<br>
</span>Yeah, exactly - there's lots of possible languages for negotiation,<br>
versioning, etc, so NoiseSocket would be independent from that.<br>
<span class=""><br>
<br>
> I think that basic fields should include:<br>
> 1) version (both noiseprotocol and noisesocket, i.e. spec revision). Version<br>
> of NoiseLink could be useful too.<br>
> 2) initial noise protocol<br>
> 3) noise protocols supported<br>
><br>
> Most reasonable format for 3) would consist of handshake<br>
> patterns/cipher/dh/hash supported (quite small in size), though it would put<br>
> some constraints on the user - inability to support only specific<br>
> combinations of those, not every possible combination of supported<br>
> algorithms. Not sure if it would have any reasonable usecase, but it's worth<br>
> considering at the early stage of design.<br>
<br>
</span>Good question: Should the client advertise a single list of Noise<br>
protocols she supports, or separate lists for pattern, DH, cipher,<br>
hash.<br>
<br>
Earlier I suggested separate lists [1].<br>
<br>
But now I'm leaning towards a single list as the best starting point.<br>
It gives us maximum flexibility, since a list of protocol strings<br>
could contain anything, including names that wouldn't fit into a<br>
pattern/DH/cipher/hash breakdown:<br>
  "Noise_XX_25519_DiscoKeccak",<br>
  "NoiseV2_XX_25519_AESGCM_<wbr>SHA256",<br>
  "TLS_13_25519_AESGCM_SHA256",<br>
  etc<br>
<span class=""><br>
<br>
> By the way, had a quick glance at TLS's CLIENT_HELLO - it has session_id<br>
> field in it<br>
<br>
</span>As David said, sending a SessionID / Session Ticket is how the TLS<br>
client identifies a PSK for PSK-based resumption.  If we do 0-RTT<br>
connections with public keys (e.g. ?K patterns), instead of PSK<br>
resumption, we don't need it.<br>
<br>
But at some point we'll hopefully spec out PSK resumption, probably<br>
like [2], and that will require the client to send a SessionID /<br>
Session Ticket field.<br>
<span class=""><br>
> I'd see this field as an optional one, so maybe we could have<br>
> "optional data field" at the end of negotiation data that could contain such<br>
> data.<br>
<br>
</span>What I'm thinking is we can describe the contents of our default<br>
negotiation_data in abstract terms that can be translated into<br>
protobufs, XML, JSON, or your favorite encoding language.  Then we get<br>
parsing and extensibility mostly for free, and higher-level protocol<br>
designers can use whatever they're already using.  Make sense?<br>
<br>
<br>
Trevor<br>
<br>
[1] <a href="https://moderncrypto.org/mail-archive/noise/2017/001211.html" rel="noreferrer" target="_blank">https://moderncrypto.org/mail-<wbr>archive/noise/2017/001211.html</a><br>
[2] <a href="https://moderncrypto.org/mail-archive/noise/2017/001215.html" rel="noreferrer" target="_blank">https://moderncrypto.org/mail-<wbr>archive/noise/2017/001215.html</a><br>
</blockquote></div><br></div>