Supersingular Isogeny Diffie-Hellman: Post-Quantum Curves [pdf]
eprint.iacr.org
eprint.iacr.org
We present a full-fledged, high-speed implementation of (unauthenticated) ephemeral SIDH that currently provides 128 bits of quantum security and 192 bits of classical security. This implementation uses 48-byte private keys to produce 751-byte ephemeral Diffie-Hellman public keys, and is currently written almost entirely in C with only a limited set of functions written in assembly. To our knowledge, our library presents the first SIDH software that runs in constant-time, i.e., that is designed to resist timing and cache timing attacks.
https://s-media-cache-ak0.pinimg.com/736x/0f/92/7f/0f927f795...
Isogenies are mappings between curves. So maybe one way to start getting your head around isogeny crypto is that you're dealing in higher-order curve structures.
Diffie-Hellman gets around this by having each side share only part of a key, while keeping the other part secret. Both sides can then mix their own secret part with the other side's shared part to derive a common encryption key. An eavesdropper can't learn anything, though, since they only see the shared parts, not the critically-important secret parts.
The Diffie-Hellman algorithm comes in several different flavors. The current state-of-the-art is ECDH, which is fast and uses small keys. The problem is that ECDH only provides security against classical computers. If an eavesdropper has access to a big 256-bit quantum computer, they can work backwards from the shared parts to learn the encryption key.
Big quantum computers don't exist yet, but they might one day. Therefore, cryptographers are busily searching for alternatives to ECDH that don't have quantum weaknesses. We have some alternatives already, but they are either slow or require enormous keys.
This paper shows a way to do quantum-resistant Diffie-Hellman in a way that is significantly faster and smaller than anything we have see so far. It's still a lot slower than the best ECDH (~50 million vs ~50k cycles), and they keys are still a lot bigger (751 bytes vs 32 bytes), but it's still really impressive progress. Many of the alternatives have keys measured in KB or MB, which is obviously impractical.
[edit: fixed numbers]
Also, your description implies DH exchanges are zero knowledge exchanges - that there is no way to infer the private key from the public exchange - but that's not true. It is perfectly possible - in fact, in most DH variants a 1-1 transformation - except it is entirely infeasible.
works fine on x64: TESTING ISOGENY-BASED KEY EXCHANGE --------------------------------------------------------------------------------------------------------
Curve isogeny system: SIDHp751
Key exchange tests ........................................... PASSED
BENCHMARKING ISOGENY-BASED KEY EXCHANGE
--------------------------------------------------------------------------------------------------------Curve isogeny system: SIDHp751
Alice's key generation runs in ............................... 45806658 cycles
Bob's key generation runs in ................................. 53532976 cycles
Alice's public key validation runs in ........................ 58980241 cycles
Bob's public key validation runs in .......................... 64155209 cycles
Alice's shared key computation runs in ....................... 42940225 cycles
Bob's shared key computation runs in ......................... 51437446 cycles
TESTING ELLIPTIC CURVE BIGMONT
-------------------------------------------------------------------------------------------------------- BigMont's scalar multiplication tests ........................ PASSED
BENCHMARKING ELLIPTIC CURVE BIGMONT
-------------------------------------------------------------------------------------------------------- BigMont's scalar multiplication runs in ...................... 5950262 cycles TESTING ISOGENY-BASED KEY EXCHANGE
--------------------------------------------------------------------------------------------------------
Curve isogeny system: SIDHp751
Key exchange tests ........................................... PASSED
BENCHMARKING ISOGENY-BASED KEY EXCHANGE
--------------------------------------------------------------------------------------------------------
Curve isogeny system: SIDHp751
Alice's key generation runs in ............................... 91654657 cycles
Bob's key generation runs in ................................. 107973852 cycles
Alice's public key validation runs in ........................ 114289149 cycles
Bob's public key validation runs in .......................... 126421809 cycles
Alice's shared key computation runs in ....................... 84909767 cycles
Bob's shared key computation runs in ......................... 104901163 cycles
TESTING ELLIPTIC CURVE BIGMONT
--------------------------------------------------------------------------------------------------------
BigMont's scalar multiplication tests ........................ PASSED
BENCHMARKING ELLIPTIC CURVE BIGMONT
--------------------------------------------------------------------------------------------------------
BigMont's scalar multiplication runs in ...................... 13041518 cycles
It only builds targeting 'x64', though - not 'Win32'.
The source is actually fairly well documented, too.Well done to the people at MSR behind this paper!