[Cryptography] certification by N=0,1,2... authorities
jsd at av8n.com
Tue Mar 24 14:20:01 EDT 2015
-----BEGIN PGP SIGNED MESSAGE-----
In the context of "TB2F CAs as (un)official browser policy",
on 03/23/2015 04:35 PM, Tom Mitchell wrote:
> Is there a useful system designed that could demand two or three
There are about five ways of interpreting that question;
see below for some interpretations and some partial answers.
> It seems to me that a collection of central authority resources
> will always have an event at one or from time to time where
> the notion of trust is not going to be absolute.
> The odds of it happening to three simultaneously seems remote.
I don't think the odds are remote at all. In the recent
"superfish" fiasco, a bogus CA was inserted into the list
of "trusted" CAs. How much extra work do you think it
would have been to insert two (or more) bogus CAs?
More is not always better; I am reminded of the guy who
thought quadruple-rot13 would be better than triple-DES.
OTOH an N=2 authority scheme, if done right, could
have some value. The devil is in the details.
Returning to the first question: Broadly speaking, such
things have been designed, and even deployed. The PGP
web-of-trust (WoT) is a familiar example.
More narrowly speaking, given the context I assume the
question intended to focus on browsers in particular
or x.509 in general. Even in that case, the mechanism
for such a thing has been "designed"; see the discussion
of "mesh structures" at
However, no browser implements such a thing, and before
implementing it one would need to come up with a policy
(not just a mechanism) ... and it's not clear what a
sensible policy would be. We need to have a discussion
of What's Your Threat Model and conversely What's Your
Here's one use case that pops to mind: Suppose that
country X has been at war with country Y for the last
50 years or so. Such a thing is not particularly hard
to imagine. Now suppose that the root of trust in the
major browsers includes a lot of CAs that are domiciled
in or otherwise dependent on country Y, and that many
sites across the world depend on such CAs. This puts
X in a bad situation; they can't trust those CAs, but
they also can't just throw them out, if they want to
get any work done.
It would be nice to have some means whereby country X
could double-check the work of various foreign CAs.
The idea is simple enough, but we are a long way from
being able to do this. Mozilla, for instance, doesn't
even have a way to revoke a certificate that is in
its root-of-trust list! And they have no intention
of fixing it. They say this "doesn't make sense" ...
even in connection with an example (i.e. superfish)
where it would make a great deal of sense. Amazing.
I'll tell you what doesn't make sense: Having more
than 150 "roots" doesn't make sense. It defies the
definition of "root", in botany as well as in computer
science. A browser should have *one* root, representing
the Lord High Certzilla. If it wants to trust some
other CAs, it should /sign/ their certificates. (Such
a signature would of course be revocable.) This is
the logical x.509 way to represent what is actually
The fact that the Mozilla Foundation pays Digicert
Inc. to certify the mozilla.org domain is comical,
given that for practical purposes most people rely
on firefox tell them whether or not to trust Digicert.
Similar words apply to other browsers.
Continuing the discussion of N-way certification, we
have just consider the possibility of N greater than
one, but we should also consider the case of N less
A familiar example of this is ssh. Although it knows
about authorities, most people don't use it that way.
Instead they rely on a ToFU model: Trust on First Use.
A better word for this is pinning, since really it
signifies /same/ as first use, whereas the degree of
"trust" is another matter entirely.
Here's a use-case where N=0 authorities makes sense:
Suppose Joe User is dealing with a wireless base station.
It needs to be configured using a web interface. How
do we secure that? x.509 was designed with e-commerce
in mind, but the base station doesn't fit that model
at all. It doesn't come with a domain name, nor
should it. Joe may not give it a name at all, and
even if he did, the name is not certified. Obtaining
and installing a certificate is orders of magnitude
more work than Joe will do, or should do.
In contrast, the SSH pinning model works reasonably well
in this case. Joe resets the device to some standard
state, and then connects to it on a secure air-gapped
wired network. He makes an ssh connection. He can
trust this (for the appropriately limited purposes)
on first use, because of the air gap. From then on,
he can ssh to the thing in confidence. The ssh key
does not certify the domain name or even the IP address;
it merely signifies that the box is the same box as
So now we see what the real issue is: What is the
/meaning/ of a key, and what is the /meaning/ of a
signature? This issue affects PGP, x.509, ssh, and
all the rest. When I sign John Smith's PGP key, what
does that mean? Does it mean the guy's name really
is John Smith? Does it mean I would trust the guy
with ten dollars? Does it mean I would trust the
guy with ten thousand dollars? Very often I would
like to signify nothing other than the fact that this
is the same John Smith that I've dealt with before,
In the real world, there are ways of figuring out
what a signature means. Signing the front of a
check means one thing. Signing the back means
another. Signing a petition to recall the governor
means yet another. Et cetera.
For configuring the wireless base station, pinning
alone is just fine. For e-commerce, we really ought
to be using two factors: authority plus pinning.
Two factors all different works better than two
factors all alike. Firefox claims to do pinning,
but if you look into it you discover they only pin
a handful of sites. There exist add-ins such as
but I find it hard to take that one seriously;
-- At the height of irony, they don't bother to
secure their own site with https (with or without
pinning). Evidently they don't really think
https is important.
-- They don't bother to sign commits to their
-- If you clone the code in their repo, the "make"
-- No work has been done on the project in 3+ years.
There's also another form of pinning, for sites that
want to be pinned:
but I want to pin the other 99.999% of the sites.
Does anybody know of a pinning add-in that they
trust to do something useful? Perhaps some smart
person on this list could write something using
certpatrol as a starting point or otherwise. (I'm
busy at the moment.)
For completeness, we should note that the same
guys who subverted the root-of-trust in the
superfish case could almost as easily have
defeated any pre-installed pinning mechanism.
As Ken Thompson pointed out, once people start
messing with your supply chain, you're screwed,
and it is hard to get unscrewed.
Still, I do not understand why browsers make it so hard
to use authority+pinning ... or pinning alone (as in
the case of Joe's wireless base station).
There is a big gap between algorithms and implementations.
I reckon we have all the algorithms we need to make
stuff secure if we wanted ... but sometimes I think
we're not even trying. The spies and the gangsters
of the world must be laughing themselves silly: More
than 150 "roots" with no way to revoke them, and not
the slightest interest in fixing it? Bwa-ha-ha-ha-ha.
Talk-talk-talk about cover traffic as a defense against
traffic analysis, talk about it for years and years
but don't do anything about it. Bwa-ha-ha-ha-ha.
Still no serious pinning. Bwa-ha-ha-ha-ha.
Also, if you need help meeting your recommended daily
allowance of ridiculousness: The cobblers have holes
in their shoes:
-- www.mit.edu is still offering export-grade ciphers
-- csail.mit.edu is still offering SSLv3
-- cybersecurity.csail.mit.edu doesn't offer HTTPS at all
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
-----END PGP SIGNATURE-----
More information about the cryptography