Steve,
I'm sorry, but I really have to disagree with your statement that pathLen:
0 is "optimally secure" - for Mozilla users or in general.
The use of cross-signatures is very important for allowing the transitions
of CA keys/roots, along with the bring up of new roots. I think Kathleen's
proposed changes, in particular requiring /either/ technical constraints
/or/ encompassing audit a good thing - and that pathLen constraints
represent a solution that works well with technical constraints, but NOT
with audit constraints.
There are effectively two types of "Externally-operated subordinate CAs" -
the so-called Enterprise Sub-CA and the cross-signed third-party CA.
For the Enterprise Sub-CA, I'll imagine they'll gravitate towards
technical constraints. Once a cert is name constrained, then it doesn't
matter how long the pathLen gets - the scope of 'damage' is limited to the
name(s) that they're constrained to. Because those name(s) have already
been verified according to the Mozilla Root Cert Policy, I don't see any
reason to impose any further technical constraints - any mis-issuance
within that name scope is enterprise error.
You could argue that such an enterprise error could harm users' security
when talking with the enterprise-operated domains, but let's be honest:
Another, fully plausible type of enterprise error is that they keep their
SSL server keys in plaintext floating around. The client certainly can't
detect such an error, and it poses such as much risk as misissuing a cert,
so there's rational basis for saying pathLen: 0 is somehow good in that
case. For that reason, I don't think there needs to be any requirement
that the Enterprise Sub-CA's issuance policies be compatible with the Root
- again, because of the technical constraints, the scope of damage is
limited, so let them issue however they want, however insecurely they
want, because of the constraints. For the Mozilla Root Program, in which
Mozilla clients support NC regardless of criticality, there is no way for
constrained Enterprise Sub-CAs to get this wrong in a way that harms
users' security.
That leaves the unconstrained sub-CAs - those which are audited, rather
than technically constrained. Because of the audit requirements, the
effective risk of a sub-CA mis-issuing some CA cert that could pwn the
Internet and its users is /identical/ to the risk of the "root" CA
mis-issuing such a cert. They've both been audited to the same criteria -
their threat profile is the same!
Because of this equivalence, a pathLen: 0 does /nothing/ to change that
risk. Short of requiring /every root/ have a pathLen: 0, which would harm
users security, constraining sub-CAs does nothing for users.
For operators of Root CAs, cross-signing/signing an unconstrained subCA
with a pathLen constraint does nothing to reduce the existential risk to
the root. Even with a pathLen of 0, a sub-CA could still issue
certificates outside of the audited statements/Mozilla Root requirements.
If they did, then BOTH the sub-CA AND the Root CA would be at risk of
removal. It doesn't matter whether it's immediately issued under the
sub-CA, or issued five levels deep within the sub-CA, it's still a risk.
I'm well aware that the argument for pathLen: 0 goes as such:
- If an attacker can breach the network security controls of a CA, which
leads to the issuance of a cert, and they can issue an unconstrained
sub-CA, now users are at risk.
- If we constrain all sub-CAs with a pathLen: 0, then the only targets of
such an attack are the roots/intermediate CAs that are unconstrained.
- Ergo, we're reducing the attack surface.
The math then goes something like:
- If we assume 1% will be compromised, and we have 100 unconstrained
roots, there will only be 1 compromise.
- If we assume 1% will be compromised, and we have 100 unconstrained
roots, each with 10 unconstrained/cross-signed sub-CAs, there will be 10
compromises.
- 10 > 1, ergo unconstrained/cross-signed CAs are a security risk.
I disagree with that conclusion, on the premise that because the proposed
requirements have every sub-CA audited to the same requirements as their
cross-signing roots, every sub-CA would then be eligible for inclusion in
the Mozilla Root Program, as they demonstrably meet all the requirements.
If you require a pathLen: 0 here, then your math simply changes to:
- We assume 1% will be compromised, and now we have 1000 unconstrained
roots, ergo there will be 10 compromises.
- 10 = 10, ergo the security risk of unconstrained-but-audited CAs is
identical to unconstrained-but-audited Root CAs.
Perhaps you can explain a situation where you think pathLen: 0
demonstrably improves security for users?
Cheers,
Ryan