前のページ <<<
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)で構成されています。
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型を参照してください。
以下では、これらの形式を説明します。
フォーマットは、ASN.1(4.1.2フォーマットの表記(ASN.1)[http://www.trustss.co.jp/smnDataFormat410.html]参照してください。)で表示します。
なお、電子署名データについては、Signed-data型を参照してください。
4.4.2 ContentInfo 情報
CMSデータ全体は、以下のように規定されています。
それぞれのデータ型は、オブジェクト識別子によって識別できます。以下にCMSによって規定されているオブジェクト識別子を記します。
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 |
ここでは、暗号化データに使われる、Enveloped-Data型について説明します。
4.4.3 暗号化の(内部的な)手順
CryptoAPIを使った暗号化の方法については、2.4電子証明書を使った暗号化で説明しました。ここでは、そのときに実行された内部的な処理について簡単に説明します。
電子証明書をつかった暗号化は、以下の手順でおこなわれます。
暗号化された情報を受け取った、受取人は、受取人情報から自身の鍵を使って共通鍵を復号します。復号された共通鍵を使って暗号化されたContentを復号します。従いまして、受取人以外の人は、Contentを復号できる鍵を持たないために復号することができません。また、全ての受取人は、自身用の復号鍵を利用できますので、鍵の情報が外部に漏れることを防止できます。
電子証明書をつかった暗号化は、以下の手順でおこなわれます。
- Contentを暗号化するアルゴリズムに合ったランダムな共通鍵を生成します。なお、共通鍵とは、暗号化と復号で同じ鍵を使う暗号化アルゴリズム用の鍵をいいます。
- 生成した共通鍵を、受取人ごとに暗号化します。共通鍵を暗号化する方法は、以下の4つの方式がサポートされています。
- 各々の受取人用の暗号化した共通鍵と受取人の情報をデータを受取人情報とします。なお、受取人とは、暗号化されたデータを復号できる人であり、暗号化データを生成した人(送信者)が決めた人です。
- Contentを1.で生成した共通鍵で暗号化します。
- 暗号化したデータに受取人数に相当する受取人情報を加えます。このデータをEnveloped-dataとします。
a.公開鍵による暗号化ここでは、公開鍵による暗号化について説明します。
b.受取人の公開鍵と、送信者の秘密鍵の対による暗号化
c.共通鍵による暗号化
d.パスワードによる暗号化
暗号化された情報を受け取った、受取人は、受取人情報から自身の鍵を使って共通鍵を復号します。復号された共通鍵を使って暗号化されたContentを復号します。従いまして、受取人以外の人は、Contentを復号できる鍵を持たないために復号することができません。また、全ての受取人は、自身用の復号鍵を利用できますので、鍵の情報が外部に漏れることを防止できます。
4.4.4 Enveloped-data 型
Enveloped-date型は、Contentを暗号化したデータと、そのデータを復号するために利用する鍵を受取人ごとに暗号化した鍵情報をカプセル化するために利用します。
Enveloped-data型は、以下のように規定されています。
originatorInfoは、データを最初に作成した人の情報です。具体的には、電子証明書やCRL(電子証明書執行リスト)が含まれます。
recipientInfosは、受取人(暗号データを復号できる人)の情報です。この情報は、1つ以上含まれなければなりません。もし、ここにoriginatorの情報が含まれていなければ、暗号化データを作成した本人でも、そのデータを復号できません。
encryptedContentInfoは、暗号化されたContentの情報です。
unprotectedAttrsは、暗号化されない属性情報です。
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 AttributeVersionは、データのシンタックスバージョン番号です。データの構成によって0、2、3、4のいずれかの値をとります。
originatorInfoは、データを最初に作成した人の情報です。具体的には、電子証明書やCRL(電子証明書執行リスト)が含まれます。
recipientInfosは、受取人(暗号データを復号できる人)の情報です。この情報は、1つ以上含まれなければなりません。もし、ここにoriginatorの情報が含まれていなければ、暗号化データを作成した本人でも、そのデータを復号できません。
encryptedContentInfoは、暗号化されたContentの情報です。
unprotectedAttrsは、暗号化されない属性情報です。
4.4.5 受取人情報 (RecipientInfo 型)
全ての受取人の情報は、この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型は、以下のように規定されています。
ridは、受取人を特定するための情報で、Contentを暗号化するために使用した電子証明書の情報を記します。別項のIssureとSerialNumber (IssuerAndSerialNumber)、SubjectKeyIdentifierを参照してください。
KeyEncryptionAlgorithmは、contentを暗号化した共通鍵を(この受取人のために)暗号化するために用いた暗号化アルゴリズムを記します。
encryptedKeyは、この受取人のために暗号化した暗号化された鍵情報です。
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 STRINGversionは、シンタックスバージョンです。RecipientIdentifireがissuerAndSerialNumberを選択(CHOICE)した場合には、値0をとります。また、subjectKeyIdentifierを選択(CHOICE)した場合には、値2をとります。これ以外の値をとりません。
ridは、受取人を特定するための情報で、Contentを暗号化するために使用した電子証明書の情報を記します。別項のIssureとSerialNumber (IssuerAndSerialNumber)、SubjectKeyIdentifierを参照してください。
KeyEncryptionAlgorithmは、contentを暗号化した共通鍵を(この受取人のために)暗号化するために用いた暗号化アルゴリズムを記します。
encryptedKeyは、この受取人のために暗号化した暗号化された鍵情報です。
前のページ[http://www.trustss.co.jp/smnDataFormat430.html] <<< >>> 総合目次[http://www.trustss.co.jp/smnIndex.html]
4.4.7 ご質問・ご要望
ご質問やご要望は、こちらからお送りください。