A post-quantum key distribution protocol for purely classical parties.
A love for cryptography, and a belief in the fundamental right of privacy. Moreover, NTRU is a rather unique cryptosystem and was incredibly fun to implement.
The project is a command line interface for NTRU encrypt. It allows a user to generate NTRU key pairs and encrypt randomized 256-bit keys to be used in symmetric protocols with trusted parties. Currently the main supported functions are: genKeys->(h,(f,g)), where h is the public key, and (f,g) are the private keys; encrypt(bob) encrypt a key for a user in your key ring; decrypt(c) decrypt a key sent to you to use in protocol like AES.
It is a pure Python implementation, all algorithms are from scratch. The only dependency is PyCrypto which is used for a secure PRG.
Documentation for NTRU is somewhat hard to find and the algorithms are not trivial. Implementing the cryptosystem was incredibly challenging, but we pushed through.
A number of the algorithms and data structures for NTRU are very hard to implement. In no particular order we are quite proud of the following implementations: * Robust Truncated Polynomial Ring Class * Efficient Convolution Product Algorithm * Efficient Almost Inverse Algorithm in mod 3 and mod 2^r * Fast Key Gen Algorithm * Ternary encoder
We learned a lot about NTRU Encrypt and working with the PyCrypto library. Moreover, we learned a lot about the intersection of math and programming.
We would like to extend our work to a more full cryptographic suite, something like a post-quantum "update" of PGP with stronger guarantees.
Original spec papers, emacs, blood, sweat and tears.
TBI Pro Gaming Headset
Grand Prize
$100 Amazon Gift Cards