[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: CRL sequence issues




Robert,

The certification path validation algorithm in section 6 of RFC 3280, including the CRL validation algorithm in section 6.3, was designed to determine whether a certificate is valid at the current time:

  The algorithm presented in this section validates the certificate
  with respect to the current date and time.  A conforming
  implementation MAY also support validation with respect to some point
  in the past.  Note that mechanisms are not available for validating a
  certificate with respect to a time outside the certificate validity
  period.

This may not be the information that you need for your application, in which case you may need to make some adjustments to the algorithm.

See responses in-line.

Vittek Robert wrote:

Dear gentlemen,

I am involved in development of a system that is supposed to process electronically signed documents (possibly ten thousands per hour) while the response time (on the question if the signature is valid or not) should be "as low as possible". At the same time, it is crucial that the response is correct because a mistake can have serious legal consequences.

I have questions concerning certificate status validation when CRLs are the revocation mechanism. All of the references are made to RFC 3280.

CRL Validation algorithm described in 6.3 assumes usage of a local cache and somehow alibistically "assumes that all of the needed CRLs are available in a local cache". In 6.3.3, there are some rules to be followed on fetching all needed CRLs, one of them being very interesting.

        (2)  If the current time is before the value of the next update
        field and use-deltas is set, then obtain the current delta CRL
        that can be used to update the locally cached complete CRL as
        specified in section 5.2.4.

There is no rule specified if use-deltas is not set.

The idea of step (a) in section 6.3.3 is to ensure that the relying party is using CRLs that are not out-of-date. If the complete CRL is out-of-date, it will be updated in step (a)(1)(ii). If use-deltas is set and delta-CRLs are issued that cover this certificate then the relying party needs an up-to-date delta-CRL in addition to (possibly) an up-to-date complete CRL. Step (a)(2) only deals with ensuring that the delta-CRL is up-to-date and so it can be skipped if the relying party chooses not to use delta-CRLs.

At the same time description of Next Update field (5.1.2.5) says:

  This field indicates the date by which the next CRL will be issued.
  The next CRL could be issued before the indicated date, but it will
  not be issued any later than the indicated date.

So, there is a possibility that a complete CRL has been issued invalidating the one in local cache for the time in question (e.g. from Time Stamp Token) and this CRL should be downloaded. I think that the above mentioned paragraph in 6.3.3 should be modified to obtain a complete CRL in any case or at least make a check.
One of the main advantages of CRLs is that they can be cached. Requiring the relying party to check for a new CRL at every validation would eliminate this advantage. Besides, as you note below, if a CRL issuer posts a new CRL before the announced nextUpdate time, there is no guarantee that the relying party will get that CRL even if the relying party checks for an update since CRLs are not distributed through secure channels.

Anyway, it's been kind of a theoretical problem so far. In real world it is not feasible to make HTTP or FTP call to CA for every validated signature at the rate "ten thousands per hour". Even if it was, how can I be sure (using untrusted HTTP or FTP communication with most of CAs) that some traitor did not fetch my request and did not provided me with older CRL which still has next update field greater than time from TST. I can not. My uncertainty will disappear only after a CRL with ThisUpdate greater than TST is issued and I have downloaded all CRLs issued so far. Btw, CRL with ThisUpdate greater than TST is sometimes the first CRL that can invalidate a revoked certificate which makes the rules for fetching CRLs in algorithm for CRL Validation all erroneous.
The algorithm was designed to determine whether a certificate is valid at the current time. Information may become available in the future that will indicate that the certificate has been revoked, but the algorithm can only base its decision on information that is currently available. SCVP allows for the client to specify a validation time and section 3.2.7 of the current draft (http://www.ietf.org/internet-drafts/draft-ietf-pkix-scvp-18.txt) indicates that one may want to specify a validation time that is after the time that the private key was used in order to allow time for a revocation notification to propagate through the system. But, RFC 3280 only addresses the question of whether the certificate is valid at the current time, not whether the use of the corresponding private key is/was valid. In some cases it may be possible to wait for a while after the private key was used to validate the certificate, but in other cases that is not a possibility (e.g., verifying the certificate as part of an authentication operation).

So, this leads me to a question what mechanism can be exploited to ensure that I have downloaded a complete set of CRLs issued so far. First, I thought that crlNumber is sufficient. But crlNumbers must convey only monotonically increasing sequence - NOT LINEAR sequence. That means, some of the numbers can be omitted and I have no means to determine it. Do you have any suggestions?

Moreover, it may be critical to be sure to download the next CRL issued right after TST, because RFC 3280 states that:

  A complete CRL lists all unexpired certificates, within its scope,
  that have been revoked for one of the revocation reasons covered by
  the CRL scope.

              An entry is added to the CRL as part of the next update
  following notification of revocation.  An entry MUST NOT be removed
  from the CRL until it appears on one regularly scheduled CRL issued
  beyond the revoked certificate's validity period.

If TST < Cert.validTo < CRL(n).thisUpdate then CRL(n) is crucial for certificate status validation with respect to Time Stamp Token. Another reason to have a mechanism for a check if I am missing some CRL from sequence or not. Otherwise, there are cases when one is not able to say if a certificate was valid at TST time or not, hence if the signature is valid wrt. TST.
Since RFC 3280 only deals with validating the status of the certificate at the current time, this is not an issue. If the certificate is expired at the current time, then validation will fail (section 6.1.3, step (a)(2)). If the certificate is still valid at the current time, then the certificate must not have at the time that any CRLs used in the validation were issued and the CRLs will provide status information for the certificate.

Maybe, I am just missing something in RFC 3280 (or any other) that will suddenly make everything clear to me.
In that case I apologize to the readers of this forum.
It seems that the question that you want answered is whether was legitimately used at the time that the document was signed. This requires not only ensuring that the certificate was valid at the time that the signature was generated but that the certificate continued to be valid (i.e., was not revoked) for some period of time after the signature was generated. This is a much more difficult question.

In order to do this you need to ensure that the validation is not performed until some time after the signature was generated. The difference between the two times, D, must be enough to allow any revocation notifications to entered into and propagate through the system as noted in section 3.2.7 of the SCVP draft.

You also need to ensure that revocation information will be available for the certificate at the time that you perform the validation. The easiest way is to not accept signatures that are created immediately before the certificate expires. That is, if the signature is created at time Ts then the certificate must not expire until after time Ts + D when the certificate is validated. Another option is to rely on CRL issuers to continue to include information about certificates in CRLs even after the certificates expire. There is proposal for a new CRL extension in the Final Proposed Draft Amendment to X.509 (see page 14 in ftp://ftp.bull.com/pub/OSIdirectory/Orlando2004Output/6N12793CertificateEnhancementDAM.pdf). The new extension, called expiredCertsOnCRL, is a non-critical extension that allows the CRL issuer to indicate that the scope of the CRL includes some certificates that have already expired. If this extension were included in the CRLs, it would be possible to validate a certificate even if the certificate had expired after time Ts but before time Ts + D. Of course, the expiredCertsOnCRL is not currently being used.

Dave