前のページ <<<

4.4 暗号化データの形式

 電子署名の形式は、インターネット標準 RFC3852 (Cryptgraphic Message Syntax; 以下CMSといいます。)によって規定されています。CryptoAPI は、このCMS形式のデータを取り扱うようになっています。CryptoAPIを使って電子証明書を扱う場合は、この形式を正しく理解していると、より詳細な利用ができるようになります。

4.4.1 CMSの概要

 CMSは、PKCS#7を拡張して規定されました。CMS形式は、データをカプセル化するために使用されます。多くの場合は、電子署名や暗号化されたデータに利用されていますが、独自にデータをカプセル化する形式を定義することもできます。
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型を使います。ここでは、暗号化データの形式のEnveloped-data型について説明します。暗号化のデータ形式enveloped-data型は、別項にて説明します。
以下では、これらの形式を説明します。
フォーマットは、ASN.1(4.1.2フォーマットの表記(ASN.1)[http://www.trustss.co.jp/smnDataFormat410.html]参照してください。)で表示します。

なお、電子署名データについては、Signed-data型を参照してください。

4.4.2 ContentInfo 情報

 CMSデータ全体は、以下のように規定されています。
ContentInfo ::= SEQUENCE {
    contentType   ContentType,
    content       [0] EXPLICIT ANY DEFINED BY contentType
}

ContentType ::= OBJECT IDENTIFIER
contentに、カプセル化されたデータが格納されますが、格納されるデータによってその形式が規定されています。その形式は、contentTypeによって識別できます。
それぞれのデータ型は、オブジェクト識別子によって識別できます。以下にCMSによって規定されているオブジェクト識別子を記します。
Data1.2.840.113549.1.7.1
signed-data1.2.840.113549.1.7.2
enveloped-data1.2.840.113549.1.7.3
digested-data1.2.840.113549.1.7.5
encrypted-data1.2.840.113549.1.7.6
authenticated-data1.2.840.113549.1.9.16.1.2
ここでは、暗号化データに使われる、Enveloped-Data型について説明します。

4.4.3 暗号化の(内部的な)手順

 CryptoAPIを使った暗号化の方法については、2.4電子証明書を使った暗号化で説明しました。ここでは、そのときに実行された内部的な処理について簡単に説明します。

電子証明書をつかった暗号化は、以下の手順でおこなわれます。
  1. Contentを暗号化するアルゴリズムに合ったランダムな共通鍵を生成します。なお、共通鍵とは、暗号化と復号で同じ鍵を使う暗号化アルゴリズム用の鍵をいいます。
  2. 生成した共通鍵を、受取人ごとに暗号化します。共通鍵を暗号化する方法は、以下の4つの方式がサポートされています。
  3. a.公開鍵による暗号化
    b.受取人の公開鍵と、送信者の秘密鍵の対による暗号化
    c.共通鍵による暗号化
    d.パスワードによる暗号化
    ここでは、公開鍵による暗号化について説明します。

  4. 各々の受取人用の暗号化した共通鍵と受取人の情報をデータを受取人情報とします。なお、受取人とは、暗号化されたデータを復号できる人であり、暗号化データを生成した人(送信者)が決めた人です。
  5. Contentを1.で生成した共通鍵で暗号化します。
  6. 暗号化したデータに受取人数に相当する受取人情報を加えます。このデータをEnveloped-dataとします。

暗号化された情報を受け取った、受取人は、受取人情報から自身の鍵を使って共通鍵を復号します。復号された共通鍵を使って暗号化されたContentを復号します。従いまして、受取人以外の人は、Contentを復号できる鍵を持たないために復号することができません。また、全ての受取人は、自身用の復号鍵を利用できますので、鍵の情報が外部に漏れることを防止できます。

4.4.4 Enveloped-data 型

 Enveloped-date型は、Contentを暗号化したデータと、そのデータを復号するために利用する鍵を受取人ごとに暗号化した鍵情報をカプセル化するために利用します。

Enveloped-data型は、以下のように規定されています。
EnvelopedData ::= SEQUENCE {
    version CMSVersion,
    originatorInfo        [0] IMPLICIT OriginatorInfo OPTIONAL,
    recipientInfos        RecipientInfos,
    encryptedContentInfo  EncryptedContentInfo,
    unprotectedAttrs      [1] IMPLICIT UnprotectedAttributes OPTIONAL }

OriginatorInfo ::= SEQUENCE {
    certs   [0] IMPLICIT CertificateSet OPTIONAL,
    crls    [1] IMPLICIT RevocationInfoChoices OPTIONAL }

RecipientInfos ::= SET SIZE (1..MAX) OF RecipientInfo

EncryptedContentInfo ::= SEQUENCE {
    contentType                  ContentType,
    contentEncryptionAlgorithm   ContentEncryptionAlgorithmIdentifier,
    encryptedContent             [0] IMPLICIT EncryptedContent OPTIONAL }

EncryptedContent ::= OCTET STRING

UnprotectedAttributes ::= SET SIZE (1..MAX) OF Attribute
Versionは、データのシンタックスバージョン番号です。データの構成によって0、2、3、4のいずれかの値をとります。

originatorInfoは、データを最初に作成した人の情報です。具体的には、電子証明書やCRL(電子証明書執行リスト)が含まれます。

recipientInfosは、受取人(暗号データを復号できる人)の情報です。この情報は、1つ以上含まれなければなりません。もし、ここにoriginatorの情報が含まれていなければ、暗号化データを作成した本人でも、そのデータを復号できません。

encryptedContentInfoは、暗号化されたContentの情報です。

unprotectedAttrsは、暗号化されない属性情報です。

4.4.5 受取人情報 (RecipientInfo 型)

 全ての受取人の情報は、このRecipientInfo型で与えられます。RecipientInfoは、利用する鍵の種別によって違った形式を持ちます。
以下のように規定されています。
RecipientInfo ::= CHOICE {
    ktri   KeyTransRecipientInfo,
    kari   [1] KeyAgreeRecipientInfo,
    kekri  [2] KEKRecipientInfo,
    pwri   [3] PasswordRecipientinfo,
    ori    [4] OtherRecipientInfo }
鍵の種別、ktri(公開鍵)、kari((送信者の鍵と受取人の鍵のペア)、kekri(共通鍵)、pwri(パスワード)、ori(その他)によってその内容が違います。
ここでは、電子証明書による暗号化・復号に絞っていますので、公開鍵を使った場合のRecipientInfoを説明します。

4.4.6 公開鍵を使った場合の受取人情報 (KeyTransRecipientInfo 型)

 公開が儀を使った場合の受取人情報、KeyTransRecipientInfo型は、以下のように規定されています。
KeyTransRecipientInfo ::= SEQUENCE {
    version                  CMSVersion,  -- always set to 0 or 2
    rid                      RecipientIdentifier,
    keyEncryptionAlgorithm   KeyEncryptionAlgorithmIdentifier,
    encryptedKey             EncryptedKey }

RecipientIdentifier ::= CHOICE {
    issuerAndSerialNumber   IssuerAndSerialNumber,
    subjectKeyIdentifier    [0] SubjectKeyIdentifier }

EnctyptedKey ::= OCTET STRING
versionは、シンタックスバージョンです。RecipientIdentifireがissuerAndSerialNumberを選択(CHOICE)した場合には、値0をとります。また、subjectKeyIdentifierを選択(CHOICE)した場合には、値2をとります。これ以外の値をとりません。

ridは、受取人を特定するための情報で、Contentを暗号化するために使用した電子証明書の情報を記します。別項のIssureSerialNumber (IssuerAndSerialNumber)、SubjectKeyIdentifierを参照してください。

KeyEncryptionAlgorithmは、contentを暗号化した共通鍵を(この受取人のために)暗号化するために用いた暗号化アルゴリズムを記します。

encryptedKeyは、この受取人のために暗号化した暗号化された鍵情報です。

4.4.7 ご質問・ご要望

 ご質問やご要望は、こちらからお送りください。


PDF-Tools
PDFおよびPDF/Aを作成・編集などができるライブラリ
128ビットの暗号化や電子署名に対応
http:
//www.trustss.co.jp/pdf/
4. 各種データ形式
4.1 電子証明書のデータ形式
4.2 電子証明書拡張情報の形式
4.3 電子署名の形式
4.4 暗号化データの形式
4.1 電子証明書のデータ形式
4.1.1 電子証明書の概要
4.1.2 ASN.1フォーマット
4.1.3 電子証明書
4.1.4 CryptoAPIとの関係
4.1.5 証明書情報
4.1.6 Name データ型
4.1.7 UTCTime型
4.1.8 GeneralizedTime型
4.1.9 ご質問・ご要望
4.2 電子証明書拡張情報の形式
4.2.1 拡張情報
4.2.2 標準拡張情報
4.2.3 認証局鍵識別子
4.2.4 サブジェクト鍵識別子
4.2.6 証明書ポリシー
4.2.7 サブジェクト代替名
4.2.8 基本制約
4.2.9 拡張鍵用途
4.2.10 ご質問・ご要望
4.3 電子署名の形式
4.3.1 CMSの概要
4.3.2 ContentInfo 情報
4.3.3 Signed-data 型
4.3.4 EnCapsulatedContentInfo 型
4.3.5 SignerInfo
4.3.6 ご質問・ご要望
4.4 暗号化データの形式
4.4.1 CMSの概要
4.4.2 ContentInfo 情報
4.4.3 暗号化の(内部的な)手順
4.4.4 Enveloped-data 型
4.4.5 受取人情報
4.4.6 公開鍵を使った場合の受取人情報
4.4.7 ご質問・ご要望
株)トラスト・ソフトウェア・システム
暗号化・電子署名・タイムスタンプ ライブラリ作成します。
お問い合わせください。
会員用ログイン
ID:
パスワード:
ログインすると、一般公開していないページを閲覧できます。