web-dev-qa-db-ja.com

PKCS7メッセージから件名の公開鍵を取得するにはどうすればよいですか?

引用 RFC4562暗号化メッセージ構文(CMS)、セクション5.6。署名検証プロセス

受信者は、どのような方法でも署名者の正しい公開鍵を取得できますが、推奨される方法は、SignedData証明書フィールドから取得した証明書からです。

証明書フィールドはSET OF CertificateChoices次のいずれかになります。

  • 証明書
  • ExtendedCertificate
  • AttributeCertificateV1
  • AttributeCertificateV2
  • OtherCertificateFormat

最初の2つにはsubjectPublicKeyフィールドがありますが、最後の3つにはないようです。それらにはsubjectPublicKeyを含む可能性のある属性フィールドがあると思いますが、そうでない場合は、可能な選択肢としてそれらを含めることのポイントは何でしょうか。

1
neubert

お気づきのとおり、公開鍵は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 }
1
Scott