At 02:02 PM 1/20/97 -0800, Arup Biswas wrote:
I think you are right. In the current version of PKCS7 Signed Data format
certificates field is indeed a SET OF which means an ordered collection
You mean unordered, right?
But My question is more fundamental. Do we fit our requirement
according to the syntax or do we modify the syntax according to our
In other words, could we make the certificates fields as a SEQUENCE
OF instead of a SET OF in the next version of PKCS7 Signed Data?
This is only a suggestion. Why don't we brainstorm this issue?
It seems reasonable that for size or other reasons someone might not want
to send anything in the bag o' certs and put the responsibility on the
receiving entity to find the signing certificate and any other certificates
required to satisfy the trust requirements of the receiver. It also seems
likely that people are going to want to push other certificates than the
ones that are required to validate the signature or signing certificate
trust (in the case of a dual key model where the signing and enveloping
certificates are separate, you may want to push both the signing and
enveloping certificates and their respective chains).
I think that the current wording of the use of
ExtendedCertificatesAndCertificates in the S/MIME implementation guide is
appropriate -- the sender should put in the signing certificate and
certificate chain, and the receiver should be prepared to accept anything
in any order, but other stuff can go in there also if it's useful.
Being too restrictive in this case will probably hurt, especially in the
dual key model that I mentioned before.
The issue is the following: I get a signed Data message, I decode it,
get a bunch of certificates (provided it has been attached). Now,
what would be the simplest way to select the certificate of the signer
and verify the whole chain?
Each of the SignerInfo types in the signerInfos has an
issuerAndSerialNumber member that can be compared against the received
certificates. After that point, you need to enforce your own rules as to
your validation of that certificate (in the case of the hierarchy model,
you look up the issuer of the parent certificate, and continue on up the
chain until the trusted root). I'm guessing that you are looking for an
easier way, but I'm not sure that there is one. In our case, we maintain a
local cache database that has certificates indexed by issuerAndSerialNumber
and also by subject, and root keys that are indexed by subject. Finding
the chain is a matter of doing lookups by issuerAndSerialNumber and by
subject (by issuerAndSerialNumber for the signing cert, and then looking up
root keys or certificates by subject, keeping in mind that multiple
certificates can have the same subject).
In any case, I think the PKCS #7 syntax is fine. We may want to clarify
the philosophy a little better in the S/MIME implementation guide, however,
especially with regard to the transmission of self-signed root keys.