<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Jul 12, 2017 at 11:13 AM, 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:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Thinking about this more:<br>
<br>
Short Auth Strings are useful for things like "pairing" two devices by<br>
checking that they display the same short code, or maybe even for<br>
voice authentication between two parties, where their phones display a<br>
short string which they verbally compare.<br></blockquote><div><br></div><div>Bluetooth Secure Simple Pairing (SSP) is another example of such a pairing protocol which is used in devices everywhere.  You can find the Core spec online for the gory details, but summarising: the two devices perform a crypto dance with ECDH and a bit commitment scheme to agree upon a shared secret and a 6-digit number to display on the screens for cross-checking.<br><br>In Noise terms, the shared secret is a PSK generated from the pairing session which is then used to set up subsequent sessions between those two devices.<br><br></div><div>SSP also has support for incorporating the hash of a password/pin into the crypto dance.  Useful if the headset or whatever comes with a pin printed on it.<br><br></div><div>A rough analogue in Noise for SSP would be "Noise_NNpsk0+sas" where Hash(pin) is the input PSK.  Then generate a PSK from that session for use in setting up subsequent Noise_XXpsk0 or whatever sessions.<br></div><div><br></div><div>As an aside, maybe generated PSK's can be incorporated as a "genpsk" modifier and token:<br><br></div><div>    Noise_NNgenpsk+psk0+sas:<br></div><div>      -> psk, e, commit<br></div><div>      <- e, ee<br>      -> reveal, genpsk<br></div><div><br></div><div>Where the "genpsk" token is defined as:<br><br></div><div>    ck, generated_psk = HKDF(ck, zeroes, 2)<br></div></div><br></div><div class="gmail_extra">I know we've discussed before how to generate PSK's from the Split() cipher states, but I do sort of see PSK generation as a handshake function rather than a transport function.  A token fits better.  IMHO.<br><br></div><div class="gmail_extra">Cheers,<br><br></div><div class="gmail_extra">Rhys.<br></div></div>