o1c-dev / o1c

O(1) Cryptography is an easy to use, hard to misuse Java cryptographic library based on O(1) cryptographic algorithms
ISC License
15 stars 2 forks source link

Create a high level API for securing messages #5

Open jvz opened 3 years ago

jvz commented 3 years ago

Consider the design of Themis: https://docs.cossacklabs.com/themis/crypto-theory/cryptosystems/secure-message/

And consider the NaCl and libsodium API, the box APIs for authenticated public-key encryption, and the sealed box APIs for anonymous public-key encryption.

Create an analogous API here using XChaCha20-Poly1305 and X25519. This should cover sending encrypted messages and signed messages.

Essentially, given Alice and Bob both have XDH keypairs, we can compute a shared secret to generate a symmetric key. Implementing a perfect-forward-secrecy variant involving ephemeral keypairs and signatures for authentication rather than the static XDH keys would be out of scope for messages at this level and is scoped in #6.

jvz commented 3 years ago

After much experimentation, it seems like Ristretto255 is a bit easier to use for this purpose. https://github.com/jedisct1/libsodium-signcryption provides a nice pattern and implementation. Combined with a similar strategy to #4, a complete message crypto API is possible.

jvz commented 3 years ago

https://datatracker.ietf.org/doc/draft-irtf-cfrg-ristretto255-decaf448/

jvz commented 3 years ago

I created a small test program in C++ using libsodium-signcryption to generate test data and updated the test here to match accordingly: https://github.com/o1c-dev/o1c-compat-tests