<p dir="ltr">Hey Trevor,</p>
<p dir="ltr">In the car headed on a backpacking trip, using my phone, so I'll give a proper reply and review on Tuesday when I'm home, but preliminary thoughts on smartphone reading:</p>
<p dir="ltr">- Fission() for session derivation - do it once for one, and the other keeps the original kernel. This amounts to the same thing as before, right? Since getkey is called for n+1 and n+2 and the new sessions start at 0. So no real change here -- just wording. Is this correct?</p>
<p dir="ltr">- In the old spec, when writing a handshake message, everytime there was an encrypted write, the entire prior contents of the message was put as ad to encrypt. My understanding was this was a clever way of preventing reordering attacks. I didn't see this in the new spec, though I may have overlooked something on my smartphone. Is this because simply calling MixHash is sufficient? Since the hash is authenticated at each step, and so if each message part is sequentially mixed in, we'll ensure ordering? If so, for any additional fields in the handshake messages, such as my timestamp at the end, can I MixHash it in safely? Also, if so, I didn't see MixHash mentioned with WriteEphemeral. Is that because it's dangerous to call MixHash on non secret data? In any case, one downside is that any prologue or prepended message type or transmitted explicit nonce isn't reorder-resistant, unless those too are kosher for calling MixHash on. Personally I'd like to mix every part of the message into h as I write it, and then put h as ad for each encryption.</p>
<p dir="ltr">- You clear h before sending application messages, and then it appears that h isn't touched again. That means application messages don't make use of the ad param, right? That's a nice simplification. Any downsides to it? Presumably the derived key already ties the application session to the parent handshake session, so carrying over the h value doesn't really add much except more work for poly.</p>
<p dir="ltr">Okay that's all for now as it's 3am and we're about to drive over some super dangerous mountain pass and I should probably pay attention. I'll read more closely on Tuesday.</p>
<p dir="ltr">Jason</p>
<div class="gmail_quote">On Aug 22, 2015 1:33 AM, "Trevor Perrin" <<a href="mailto:trevp@trevp.net">trevp@trevp.net</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
I've been preparing a new branch of Noise, with most text rewritten<br>
and some substantive changes:<br>
<br>
<a href="https://github.com/trevp/noise/blob/noh/noise.md" rel="noreferrer" target="_blank">https://github.com/trevp/noise/blob/noh/noise.md</a><br>
<br>
<br>
Probably could use some text polishing, but I wanted to get this out<br>
for feedback, so please send some!<br>
<br>
<br>
Terminology changes:<br>
<br>
 * Instead of Box / Handshake distinction for one-shot or interactive<br>
handshakes, now there is a Handshake / Application message<br>
distinction, and within the Handshake a One-way vs Interactive<br>
distinction.<br>
<br>
 * The symmetric-key crypto is encapsulated into a "kernel" object.<br>
The main benefit is ease of presentation, but this might also make it<br>
clearer how to swap in new symmetric-key crypto like sponges.<br>
<br>
Main changes:<br>
<br>
 * Handshake hashing was a weird mix of hashing completed messages,<br>
plus using AAD to cover partial messages.  This meant repeatedly<br>
authenticating or hashing the same data.  Also, the hashes were left<br>
around for the lifetime of the session.  The new system only hashes<br>
relevant fields, once, and stops authenticating the hash after the<br>
handshake.<br>
<br>
 * A notion of "branching" has been added so you can specify how to<br>
branch between different versions, or ciphersuites, or handshake<br>
patterns.<br>
<br>
 * Prologue had an unclear purpose, so was removed.  If you want to<br>
send plaintext data during an early handshake message, just use the<br>
payload.  If you want to send a version or type indicator, use<br>
branching.<br>
<br>
 * The "conventions" I mentioned earlier have been added, including<br>
framing and padding fields.  Also, handshake messages use an extension<br>
system that allows one party to offer support for new things that will<br>
be ignored by older implementations.<br>
<br>
 * I've fleshed out a range of ways to send application messages,<br>
allowing for forward-secure key updating / ratcheting, and explicit<br>
nonces.<br>
<br>
 * Ciphersuites have been separated into "DH functions" and a<br>
symmetric-key "cipherset", since there was no reason to tie these<br>
together.<br>
<br>
<br>
Trevor<br>
_______________________________________________<br>
Noise mailing list<br>
<a href="mailto:Noise@moderncrypto.org">Noise@moderncrypto.org</a><br>
<a href="https://moderncrypto.org/mailman/listinfo/noise" rel="noreferrer" target="_blank">https://moderncrypto.org/mailman/listinfo/noise</a><br>
</blockquote></div>