4.3 電子署名のデータ形式
電子署名の形式は、インターネット標準 RFC3852 (Cryptgraphic Message Syntax; 以下CMSといいます。)
によって規定されています。CryptoAPI は、このCMS形式のデータを取り扱うようになっています。CryptoAPIを使って電子証明書を扱う場合は、この形式を正しく理解していると、より詳細な利用ができるようになります。
CMSデータには、さまざまな属性データを含めることができます。属性データには、署名されるものとそうでないものがあります。改ざん(改竄)されたくない情報を属性に含める場合は、CMSのデータ構造を理解してから利用してください。
CMSデータには、さまざまな属性データを含めることができます。属性データには、署名されるものとそうでないものがあります。改ざん(改竄)されたくない情報を属性に含める場合は、CMSのデータ構造を理解してから利用してください。
4.3.1 CMSの概要
CMSは、PKCS#7を拡張して規定されました。CMS形式は、データをカプセル化するために使用されます。多くの場合は、電子署名や暗号化されたデータに利用されていますが、独自にデータをカプセル化する形式を定義することもできます。
CMS形式は、S/MIMEなどのPKIアプリケーションで多く使われています。CMS形式のデータは、CryptoAPIで容易に生成できます(利用方法は、5.3で説明します)。
CMSデータは、カプセル化するデータの型(ContentType)と実際のデータ(Content)で構成されています。
CMS形式は、S/MIMEなどのPKIアプリケーションで多く使われています。CMS形式のデータは、CryptoAPIで容易に生成できます(利用方法は、5.3で説明します)。
CMSデータは、カプセル化するデータの型(ContentType)と実際のデータ(Content)で構成されています。
ContentInfo | |
ContentType | |
Content |
また、ContentType として以下の6っの形式が規定されています。
data | 基本的なデータ型 |
signed-data | 署名データ型 |
enveloped-data | 封筒化されたデータ型 |
digested-data | ダイジェスト データ型 |
encrypted-data | 暗号化データ型 |
authenticated-data | 認証データ型 |
電子署名や暗号化(電子証明書を使ったもの)データは、それぞれ、signed-data、enveloped-data型を使います。ここでは、電子署名のデータ形式のsined-data型について説明します。暗号化のデータ形式enveloped-data型は、別項にて説明します。
以下では、これらの形式を説明します。
フォーマットは、ASN.1(4.1.2フォーマットの表記(ASN.1)[http://www.trustss.co.jp/smnDataFormat410.html]参照してください。)で表示します。
なお、暗号化データの形式は、Enveloped-data型で説明します。
4.3.2 ContentInfo 情報
CMSデータ全体は、以下のように規定されています。
それぞれのデータ型は、オブジェクト識別子によって識別できます。以下にCMSによって規定されているオブジェクト識別子を記します。
ここでは、Signed-data型について説明します。
ContentInfo ::= SEQUENCE { contentType ContentType, content [0] EXPLICIT ANY DEFINED BY contentType } ContentType ::= OBJECT IDENTIFIERcontentに、カプセル化されたデータが格納されますが、格納されるデータによってその形式が規定されています。その形式は、contentType によって識別できます。
それぞれのデータ型は、オブジェクト識別子によって識別できます。以下にCMSによって規定されているオブジェクト識別子を記します。
Data | 1.2.840.113549.1.7.1 |
signed-data | 1.2.840.113549.1.7.2 |
enveloped-data | 1.2.840.113549.1.7.3 |
digested-data | 1.2.840.113549.1.7.5 |
encrypted-data | 1.2.840.113549.1.7.6 |
authenticated-data | 1.2.840.113549.1.9.16.1.2 |
4.3.3 Signed-data 型
一般的にSined-data型は、電子署名データをカプセル化するために使われます。それ以外にも、電子証明書や電子証明書失効リスト(Certificate Revocation List; 以下CRLと記します)の配布などに使用します。
電子署名の手順や方法は、6.電子署名の概要(準備中)で説明しますので参照してください。
ここでは、データの形式について説明します。
Signed-dataは、以下のように規定されています。
電子署名の手順や方法は、6.電子署名の概要(準備中)で説明しますので参照してください。
ここでは、データの形式について説明します。
Signed-dataは、以下のように規定されています。
id-signedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs7(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
versionは、データ自身のシンタックスバージョンです。この値は、certificate、eContentType、SignerInfoの値によって決定した値になります。
digestAlgorithmsは、電子署名に利用するメッセージダイジェスト(または、ハッシュ)値の計算アルゴリズムを示します。電子証明書の署名アルゴリズムと同様のものが多数セットになったものです。
encapContentInfoは、署名値そのものです。
certificatesは、署名者の電子証明書です。
crlsは、certificatesの失効情報です。
signerInfoは、署名者それぞれの情報です。
digestAlgorithmsは、電子署名に利用するメッセージダイジェスト(または、ハッシュ)値の計算アルゴリズムを示します。電子証明書の署名アルゴリズムと同様のものが多数セットになったものです。
encapContentInfoは、署名値そのものです。
certificatesは、署名者の電子証明書です。
crlsは、certificatesの失効情報です。
signerInfoは、署名者それぞれの情報です。
4.3.4 EnCapsulatedContentInfo 型
EncapusulatedContentInfoは、以下のように規定されています。
EncapsulatedContentInfo ::= SEQUENCE { eContentType ContentType, eContent [0] EXPLICIT OCTET STRING OPTIONAL } ContentType ::= OBJECT IDENTIFIER
eContentTypeは、オブジェクト識別子でデータの内容によってユニークな値をとります。
eContentは、署名されたデータそのもので、DERエンコードされる必要はありません。なお、eContentは、省略するとができ、このデータの外部にそれをおくことができます。
eContentは、署名されたデータそのもので、DERエンコードされる必要はありません。なお、eContentは、省略するとができ、このデータの外部にそれをおくことができます。
4.3.5 SignerInfo
SignerInfoは、以下のように規定されています。
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 Attribute ::= SEQUENCE { attrType OBJECT IDENTIFIER, attrValues SET OF AttributeValue } AttributeValue ::= ANY SignatureValue ::= OCTET STRING
versionは、シンタックスバージョンで次のように規定されています。SignerIdentifierがissuerAndSerialNumberを選択(CHOICE)した場合は、値1をとります。また、SignerIdentifierがsubjectKeyIdentifierを選択(CHOICE)した場合は、値3をとります。
sidは、署名者それぞれの電子証明書の情報です。
digestAlgorithmB>は、電子署名されるコンテンツ(Content)およびSignedAttributeからメッセージ ダイジェスト(または、ハッシュ値)を算出する方法の識別情報(オブジェクト識別子とパラメータが含まれた情報)です。
sinedAttrsは、電子署名された属性情報です。電子署名されていますので、この情報を改ざんや否認することはできません。オプションですが、電子署名の場合はこの情報を含める必要があります。
SignatureAlgorithmは、署名者がダイジェスト(または、ハッシュ値に)電子署名するアルゴリズムとその付随データを記します。
signatureは、電子署名値そのものです。
unsinedAttrsは、電子署名の対象外の属性データです。
sidは、署名者それぞれの電子証明書の情報です。
digestAlgorithmB>は、電子署名されるコンテンツ(Content)およびSignedAttributeからメッセージ ダイジェスト(または、ハッシュ値)を算出する方法の識別情報(オブジェクト識別子とパラメータが含まれた情報)です。
sinedAttrsは、電子署名された属性情報です。電子署名されていますので、この情報を改ざんや否認することはできません。オプションですが、電子署名の場合はこの情報を含める必要があります。
SignatureAlgorithmは、署名者がダイジェスト(または、ハッシュ値に)電子署名するアルゴリズムとその付随データを記します。
signatureは、電子署名値そのものです。
unsinedAttrsは、電子署名の対象外の属性データです。
前のページ[http://www.trustss.co.jp/smnDataFormat420.html] <<< >>> 次のページ[http://www.trustss.co.jp/smnDataFormat440.html]
4.3.6 ご質問・ご要望
ご質問やご要望は、こちらからお送りください。(匿名でも可能です。)