Lost track who said this:
>> "Fixing PKI" isn't the problem, PKI itself is the problem. It
>> doesn't work, and as long as browser vendors keep distracting
>> themselves by fiddling with even more PKI, they'll never get
>> around to addressing the actual problem.
>>


Imho, the problem with PKI is not the technology. I believe the mathematics of Public Key cryptography to be sound.

What I consider the source of the problem with the current deployment of PKI is that I'm _FORCED_ to _TRUST_ the global CAs and all their derived certificates. If I don't place trust in these global CAs, I can't communicate securely with a website, nor can I send or receive encrypted emails. Whether or not that trust is justified.

Trust cannot be forced. It must be earned. And there is no way for me as end-user to express my trust levels for the global CAs. I can't reject Verisign and decide to use only GoDaddy to prove the 'correctness' of a server certificate. Not without breaking the web: I get scary error messages when I want to visit a site.



I would like to hijack this discussion towards some solutions.

--Certificate Pinning:
--------------------------

It helps the big guys, leaving the little guys out in the cold. Google can include the current certificates of most of the wolds' banks to protect against phishing the bank.

But the browser vendors won't include the certificate of my humble blog. My readers won't have any protection against MITM-attacks such as Phorm, nor the Great Firewall of [Country].

Google/Microsoft better have a water tight procedure for my bank to submit their certificates or I'm shafted again.

As a browser is just a form of operating system, how would pinning help me to protect my whole Debian operating system. How do we get the banks' certificates into Ubuntu, or Centos? Plan9? Reliably?


-- Public Certificate repositories: Certificate Transparency / Perspectives / Convergence
-----------------------------------------

With public accessible certificate libraries, I can get the trust agility that I want. I instruct my browser to validate certificates against a sufficiently large subset of libraries and I expect these to agree for each site I visit.

Shortly after I've installed the Perspectives-plugin I've deleted all the ca-certificates in my Firefox and _relied_ on perspectives to validate them. Especially with the certificates of my bank. Certificate Patrol took care of remembering the CAs that signed the site.

A funny thing: when I tried Convergence, it made the certificates look like they were all signed by Convergence. It broke Certificate Patrols' validation. So I deleted Convergence. There I exercised my Trust Agility, just what Marlinspike promotes. :-)

What I read from the certificate-transparency.org website is that it intends to limit to Global CA certificates. I would urge mr Laurie and Google to include all certificates, including self-signed. It would increase the value of CT for me, especially in combination with DNSSEC/DANE


-- DNSSEC with DANE/TLSA
------------------------------------

I have high hopes in widespread use of DNSSEC with DANE/TLSA. It allows me to create a self signed certificate for my humble blog and publish that certificate in DNS.

With DNSSEC, my readers, who have to trust DNS anyway to reach my site, can use that same trust to validate it's certificate. Readers will perform a DNSSEC treewalk from my domain up towards the DNSSEC root certificate. That root is pinned in my resolver library in my browser.

To protect against rogue registrars, public certificate repositories can be used to monitor changes. It would not prevent my government from pressuring the registrar into silencing my site, but it will make it visible that it happened.

Assume the government not only takes away my domain name but also pressures my hosting provider to take down the host, not everything is lost.

I can rent new hosting space and republish under a new domain name, even an .onion address. Although the hostname validation would fail, the certificate is the same. As it is a self signed certificate, no CA can publish an OCSP record invalidating it. It allows people to _validate_ that my new site is indeed the old one that has been taken down.


The certificate is the *identity* of the site, not its domain name.


Of course, browsers must remember my sites' certificate in a way that is convenient to the user. We could use a Petname protocol for that.

With DNSSEC/DANE we can migrate from using DNS-based identity to certificate based identity. And isn't a certificate an Identity in cryptography-theory?

There is one risk left. The government can take over my servers' private key when they impound the server. To mitigate, I create my own CA-key and certificate and use that to sign the certificate for my servers' private key. I publish my local CA-certificate in DNSSEC/DANE records. I specify that my CA-certificate is the sites' identity. Now when the government takes hold of the servers private key, I can publish an OCSP record invalidating it and rolling a new certificate for my .onion address.

With this private CA. I can do more. I can create extra sites for CDN usage. I sign these with my private local CA-key. Then I link (static) content from my main site to the CDN-sites and the browser can validate that they are signed by the same CA. The browser can assign different trust-levels to javascript code that comes from my site and third party javascript from the advertiser based upon the CA-certificate that signed it.

This combination of technologies form the basis of what I call Eccentric Authentication. But Ecca goes further. It also allows visitors to sign up with nothing more than a username and a public key, eliminating passwords altogether.

Please see: https://witmond.nl/blog/2012/10/22/announcing-eccentric-authentication.html

And: https://www.ecca.wtmnd.nl/explanation.html

This second link is my test-site. It is https- and IPv6-only with a self signed certificate. You can validate against DNSSEC/DANE with the Firefox-plugin "Extended DNSSEC Validator 0.8", if you get it working. You need a dnssec validation resolver specified in your /etc/resolv.conf. Installing unbound and specifying 127.0.0.1 does the trick.

I hope to publish my validating/client certificate handling web proxy soon.


With regards, Guido Witmond.

_______________________________________________
cryptography mailing list
[email protected]
http://lists.randombit.net/mailman/listinfo/cryptography

Reply via email to