引用 RFC4562 、暗号化メッセージ構文(CMS)、セクション5.6。署名検証プロセス:
受信者は、どのような方法でも署名者の正しい公開鍵を取得できますが、推奨される方法は、SignedData証明書フィールドから取得した証明書からです。
証明書フィールドはSET OF CertificateChoices
次のいずれかになります。
最初の2つにはsubjectPublicKey
フィールドがありますが、最後の3つにはないようです。それらにはsubjectPublicKey
を含む可能性のある属性フィールドがあると思いますが、そうでない場合は、可能な選択肢としてそれらを含めることのポイントは何でしょうか。
お気づきのとおり、公開鍵はCertificateに含まれています。ただし、PKCS7メッセージでは、証明書を含める必要はありません。
署名者は、受信者が署名の検証に使用するX.509証明書を含める場合と含めない場合があります。含まれていない場合、受信者は他の方法で署名者の証明書のコピーを取得する必要があります。
( http://www.cryptosys.net/pki/manpki/pki_signeddata.html )
ただし、ISO 14533(セキュリティ製品がこの標準を使用している場合)では、証明書フィールドが署名付きデータの必須として定義されています。条件付きとしてのAttributeCertificateV2;および、条件付きのOtherCertificateFormat。 ( http://standardsproposals.bsigroup.com/Home/getPDF/2447 )
また、 https://www.ietf.org/rfc/rfc3852.txt ごとに、5つの証明書形式のうち2つが廃止されました。
CertificateChoices ::= CHOICE {
certificate Certificate,
extendedCertificate [0] IMPLICIT ExtendedCertificate, -- Obsolete
v1AttrCert [1] IMPLICIT AttributeCertificateV1, -- Obsolete
v2AttrCert [2] IMPLICIT AttributeCertificateV2,
other [3] IMPLICIT OtherCertificateFormat }