The Web PKI 2.0 posted June 2022
The Web Public Key Infrastructure (PKI) is what's behind the green lock in your browser's URL bar. Actually, as I'm writing this, I realize that it's not even green anymore:
Now, instead of having a green lock that stands out, you get a "Not Secure" that stands out if you visit a non-HTTPS (or plain HTTP) website:
In this post I will briefly explain what this lock means, what the foundations for the security of the web are, and how blockchain technology can turn this into a better world.
The web PKI, in brief
When you talk to a website like Google, under the hood, your browser uses a protocol called TLS to secure the connection (and display the lock icon).
Part of that protocol is simply about making use of good old cryptography. Your browser performs a key exchange with Google's public key, and then encrypts the connection with some authenticated encryption algorithm. (If these words don't mean much to you, I introduce these concepts as well as TLS in my book Real-World Cryptography.)
The other part of the protocol is about identities. As in: "how can I trust that this secure connection I just established is really with Google?"
The only way we found out how to create trust between people's browsers and random websites on the web is by having a number of organizations manage these identities. These organizations are called "Certificate Authorities", and they are in charge of
verifying the owner of a domain (for example,
google.com) before signing their public keys. The artifact they produce is usually referred to as a certificate.
Your browser trusts a number of these Certificate Authorities by default. They are hardcoded in the software you downloaded. When you connect to
google.com, not only do you create a secure connection with some public key, but you also verify that this public key is signed by one of these Certificate Authorities that you trust.
Without this, you'd have to have all the public keys of all the websites on the internet baked in your browser. Not very practical.
This system, called the web PKI, is chaotic. Your browser ends up trusting hundreds of these authorities, and they sometimes misbehave (and sign certificates they should not):
- Google Bans China’s Website Certificate Authority After Security Breach
- Google bans another misbehaving CA from Chrome
- Google proposes sending Symantec to TLS sin bin
- Google, Mozilla and Microsoft ban the DigiNotar Certificate Authority in their browsers
- Google guillotine falls on certificate authorities WoSign, StartCom
When a Certificate Authorities misbehave, you sometimes have to revoke a number of the certificates they have signed. In other words, you need a way to tell browsers (or other types of clients) that the certificate they're seeing is no longer valid. This is another can of worms, as there is no list of all the current valid certificates that exists anywhere. You'd have to check with the Certificate Authority themselves if they've revoked the certificate (and if the Certificate Authority themselves has been banned... you'll need to update your browser).
Detecting attacks, Certificate Transparency to the rescue
To manage this insanity, Certificate Transparency (CT) was launched. An append-only log of certificates that relies on users (e.g. browsers) reporting what they see and gossiping between one another to make sure they see the same thing. Websites (like
google.com) can use these logs to detect fraudulent certificates that were signed for their domains.
- "Facebook announces that CT helped it detect an internal policy violation"
- Symantec Issues Rogue EV Certificate for Google.com
While Certificate Transparency has had some success, there are fundamental problems with it:
- it relies on clients (for example, browsers) to do the right thing and report what they see
- it is useful only to those who use it to monitor their domain (paranoids and large organizations who can afford security teams)
- it can only detect attacks, not prevent them
With the advance of blockchain-related technologies, we can take a different look at Certificate Transparency and notice that while it is very close to what a blockchain fundamentally is, it does not rely on a consensus protocol to ensure that everyone sees the same state.
Preventing attacks, blockchain to the rescue
If you think about it, a blockchain (touted as "a solution in search of a problem" by some technologists) solves exactly our scenario: it allows a set of organizations to police one another in order to maintain some updatable state. Here, the state is simply the association between websites and their public keys.
In this scenario, everyone sees the same state (there's consensus), and clients can simply own their state without going through a middle man (by being the first to register some domain name, for example).
There are many technical details to what I claim could be the web PKI 2.0. A few years back, someone could have simply retorted: "it'll be too slow, and energy inefficient, and browsers shouldn't have to synchronize to a blockchain".
Not only that, but zero-knowledge proofs, as used in cryptocurrencies like Mina allow someone to receive a small proof (in the order of a few hundred bytes to a few hundred MB, depending on the zero-knowledge proof system) of the latest state of the blockchain. This would allow a browser to simply make a query to the system and obtain a short cryptographic proof that the public key they're seeing is indeed the one of
google.com in the latest state.
Again, there are many details to such an implementation (how do you incentivize the set of participants to maintain such a system, who would be the participants, how do you prevent squatting, how do you prevent spam, etc.), but it'd be interesting to see if such a proof of concept can be realized in the next 5 years. Even more interesting: would such a system benefit from running on a cryptocurrency or would the alternative (in cryptocurrency lingo: a permissionned network based on a proof of authority) be fine?