All,
The current RPKI documents (draft-ietf-sidr-res-certs, draft-ietf-sidr-cp,
draft-ietf-sidr-cps-irs, draft-ietf-sidr-cps-isp, draft-ietf-sidr-arch) require
that subject names in certificates be unique relative to all certificates
issued by a given CA, but does not require that subject names be issued in a
manner that would make it likely that subject names are globally unique (i.e.,
unique across the entire RPKI).
While it is true that there is less of a need for names to be unique across the
RPKI than there is other other PKIs (since the RPKI does not use such things as
name constraints, indirect CRLs, or attribute certificates), the existence of
name collisions within the RPKI would not be without risk. In particular,
there is no requirement in X.509 that the CRL used to determine the revocation
status of a certificate be signed using the same key as the certificate. Using
the X.509 (and RFC 5280) path validation rules, a CRL may be validated using an
entirely different certification path than the certificate whose status is
being checked. If a path validation implementation does this, and there are
two different CAs within the PKI that operate under the same name, then the
library may use the CRL issued by one of the CAs to determine the status of
certificates issued by the other CA. This could lead to a revoked certificate
being accepted as valid or a valid certificate being rejected as revoked.
It is my understanding that some current path validation implementations that
are being developed for use with the RPKI make use of the OpenSSL path
validation libraries. At the moment, OpenSSL will not by default will not use
a separate certification path to validate a CRL than was used to validate the
certificate whose status is being checked, but the latest version of OpenSSL
(1.0.0) does have that capability. One of the changes that is mentioned for
OpenSSL 1.0.0 is:
*) Add support for distinct certificate and CRL paths. The CRL issuer
certificate is validated separately in this case. Only enabled if
an extended CRL support flag is set: this flag will enable additional
CRL functionality in future.
If a future version of OpenSSL enables this feature by default, and that
version of OpenSSL is used to validate certificates in the RPKI, and there are
name collisions in the RPKI, then relying parties will be at risk of
incorrectly accepting or rejecting certificates.
I understand that there is a desire to keep subject names within the RPKI
simple and that the RPKI cannot impose a centralized or hierarchical naming
structure to ensure that there are no name collisions. However, with a very
small change to the RPKI specifications, one could maintain a simple naming
scheme while making the risk of name collisions negligible.
The current RPKI specification states that a subject name consists of a
commonName attribute and optionally a serialNumber attribute. However, there
was some discussion recently about whether the specification could be changed
to require that the subject name contain only a commonName attribute. So, I
will present examples of ways in which unambiguous names could be constructed
that only include a commonName attribute. The idea is to include enough
randomness in the name so that name collisions are unlikely. According to the
Birthday Paradox, if there are about one million (2^20) CAs in the RPKI, then
collisions will be unlikely if there is significantly more than 40 bits of
entropy in the name. Some ways to achieve this would be:
1) Hash of the subject public key (encoded as ASCII HEX).
example: cn="999d99d564de366a29cd8468c45ede1848e2cc14"
2) A Universally Unique IDentifier (UUID) - RFC 4122
example: cn="6437d442-6fb5-49ba-bbdb-19c260652098"
3) A randomly generated ASCII HEX encoded string:
example: cn="0f8fcc28e3be4869bc5f8fa114db05e1"
(A string of 20 ASCII HEX digits would have 80-bits of entropy)
4) An internal database key or subscriber ID combined with one of the above
example: cn="<DBkey1> (6437d442-6fb5-49ba-bbdb-19c2606520980)"
(The issuing CA may wish to be able to extract the database key or subscriber
ID from the commonName. Since only the issuing CA would need to be able to
parse the commonName, the database key and the source of entropy
(e.g., a UUID) could be separated in any way that the CA wanted, as long as
it conformed to the rules for PrintableString. The separator could be a space
character, parenthesis, hyphen, slash, question mark, etc. Of course, the
source of entropy could also be placed in a separate attribute, if the profile
permitted that.)
If the internal database key or subscriber ID contained enough entropy by
itself, then it may not be necessary to include anything else in the commonName
attribute.
Of course, even if the RPKI documents required CAs to create subject names as
described above, there is a risk that some CAs in the RPKI would not follow
these rules and would accidentally (or deliberately) create name collisions.
This problem could be mitigated, however, given the way that certificates and
CRLs are issued in the RPKI. Unlike X.509 in general, the RPKI requires that
the CRL that provides the revocation status of a certificate be signed using
the same key as the corresponding certificate. The RPKI could take advantage
of that by adding a step to the path validation algorithm (Step 5 in Section
7.2 of draft-ietf-sidr-res-certs) requiring the relying party to verify the
signature on the CRL used to determine whether the certificate was revoked
using the same public key as was used to verify the signature on the
certificate itself. At the moment, the RPKI path validation algorithm does not
impose such a requirement.
It may also be a good idea to add a paragraph to the Security Considerations
section noting that there may be a risk in using a path validation
implementation that is capable of using separate certification paths for a
certificate and the corresponding CRL if there are name collisions in the RPKI
as a result of CAs not following the profiles requirements for constructing
subject names.
This would result in a belts-and-suspenders approach. Specifying naming rules
that will make name collisions unlikely will increase the likelihood that
relying parties can safely use any X.509 path validation implementation that
has added support for the RFC 3779 extensions. Imposing a path validation
requirement to only use CRLs that were signed using the same key as the
certificate will encourage relying parties to use path validation software that
will be at less risk of getting incorrect certificate validation results even
if there are name collisions in the RPKI as as result of some CAs not complying
with the naming rules.
Dave
_______________________________________________
sidr mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/sidr