I’m writing a file server in Java on Windows using encryption that is resistant to Shor’s algorithm.
My stumbling block is the SSL/TLS. From what I can gather, I can’t use the standard java libraries as the socket encryption uses a Diffie-Hellman key exchange, which relies on the discrete logarithm problem.
I’ve looked into Salsa20, a new (ish) stream cipher, but the problem of securely exchanging keys remains. I’ve also looked at cyaSSL but the Java service provider doesn’t support windows, and using C is not an option.
Can anyone provide any direction?
There are two general approaches:
Use a pre-shared key
No key exchange, no quantum problems. But now you need to distribute the shared key out-of-band, so it probably doesn’t solve the problem.
Use a quantum proof key-exchange
For example here is a spec for NTRU (only a draft, no real standard, and beware of patents)
But in general asymmetric post-quantum crypto doesn’t seem production ready.