I'm working on an application that'll be used by relatively non tech-savvy users, and while the machines will have internet access, the app can't have any sort of hosted intermediary.
The app allows people to take a file, compresses it down and encodes it as an image for sharing on sites like GitHub to aid in sharing things like test files etc.
The first version of the app works just fine, but sometimes there's data that needs sharing that is sensitive and some level of encryption is called for.
Ideally I want to go down the public / private key pair route, but sharing these is cumbersome and complicated from the user's perspective.
I'd like to be able to (somehow):
- Take a user's e-mail address and use this as the public key
- Take a password from the user and use this to derive a private key
- Entangle these somehow such that they can be used in this manner.
It doesn't really matter if the e-mail address ultimately resolves to something else that is then used, but the general flow needs to be such that:
- Alice wants to encrypt an image for use by a particular user
- Alice types in the e-mail address of that user (or some other string for the target - e.g. a group)
- Bob downloads the image into the app and types in his private password to unpack it.
The app could also sign the data using the private keys for verification on the other side as well.
I know I could use a password-derived public/private key, but that means that the single password could be used to derive both parts, and would make it ultimately useless.