Recently I had thought about creating my own file hosting service where data would get encrypted in the browser using a PGP keypair that never leaves the users computer. This would mean the server (or my company) could never see the data it was hosting. Giving people privacy without the inconvenience. The idea is certainly not new and not mine to have invented, but none the less in a competitive market I thought why not give it a go.
So while designing this concept mentally I tried to think about the different angles of attack I thought of a few problems.
So having an SSL certificate gives me and the users confidence that their communication between them and my server (or at least a server) is encrypted. But it doesn’t actually prove it’s me they’re talking to. Here comes the classic man-in-the-middle attack. So this is why we have certificate authorities, right? But there is an increasing amount of certificate authorities coming with your browsers by default that I certainly don’t trust no one has (or could not have) their private keys.
There’s also another massive problem I see with SSL certificates, and that is you have to keep your private key on the server, which your host has full access to. If your host is compromised or forced to hand over your public key, any government or blackmailer could find it trivial to create a man in the middle attack by using your private SSL key. You might not even know it’s been compromised.
Also, you could argue that no one really checks the SSL certificates of websites apart from that the browser is using the https prefix. Lets say someone was able to register a certificate for your domain from any number of certificate authorities, would you really notice the certificate authority had changed from say Verisign to Corrupt Country Spying CA?
So my next thought was, well since it doesn’t really matter if my server gets compromised, because due to the design it would never actually get your private key and therefore the data could never be decrypted, even if the server was fully compromised.
Maybe if we could PGP protect webpages, we could know that the content you are viewing actually came from me. But there is no functionality for this in the browser. I tried creating a small plugin that could do this check. While it certainly seems possible, it’s still a bit of an inconvenience for the average user.
I would love it if we could have SSL to protect the flow of data from client to server, and PGP to check the content was actually from the original author. No need to keep the private PGP key on the server, so even if it gets compromised an attacker could still not publish on your behalf.
This project actually eventually led me to the MaidSafe network, which seems like an amazing project I’m sure could be revolutionary. It does seem like having a decentralised internet makes the ability for man-in-the-middle attacks a lot more difficult. You could not upload new data without your Safe private key, meaning it would be harder to impersonate someone.
Anyway just a bit of ramblings I thought might spark some interesting conversation. Maybe I’m completely insane and SSL is the only real solution we have for now. Do you think there is any benefit to having the ability for a browser to check PGP signed webpages? How could this even work from a standards point of view? Just having a file on the server with .pgp at the end (mysite.com/index.html.pgp)?
It does raise the question how could you check the websites public key is actually accurate? Maybe it doesn’t really solve anything at all?