<div dir="ltr"><div>HI Trevor,<br><br></div>Following up on this thread, and not being a cryptographer, what's the reason for including len(ad) in the HMAC calculation? Is there some sort of attack possible if encrypt was redefined in terms of HMAC as:<br><br><div>ENCRYPT(k, n, ad, plaintext): </div><div>  plaintext || HMAC(k, n || ad || plaintext)<br><br></div><div>instead of:<br></div><div><br></div><div><div>ENCRYPT(k, n, ad, plaintext): </div><div>  plaintext || HMAC(k, n || len(ad) || ad || plaintext)<br><br></div><div>What does appending len(ad) accomplish?<br><br></div><div>thanks,<br></div><div>Adam<br></div></div><br><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>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><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 data-smartmail="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" height="14" width="96"></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></div>