[security-area] Fwd: How ambiguous are names in actuality?
vwelch at ncsa.uiuc.edu
Thu Jul 14 17:19:28 CDT 2005
An interesting note from Tim Polk on ambiguous names in
PKIs. Unfortunately it doesn't apply to the types of PKIs we use in
Grids since it assume a single trust anchor that cross certifies all
------- start of forwarded message -------
From: Tim Polk <tim.polk at nist.gov>
To: ietf-pkix at imc.org
Subject: How ambiguous are names in actuality?
Date: Thu, 14 Jul 2005 14:24:00 -0400
Ambiguity has recently become a hot topic on this list. This is a really
complicated issue, and I have personally had a great deal of trouble
sorting out the real level of risk. Some of the proposed changes would
greatly impact current software, and these changes should only be
contemplated if the risk is merits such change.
So, I have spent a lot of time, off and on, thinking about ambiguity. I
can't claim to have sorted it all out, but I have convinced myself that one
minor change is absolutely required, and that the current suite of
mechanisms can virtually eliminate ambiguity in real PKIs.
My thinking is appended to this message; I apologize for its length, but
to paraphrase Mark Twain, I simply don't have time to make this short and
concise. I have attempted to define ambiguity, characterize the ways
ambiguity can enter into a PKI, and describe the set of mechanisms that
mitigate this risk.
How ambiguous are names in actuality, and how important is it?
I believe that X.509 expected assignment of unambiguous names based on a
hierarchical system of naming authorities. Whether you agree with that
premise, it is safe to say that the global X.500 directory and its
corresponding system of naming authorities do not exist. So, it may not be
safe to assume that there are no name collisions whatsoever in all the DNs
that appear in certificates and CRLs! I am sure such collisions exist
somewhere (although I havent encountered any examples). The real question
here is What security risk does this situation present, and are the
current mechanisms adequate to address this risk?
Lets recognize that the goal for PKIX is not to have globally unambiguous
names, but to be able to obtain a trustworthy public key to establish a
security service. Ambiguity in names is a problem when it causes the
relying party to trust the wrong public key.
There are two ways ambiguous names could cause problems. First, I could
accept public keys from two certificates as representing the same person
based on the same subject name. If these two certificates are bound to
different individuals I may provide a service to the wrong party (or
disclose confidential data, etc., etc.) Second, I could accept a CRL to
validate a particular certificate, based on the same issuer name in the
certificate and CRL. If the certificate and CRL were not actually issued
by the same CA, then the relying party may obtain incorrect certificate status.
Note that both of these problems are in the context of path validation. If
a name collision exists, but only one of the objects (e.g., certificate or
CRL) validates for a given relying party, then there is no actual ambiguity
from that relying partys point of view.
That is, assume two certificates exist with the same subject name but are
bound to different people. If Alice can only validate one of those
certificates, there is no ambiguity in Alices world. Similarly, if Bob
can only validate one of those certificates, there is no ambiguity in Bobs
world. (It does not matter if Bob and Alice are validating the same
certificate, or different ones!) Similarly, if two CAs have the same
issuer name, but Alice can only validate one, she cant accept the wrong
CRL. Ditto for Bob.
So, ambiguity is a concern only in the context of path validation for a
given relying party. This means that the mechanisms that are employed in
path validation are relevant to when names are, and are not, ambiguous. Id
also like to point out that path validation is always performed in the
context of a particular trust anchor. (A relying party may accept paths
that begin with multiple trust anchors, but each specific path has a single
trust anchor.) Seems irrelevant at the moment, but I will get back to it!
Definition 1: a Name N is unambiguous for a trust anchor T if and only if
all certificates that validate for T and have the subject N refer to the
Now, lets think about where name collisions can occur in the first place.
There seems to be consensus that a single CA will not issue two
certificates to two different entities with the same subject name. So, if
a single CA issues two certificates to O=Microsoft, cn=John Wilson they
better relate to the same guy. Similarly if a particular CA issues two
certificates to c=US, O=U.S. Government, OU=NIST, CN=CA1 then the subject
of both certificates must be the same CA.
So, we are only worried about the case where two different CAs are trusted
with respect to a trust anchor T and issue certificates to different
subjects but use the same name. So, when can name collisions occur between
CAs? Or, better yet, under what conditions can we be sure name collisions
wont occur? Lets start with user certificates.
In general, each CA that issues user certificates does so for a particular
name space. That is, all names assigned to users will be in a particular
Directory Information Tree (DIT). The CA will either work with a naming
authority that it considers authoritative or may assume that function
itself. For example, the NIST CA only issues user certificates in the
C=US, O=U.S. Government, OU=NIST DIT. The NIST CA has been designated
as our naming authority as well, so it keeps track of the names it
assigns. Similarly, the CA that supports NASA only issues certificates for
the name space C=US, O=U.S. Government, OU=NASA DIT.
These name spaces are disjoint, so name collisions cannot occur involving
user certificates generated by the NASA and NIST CAs. In fact, consider a
PKI with trust anchor T and CAs C(1), C(2),
, C(n) issuing for name spaces
, P(n). If spaces P(1), P(2),
, P(n) are pairwise disjoint,
name collisions cannot occur involving user certificates generated by C(1),
Case 1: Consider a PKI with trust anchor T, and CAs C1, C2, and C3. C1,
C2, and C3 issue end user certificates in the DITs N1, N2, and N3
respectively. If N1, N2, and N3 are pairwise disjoint, then the user names
are unambiguous with respect to T.
In more complex PKIs, we may encounter situations where CAs issue user
certificates for name spaces that overlap. For example, in the U.S DoDs
hierarchical PKI, CAs all issue certificates in the DIT C=US, O=U.S.
Government, OU=DOD. Users routinely receive three certificates from two
different CAs, so all the DoD CAs rely on a common naming authority to
ensure that certificates with the same DNs are issued to the same person.
Case 2: Consider a PKI with trust anchor T, and CAs C1, C2, and C3. C1,
C2, and C3 issue end user certificates in the DITs N1, N2, and N3
respectively. N1 and N2 overlap, but N3 is disjoint from N1 and N2. If
CA1 and CA2 recognize the same naming authority, then the user names in the
PKI are unambiguous with respect to T.
That is, if all the CAs either: (1) issue certificates in disjoint name
spaces, or (2) issue certificates in shared name spaces based on a common
naming authority, names will be unambiguous!
Of course, CAs may issue CA certificates as well. In this case, the CA
does not assign the names, but rather uses the established name. This is
trickier, since the name spaces for CA certificates overlaps but no naming
authority exists. It is still the responsibility of each CA to ensure that
there are no name collisions in CA certificates it issues! This is not
generally a problem, since we require names to be meaningful. A CA should
never issue a certificate to a CA with the DN C=US, O=Coca Cola unless
the subject CA is associated with that company. Similarly, if a CA issues
certificates in the DIT C=US, O=Coca Cola then it must be associated with
Of course, a rogue CA may masquerade under the wrong name, or issue
certificates in a DIT it clearly has no right to use, but no decent CA will
cross certify with it. Since we are interested in ambiguity with respect
to a trust anchor, the behavior of a rogue CA is irrelevant. Without cross
certification, no paths involving the rogue CA can be constructed. (Note
that users installing the rogue as a trust anchor is out of scope here!)
However, authority for a name space is not always crystal clear. Without a
central naming authority, there is no clear title for a particular DIT. We
rely on heuristics that work nicely for large entities like Coca-Cola but
may fail for smaller organizations. For example, there may be a number of
companies with variants on a particular name. If the name space assumed by
an organization asserts Orion rather than Orion Security or Orion
Space Sciences, the name may be ambiguous without being blatantly
false. Each entity could reasonably assign user names in the C=US,
O=Orion DIT. If each organization established their CA with the name
C=US, O=Orion, CN=CA1 things could get really ugly.
A trust anchor T may cross certify with two different CAs say the ones
from NIST and NASA. Each of those CAs may have a relationship with an
Orion. If each of them cross certifies with the Orion they know and
love, we have an immediate name collision for a CA named C=US, O=Orion,
CN=CA1, and potentially name collisions for C=US, O=Orion, CN=John
Wilson, etc., etc. Each CA has played by the rules, but names have just
become ambiguous with respect to T. This might be avoided if T is involved
in the policy decisions leading up to cross certification but that is
often NOT the case.
Fortunately, we need not depend on policy alone. Beyond the
procedural/policy issues, there are some important mechanisms that help us
with name space control. Most significant are path length constraints and
name constraints. When trust anchor T issued those CA certificates, it
probably wasnt expecting to accept transitive trust from those CAs, and it
certainly didnt expect to accept the NIST or NASA CA as authoritative for
the C=US, O=Orion DIT.
I listed path length constraints first because this mechanism provides the
simplest and most widely available of our technical controls. Both NASA and
NIST use a single CA, rather than a mesh or hierarchy. If the trust anchor
does not wish to leverage other cross certifications performed by NASA or
NIST, it simply asserts a path length constraint of zero! If T asserted
this constraint for at least one of the NIST or NASA CAs, then the name
C=US, O=Orion, CN=John Wilson is unambiguous. While this control was not
designed exclusively for name space control, it does have the effect of
prevenmting subsequent CAs from introducing unexpected name spaces.
Unfortunately, this does not solve our problem for C=US, O=Orion,
CN=CA1. This name remains ambiguous. Even with a path length
constraints of zero, a relying party can validate a CRL from either Orion CA.
Name constraints is a more appealing technical mechanism, if less
consistently available. T can explicitly designate the name spaces it
wishes to recognize in the cross certificate issued to NIST (or NASA). By
asserting a permitted subtree of C=US, O=U.S. Government, OU=NIST with a
SkipCerts of zero, certificates in the Orion name space are immediately
eliminated. This includes the offending CA certificate, so the wrong CRL
no longer validates.
Case 3: Consider a PKI with trust anchor T, and CAs C1, C2, and C3. C1,
C2, and C3 issue end user certificates in the DITs N1, N2, and N3 respectively.
N1 and N2 are disjoint, but N3 overlaps with N1 or N2. C3 does not
recognize the same naming authority as C1 or C2. If name constraints
permitted subtrees P3 is imposed in all cross certificates issued to C3,
where N1, N2, and P3 are pairwise disjoint, then names are unambiguous with
respect to T. (Names that could have collided are excluded from C3s DIT.)
Ambiguity in names is a relatively minor risk with respect to a given trust
anchor. Ambiguity does not occur because of the actions of a single CA;
rather it requires a combination of actions by different CAs within the
infrastructure. If all CA certificates accurately reflect the trust
relationships between the CAs by incorporating appropriate path length and
name constraints, these risks are greatly reduced if not eliminated.
The risk of ambiguous names can be mitigated with a relatively simple
modification in 3280bis, and the addition of some security
considerations. Most importantly, 32890bis should be modified to ensure
that certificate and CRL validation are always performed with respect to
the same trust anchor. Security considerations should be added to
highlight the risk of issuing CA certificates without appropriate
constraints, and to caution application developers that trust anchor
information should be considered when accepting certificates.
The changes that I believe should be implemented are as follows:
(1) Modify section 6.3.3 to state that CRL validation MUST use the same
trust anchor T specified in the corresponding certification path.
(2) Add security considerations that indicate applications that accept
multiple trust anchors should consider the trust anchor in access control
decisions to ensure that names are unambiguous.
(3) Add security considerations that explain the importance of consistent
use of path length and name constraints in preventing name ambiguity.
------- end of forwarded message -------
More information about the security-area