<div dir="ltr">Trevor described this idea to me once and I haven't really seen it written down anywhere. It's an alternative to something like the CurveCP handshake for a transport encryption protocol which provides forward secrecy by deriving a unique session key each time using ephemeral D-H keys. It couples authentication to confidentiality in ways that might bother some, but at the same time is incredibly simple and I think that's an advantage in and of itself.<div>

<br></div><div>Let's say Alice has the following elliptic curve D-H keys:</div><div><br></div><div>a: long-lived private key</div><div>A: long-lived public key<br clear="all"><div><br></div><div>Alice will also generate a' and A' for each session, which are short-lived session keys.</div>

<div><br></div><div>Bob likewise has b, B , b', and B' respectively.</div><div><br></div><div>Alice can do:</div><div><br></div><div>  a * B' || a' * B' || a' * B<br></div><div><br></div><div>(The "*" character here represents Curve25519 scalar multiplication)</div>

<div><br></div><div>Bob can do the reciprocal operation and derive the same shared secret string:</div><div><br></div><div>  b * A' || b' * A' || b' * A</div><div><br></div><div>These secret strings can then be used as input to a KDF to create a session key.</div>

<div><br></div><div>If these keys haven't been tampered with in-flight, Alice and Bob should derive the same session key, and can authenticate each other via their long-lived public keys.</div><div><br></div><div>Does this seem correct, and if so, does anyone know of any literature on this approach?</div>

<div><br></div>-- <br>Tony Arcieri<br>
</div></div>