I'm pondering a problem of how to enable transfers of files from clients to people that does not yet have an application/account/keys yet.
Here's my current thought for Alice wanting to send Bob FancyPants.png through my tool:
- Generate random UUID
- Generate encryption keys from that UUID
- Encrypt FancyPants with the key
- Upload to server
- Ask Alice for Bobs e-mail and send "You have a file waiting, click here to download client and retrieve file securely"
- Alice sends Bob the UUID out-of-band, somehow.
- Bob clicks the link, enters the UUID on a page and receives a client prepared to start downloading FancyPants.png from the server.
However this method has a couple of problems, step 1, 6 and step 7.
Point 1 since I figure some form of user input would be good, otherwise it's basically just a random key and doesn't require any previous knowledge so anyone can generate it.
Point 6 since it's an out-of-bounds method which likely means they'll likely e-mail or sms in cleartext potentially defeating the whole encryption.
Point 7 since at that point my server will know the unencrypted file, which I'd like to avoid.
Are there any ways around these? I'm looking into if something might be usable like private set intersection or oblivious transfer but people here seem really knowledgeable and might know a better way.
This might be too vague but let me know and I'll edit it. I also don't know how this should be tagged, suggestions highly welcome.
/dev/urandom
on Linux orCryptGenRandom
on Windows. Most programming languages include wrappers of these in their standard library. $\endgroup$man 4 random
dated 2010-08-29). If you want to be certain that the randomness corresponds to available entropy (within system estimations) then read from /dev/random and be aware that the read may block for potentially a long time. $\endgroup$