<div dir="ltr"><div>Thanks Trevor, this makes sense to me that you can substitute HMAC for AEAD anywhere you use symmetric keys. In so doing, we get to use the nice handshake protections of Noise, but can keep the handshake metadata and session encrypted for our niche application.<br><br></div>-AC<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Apr 29, 2016 at 1:40 PM, Trevor Perrin <span dir="ltr"><<a href="mailto:trevp@trevp.net" target="_blank">trevp@trevp.net</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"><div class="gmail_extra"><br><div class="gmail_quote"><span class="">On Fri, Apr 29, 2016 at 8:48 AM, Adam Crain <span dir="ltr"><<a href="mailto:jadamcrain@automatak.com" target="_blank">jadamcrain@automatak.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div><div><div><br></div></div></div></div>I have a question regarding how Noise uses AEAD cipher modes to authenticate the key agreement. Is this primarily how Noise accomplishes "identity hiding"? I.e., all the key agreement payloads would be encrypted, thus observers wouldn't see any payload certificates, etc?</div></div></div></div></div></blockquote><div><br></div><div><br></div></span><div><div>Hi Adam,</div><div><br></div><div>The AEAD during handshake accomplishes a few things, not just identity hiding, e.g.</div><div> - encrypts and authenticates handshake payloads</div><div> - confirms that the other party has derived the correct keys</div><div> - confirms that the other party has the same view of handshake hash</div><div><br></div><div>If you want authentication of data, not confidentiality, I suppose you could define ENCRYPT() and DECRYPT() in terms of HMAC (which Noise needs anyways), e.g.</div><div><br></div><div>ENCRYPT(k, n, ad, plaintext): </div><div>  plaintext || HMAC(k, n || len(ad) || ad || plaintext)</div><div><br></div><div><br></div><div>A lot of the Noise patterns defer sending static public keys until they can do it under encryption, but if that doesn't matter for you, you could consider patterns where all static public keys are sent in clear, like:</div><div><br></div><div>-> e, s</div><div><- e, s, dhee, dhes, dhse</div><span class="HOEnZb"><font color="#888888"><div><br></div><div><br></div><div>Trevor</div></font></span></div><div><br></div></div></div></div>
</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><pre style="white-space:pre-wrap">J Adam Crain - Partner</pre><pre style="white-space:pre-wrap"><a href="http://www.automatak.com" style="font-family:arial,sans-serif;font-size:12.666666984558105px" target="_blank"><img src="http://www.automatak.com/images/automatak_letter_logo.png" width="96" height="14"></a><br></pre><pre style="white-space:pre-wrap">PGP 4096R/<a href="https://www.automatak.com/keys/jadamcrain.asc" style="color:rgb(17,85,204)" target="_blank">E2984A0C</a> 2013-05-03</pre></div></div></div></div></div></div>
</div>