On 05/05/16 17:42, Nick Lamb wrote:
On Thursday, 5 May 2016 13:22:34 UTC+1, Rob Stradling  wrote:
That logic would imply that all of the "Not Trusted by Mozilla"
intermediates should be moved to "Disclosure required!", given that I
can't prove the non-existence of cross-certificates that would cause
these intermediates to become trusted!

As a relying party I think the correct algorithm here is an iterative one, or 
at least, is best explained that way. Given the set of disclosed certificates, 
create a graph of CA nodes, reachable from the NSS public trust roots by 
following certificates that meet certain criteria. From each of those nodes, if 
you know of any certificates that would also meet the criteria, which are not 
yet disclosed, you must disclose them. Repeat until nobody discloses any more 
certificates and thus the graph stops changing.

Nick, IIUC you're arguing for "CoAP" (to use Richard's terminology). Is that right?

A rough stab at the criteria goes like this:

CA:TRUE (and not ruled out by path length?)
notBefore < now() < notAfter()
EKU either non-existent or contains TLS-server
something about name constraints ?

Why do I say the algorithm is iterative ? Here's an extreme example. Suppose 
there are two rather incestuous companies Foo and Bar, each is a public root CA 
but also operates a confusing number of intermediates built up over many years, 
some even prior to the World Wide Web. Their root CAs are respectively Foo Root 
CA and Bar Root CA and all their intermediates have their name in the CN 
(already an improvement over the reality we face today).

Step 1. Foo identifies that "Foo Root CA" signed an unconstrained cert for "Bar 
Public Issuer Class 8" and they disclose that, although the only record they still have is a 
stained bar napkin so they hope they copied the serial number down correctly.

Step 2. Bar now remembers that "Bar Public Issuer Class 8" is still trusted, it had a 25 
year expiry date and from archive tapes they find it signed an unconstrained cert for "Foo 
SHA-1 Upgrade CA" so they disclose that.

Step 3. Foo is surprised to be reminded of the old "Foo SHA-1 Upgrade CA" and that it's 
still technically trusted despite being retired back when Twitter didn't exist, they dig through 
old records and find it signed "Bar New 2048 RSA" so they disclose that.

Step 4. Bar is a little embarrassed, the keys from "Bar New 2048 RSA" are actually still 
in use in an OCSP server, but yep, it was technically unconstrained, and worse yet they find it was 
used to sign a cert for "Foo Private CA Oscar Zulu" before moving to its OCSP role.

Step 5. Foo are even more embarrassed that "Foo Private CA Oscar Zulu" is 
actually publicly trusted, they've been moving clients who want Intranet certs onto it, 
and completely forgot it has a cross-signature. Whoops. At least it didn't sign any other 
CA certificates though. The algorithm terminates.

As I understand it this algorithm, once performed properly, discloses all the 
intermediate certificates that should end up in a chain for a certificate I, a 
normal relying party, end up relying on. Relying parties can make trust 
decisions based on these disclosures, and Mozilla can inspect e.g. audits and 
evidence of appropriate technical controls for the disclosed intermediates.

If I run into a bad certificate (not talking about merely non-conforming, but e.g. a fake 
"google.com" or something of that sort) with an undisclosed intermediate in the chain 
Mozilla can most reasonably as a first step actively distrust that undisclosed intermediate. It 
would be literally _incredible_ for a root CA to argue that an intermediate is so important that 
Mozilla should still trust it despite the bad certificate, yet so unimportant they forgot it even 
existed and so didn't disclose it. From there Mozilla can investigate the intermediate's issuer. 
Did they "forget" any others? But in many cases just this first step plugs a big hole 
without waiting for weeks of discussion to conclude.

So far what we tend to see with intermediates that have been "forgotten" is that they 
aren't supposed to be used to issue TLS certificates. Distrusting those as a result of a security 
incident would be no great loss to the web PKI. A "submarine" intermediate, one that was 
not only technically unconstrained but deliberately signing end-entity TLS certificates or signing 
another CA that does so, yet not disclosed to Mozilla during the current process would therefore be 
rare and deserving of extra scrutiny if found later.

--
Rob Stradling
Senior Research & Development Scientist
COMODO - Creating Trust Online

_______________________________________________
dev-security-policy mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-security-policy

Reply via email to