<div dir="ltr"><div><div><div><div>There is a new post-quantum algorithm called Kyber, which comes from the same family as NewHope.  Where NewHope only supported DH-like ephemeral operations, Kyber is a key encapsulation method (KEM) that can be used for both ephemeral and static use cases.  The paper [1] and reference code [2] are linked below.<br><br></div><div>I have thrown together a quick draft as to how Kyber could be used for Hybrid Forward Secrecy (I haven't implemented this - it's all theoretical) in [3].  This uses Kyber in ephemeral-only mode to augment the forward secrecy of a classical DH-using Noise handshake.  But Kyber is of course capable of much more.<br><br></div><div>To make the best use of Kyber, we need to think about how KEM's in general would work with Noise.  New tokens?  Hijack existing tokens?  I'm not really sure right now.<br><br></div><div>Looking at the paper, some of the mechanics of authenticated key exchange would come for free from the way Noise's chaining key works.  The paper talks about hashing together the results of ephemeral and a static KEM exchanges to generate a common shared key.  We already get that for free with how es and se work.<br><br>Off the top of my head: if we had ekem and skem tokens for example, we could treat the ephemeral and static parts of the exchange separately and then get the authenticated aspect by chaining together applications of MixKey() in the appropriate order.<br><br></div>Cheers,<br><br></div>Rhys.<br><br></div>[1] Paper: <a href="https://cryptojedi.org/peter/index.shtml#kyber">https://cryptojedi.org/peter/index.shtml#kyber</a><br></div>[2] Reference code: <a href="https://github.com/pq-crystals/kyber">https://github.com/pq-crystals/kyber</a><br>[3] <a href="https://github.com/rweather/noise_spec/blob/kyber/extensions/ext_kyber.md">https://github.com/rweather/noise_spec/blob/kyber/extensions/ext_kyber.md</a><br><br></div>