都立工業高等専門学校(現、東京都立産業技術高等専門学校)を卒業、
機械工学が専攻だった癖に論理回路やオーディオ関係の技術者らしい。
趣味として、音楽関係のフリーソフト開発や、DTM・チップチューン活動をしたり、
オーケストラや吹奏楽団でオーボエを吹いてる人。
上のアドレスの『@』と『nifty』の間に『spa.』を追加して下さい。
画像で記載されているアドレスでも届きますが、スパム防止のフィルターを多数導入しています。
本ホームページはリンクフリーです。
リンクは、トップページ
"http://shaw.la.coocan.jp/"
にお願いいたします。
Top Page\ Security Top\ CMS Top\
コンテンツに改ざんが無く、正当である事を証明するデータ。
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
フィールド名 | 内容 |
---|---|
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個以上の署名者の情報(署名値を含む)が格納される。 |
このフィールドには、署名されているコンテンツのタイプと、そのコンテンツ実体が格納される。
ASN.1による記述は以下の通り。
EncapsulatedContentInfo ::= SEQUENCE { eContentType ContentType, eContent [0] EXPLICIT OCTET STRING OPTIONAL }
フィールド名 | 内容 |
---|---|
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 |
このフィールドには、署名者の情報等が格納される。
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
フィールド名 | 内容 |
---|---|
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フィールドを、まるごとダイジェスト/ハッシュした値。
このフィールドには、以下の属性を含めなければならず、結果、間接的に上述のメッセージダイジェスト(ハッシュ)値が含まれることになる。
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値は、
本項SignedDataのencapContentInfoフィールド中の
eContentTypeのoid値と同一でなければならない。