"So, how did you spend your vacation Steve?" I built a basic system that allows common (i.e., non-technical) people to send truly private e-mails to each other. Yes, even the NSA will have a hard time reading your messages with this system, assuming it's implemented properly. Try it out.
I began my vacation by stewing about a problem that I needed solved. My gut told me someone should have solved it already. Yet, I couldn't find anything out there in the open source or commercial worlds that covers this particular problem space in the way I think it should be addressed. (I know, I sound like every other programmer out there.)
I put a call out to some of my engineering colleagues asking if they knew of something, since I would rather use something than write it. When nothing viable appeared I tried to paint a picture for a likely solution and invited them to tell me it was dumb and show me how it should be done for elegance, end-user delight and security.
(Now, before you start commenting on the page telling me about S/MIME and PGP let me assure you that I know all about them. I wanted something the average non-computer user could manage, which ruled them out.)
Here's what I described.
Recently I was working with someone to put together a travel itinerary. When it came time to book flights, write letters of invitation, and coordinate the various other logistics related to international travel I was asked to send my passport information and a bunch of other personal information to someone via e-mail. Of course, having written white papers on the issues with this, I knew not to do it. (See: Securing E-mail with Digital Certificates and Email is insecure but it doesn't have to be) However, since the person on the other end was neither close by or a geek I was at a loss for how to elegantly transfer this information to them without exposing it to all manner of risk.
So, I needed a way to send sensitive information (e.g., social security number, passport number, credit card number, bank info, a password, etc) to someone who is not near me and may not have S/MIME or PGP (and likely is not geeky enough to set it up) but does have a Web browser, an e-mail address, and an additional channel of communication (e.g., phone, SMS, Skype, IM, etc).
What to do?
A zero-knowledge Web-based message service that sends self-destructing messages.
Creating a message:
A Web application allows an authenticated person to enter a text message and an recipient e-mail address (the sender's identifier is also part of the package). All the encryption of the plain-text message is accomplished on the client-side without the plain-text message or the pass phrase passing over a network. The encrypted message and its metadata is sent to the server (over HTTPS) for storage.
All messages have a default lifetime, after which they will be deleted by the system whether they have been read or not. Once a message is opened the viewer has a certain amount of time to read it (or copy it) before it self-destructs.
Sending the message:
When the message has been composed and encrypted the system sends an e-mail to the recipient with the unique URL to the message. At the same time the sender is presented with the pass phrase they entered (and told not to loose it because it will never be shown again), told that the URL has been sent to the recipient but the sender now needs to deliver the pass phrase to the recipient via a different channel (e.g., phone, skype, SMS, etc) in order for the recipient to be able to view the message.
NOTE 1: Because there is a risk that a sender could make the mistake of including both the message URL and pass phrase in the same message the URL for the message is never known to the sender.
NOTE 2: The pass phrase is only ever presented at the time of composition but never again.
Retrieving the message:
The recipient receives e-mail containing the message URL and clicks the URL. The recipient is asked to enter the pass phrase and the message is decrypted on the client-side.
- Service operator has zero knowledge of message contents because of client-side encryption/decryption.
- Neither sender or recipient need any special software beyond a Web browser.
The Minimum Viable Product (Prototype)
Please comment on this page with your impressions. Does this exist somewhere already or do you want to help me refine this? Let me know that too.