Top PageSecurity TopCMS Top

電子署名データ(Signed-data) タイプ

コンテンツに改ざんが無く、正当である事を証明するデータ。
0個以上の署名値(Signature Value)を持たなければならない。
各署名者は、格納されているコンテンツに対して、並列に署名することができる。

電子署名の種類
拡張子 ファイルの内容
.p7s PKCS#7(暗号メッセージ構文)のSigned-data形式で、BERで符号化された署名。
.p7m PKCS#7(暗号メッセージ構文)形式の、Base64で符号化された電子署名。
"-----BEGIN PKCS7-----"と"-----END PKCS7-----"で囲まれる。

SignedDataは以下のASN.1による記述で定義される。

[ASN.1] SignedData (oid = 1.2.840.113549.1.7.2)
SignedData ::= SEQUENCE {
  version CMSVersion,
  digestAlgorithms DigestAlgorithmIdentifiers,
  encapContentInfo EncapsulatedContentInfo,
  certificates [0] IMPLICIT CertificateSet OPTIONAL,
  crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,
  signerInfos SignerInfos }
DigestAlgorithmIdentifiers ::= SET OF DigestAlgorithmIdentifier
SignerInfos ::= SET OF SignerInfo
SignedDataについて
フィールド名 内容
version このSignedDataデータのヴァージョンを示す。
5 : certificatesかcrlsにotherタイプのデータがある場合。
4 : certificatesにv2attrCertタイプのデータがある場合。
3 : certificatesにv1attrCertタイプのデータがある or ヴァージョン3のSignerInfoデータがある or encapContentInfoのeContentTypeにDataタイプ(oid = 1.2.840.113549.1.7.1)以外が指定された場合。
1 : それ以外の場合
digestAlgorithms 0個以上のダイジェスト関数若しくはハッシュ関数のアルゴリズムを示す(関数のOIDとパラメータ)。
encapContentInfo 署名されたコンテンツおよび、それに付随する情報が可能される。
certificates 0個以上の電子証明書(X.509 公開鍵証明書等)が格納される。
crls 0個以上の証明書失効リストが格納される。
signerInfos 0個以上の署名者の情報(署名値を含む)が格納される。

署名化コンテンツ (EncapsulatedContentInfo Type)

このフィールドには、署名されているコンテンツのタイプと、そのコンテンツ実体が格納される。
ASN.1による記述は以下の通り。

EncapsulatedContentInfo ::= SEQUENCE {
  eContentType ContentType,
  eContent [0] EXPLICIT OCTET STRING OPTIONAL }
EncapsulatedContentInfoについて
フィールド名 内容
eContentType eContentに格納される、署名されたコンテンツのタイプを示すoidが書かれる
通常は、Dataタイプ(oid = 1.2.840.113549.1.7.1)
eContent eContentTypeで定義された署名されたコンテンツが格納される。
コンテンツは、DERで符号化する必要は無い。
また、署名されたコンテンツは、外部ファイルであっても良い。
※上述のASN.1はCMSでの定義であり、PKCS#7での定義は以下になる。
content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL

署名者情報 (SignerInfo Type)

このフィールドには、署名者の情報等が格納される。
ASN.1による記述は以下の通り。

SignerInfo ::= SEQUENCE {
  version CMSVersion,
  sid SignerIdentifier,
  digestAlgorithm DigestAlgorithmIdentifier,
  signedAttrs [0] IMPLICIT SignedAttributes OPTIONAL,
  signatureAlgorithm SignatureAlgorithmIdentifier,
  signature SignatureValue,
  unsignedAttrs [1] IMPLICIT UnsignedAttributes OPTIONAL }
SignerIdentifier ::= CHOICE {
  issuerAndSerialNumber IssuerAndSerialNumber,
  subjectKeyIdentifier [0] SubjectKeyIdentifier }
SignedAttributes ::= SET SIZE (1..MAX) OF Attribute
UnsignedAttributes ::= SET SIZE (1..MAX) OF Attribute
SignatureValue ::= OCTET STRING
SubjectKeyIdentifier ::= OCTET STRING
SignerInfoについて
フィールド名 内容
version このSignerInfoデータのヴァージョンを示す。
1 : SignerIdentifierフィールド(sid)で、IssuerAndSerialNumberを選んだ場合。
3 : SignerIdentifierフィールド(sid)で、SubjectKeyIdentifierを選んだ場合。
sid 署名者の公開鍵証明書を指定する。
受取人は、署名値の検証の為に、署名者の公開鍵を必要とする。
digestAlgorithm ダイジェスト/ハッシュ関数のアルゴリズムと、そのパラメータを指定する。
本項SignedDataのdigestAlgorithmsフィールドにリストされているアルゴリズムから指定しなければならない。
signedAttrs 署名された属性の集まり。
オプションであるが、EncapsulatedContentInfoのeContentTypeにDataタイプ(oid = 1.2.840.113549.1.7.1)以外が指定された場合は、必要。
このフィールドは、DERで符号化しなければならない。
signatureAlgorithm 署名アルゴリズムと、そのパラメータを指定する。
signature 署名値(ダイジェスト値/ハッシュ値と、署名者の秘密鍵から計算される)。
unsignedAttrs 署名されない属性の集まり。

プロセス

メッセージ・ダイジェスト(ハッシュ)のプロセス

署名に先立って、署名されるencapsulated contentのメッセージダイジェスト値/ハッシュ値を計算する必要がある。
具体的には、署名が適用されるencapContentInfoの eContent(OCTET STRING)の内容(コンテンツ)のみでダイジェスト値/ハッシュ値を計算する。
但し、BER,DER等の符号化されたASN.1データにおけるタグ(TAG)とデータ長(LENGTH)は含まない。

署名のプロセス

signedAttrsフィールドの有無によって、署名値を計算するフィールドが異なる。
署名値の計算には、以下に示される何れかのフィールドのダイジェスト値/ハッシュ値と、署名者の秘密鍵を用いる。
署名の詳細方法は、使用される署名アルゴリズムによって異なる。

signedAttrsフィールドが存在する場合は、DERで符号化されたsignedAttrsフィールドを、まるごとダイジェスト/ハッシュした値。
このフィールドには、以下の属性を含めなければならず、結果、間接的に上述のメッセージダイジェスト(ハッシュ)値が含まれることになる。

  • Content Type (attrType = 1.2.840.113549.1.9.3)
    値(attrValues)は、encapContentInfoのeContentTypeフィールドに書かれたoid値と同一の値が格納される。
  • Message Digest (attrType = 1.2.840.113549.1.9.4)
    値(attrValues)は、上述のeContentのダイジェスト値/ハッシュ値が格納される。

signedAttrsフィールドが存在しない場合は、上述のeContentをダイジェスト/ハッシュした値。

検証のプロセス

署名値の検証には、(2)項で計算した署名値と、署名者の公開鍵を用いる。
受信者は、何かしらの手段で署名者の公開鍵を入手する。
但し、本項SignedDataのcertificatesフィールドから公開鍵証明書を取得する手段が好ましい。
署名検証の詳細方法は、使用される署名アルゴリズムによって異なる。

受信者は、発信者によって計算されたどんなメッセージ・ダイジェスト値(ハッシュ値)も信用してはならない。
つまり、上述の署名値の検証の他にも、検証を要するメッセージ・ダイジェスト値(ハッシュ値)がある場合がある。
もし、本項SignedDataのsignerInfoフィールドにsignedAttributesが存在する場合は、 受信者は上述の『(1) メッセージダイジェスト(ハッシュ)のプロセス』項で示される方法で、 ダイジェスト値(ハッシュ値)を計算しなければならない。
そして、署名が正当である為には、その結果と、signedAttributesフィールドに含まれている Message Digest (attrType = 1.2.840.113549.1.9.4)属性の値が同一の値にならなければならない。

又、signedAttributesフィールドに含まれている Cntent Type (attrType = 1.2.840.113549.1.9.3)属性のoid値は、 本項SignedDataencapContentInfoフィールド中の eContentTypeのoid値と同一でなければならない。