前のページ 目次 次のページ

最終更新日:2002年12月12日


3.3  電子証明書

3.3.1  X.509 証明書

証明書(公開鍵証明書)の標準として、ITU-T が策定した X.509 があります。X.509 は X.500 ディレクトリシリーズの1つであり、ISO/IEC の国際標準として規定されています。

X.509 の最初のバージョン(X.509v1)は 1988年に発行されました。さらに 1997年に発行された最新バージョン(X.509v3) においては、証明書に拡張領域が設けられ任意の拡張が可能になりました。X.509v3 は 2000年に改定され、後述するデルタ CRL と属性証明書の定義が明確になっています。

X.509v3 をインターネットで利用することを目的として、IETF の PKIX 作業部会によって RFC2459 が 1999年に策定されました。RFC2459 では、1997年版のX.509v3 証明書と CRL [36] v2 に関するプロファイルを規定しています。これを改訂した RFC 3280 が公開されています。

3.3.2  証明書の種類

X.509 証明書は、用途によって以下の種類があります(表 3-1)。一般に「証明書」という場合は、「公開鍵証明書」のことを指します。

表 3-1 証明書の種類

種類

説明

公開鍵証明書

(Public Key Certificate)

公開鍵とその所有者を証明します。

属性証明書

(Attribute Certificate)

公開鍵証明書で証明された人に対して、その人が所有する権限や役割を証明します。公開鍵証明書と組み合わせて使用します。2000年版の X.509v3 で追加されました。詳細は 9章で解説します。

特定証明書

(Qualified Certificate)

人(自然人)に対して発行することを目的とした証明書です。電子署名に用いられます。詳細は 9章で解説します。

また、公開鍵証明書は発行する対象によって、以下のように分類できます(表 3-2)。

表 3-2 公開鍵証明書の種類

種類

説明

CA 証明書

CA に対して発行する証明書です。CA 自身の秘密鍵で署名した自己署名証明書と、他の CA に発行された証明書があります。

エンドエンティティ証明書

PKI ユーザに対して発行する証明書です。Web クライアントやWeb サーバー、VPN ルーターなどに利用されます。

3.3.3  ASN.1

X.509 証明書や関連技術のフォーマットには、ASN.1 と呼ばれる表記方法が使用されています。ASN.1 は、構造化された複雑なデータ形式を表現するための表記法です。

以下に、ASN.1 でエンコードされたデータの基本構造を示します(図 3-5)。ASN.1 のデータは、「識別子」「データ長」「値」の順で並べられます。データ構造はネストすることも可能であり、ネストする場合、値にはさらに「識別子」「データ長」「値」のフィールドが入ります。

図 3-5 ASN.1 の構成

それぞれのフィールドの意味は以下のようになります。

以下に ASN.1 で使用される基本的なデータ型を示します(表 3-3)。

表 3-3 ASN.1 の基本的なデータ型

データ型

説明

BOOLEAN

真(True)と偽(False)の値を表現します。

INTEGER

任意の長さの整数を表します。

BIT STRING

任意の長さのビット列を表します。

OCTET STRING

任意の長さのバイト列を表します。

NULL

値が空(ヌル)であることを表します。

OBJECT IDENTIFIER (OID)

暗号アルゴリズムやデータ型などの規格を表現するための識別子です。
OIDは世界中で一意に定められます。

SEQUENCE

いくつかのデータの並び(シーケンス)を表します。
データは定義された順に現れます。

SET

いくつかのデータの集合(セット)を表します。
データは定義に関係なく任意の順に現れます。

PrintableString

印字可能な文字列を表します。英数字 [39] といくつかの記号 ['()+,-./:=?]および半角スペースが含まれます。

T61String

ASCII を 8ビットに拡張した、T.61文字列を表します。
ラテン文字や日本語を表現するために使用します。

IA5String

ASCII 文字列を表します。

UTCTime

日時を表します。西暦を下 2桁で表現します。

GeneralizedTime

日時を表します。西暦を 4桁で表現します。

暗号アルゴリズムやデータ形式、プロトコル名などは、オブジェクト識別子 (OID: Object Identifier)という識別子を用いて表現されます。OID は 、世界で一意に表現できるように、ツリー形式で管理され、ITU-TおよびISOによって番号が割り振られます。

例えば、前章で解説した RSA によるデジタル署名 (sha1WithRSAEncryption) は以下の OID で表されます。

sha1WithRSAEncryption OBJECT IDENTIFIER ::= {

  iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1 sha1(5) }

なお、アルゴリズムを識別するOIDをアルゴリズム識別子(Algorithm Identifier)といいます。

3.3.4  識別名

X.509証明書では、証明書の所有者や CA の名前を、DN (Distinguished Name) とよばれる形式で表現します。DN は、世界で一意の名前をつけるために考案されたもので、属性型 (Attribute Type) と属性値 (Attribute Value) の並び(シーケンス)から構成されています。属性型は属性値の種類を指定するものであり、国(c)、組織(o)、組織単位(ou)、名前(cn)などがあります。属性値には、実際のデータが入ります。

以下にDNの構造を示します(図 3-6)。

図 3-6 DNの構造の例

DN は、属性型と属性値をイコール(=)で結び、さらにそれぞれの属性をカンマ(,)でつなげて表現します。図の例では「c=JP, o=Some Company, ou=Some Section, cn=Suzuki Taro」となり [40]、日本 (JP) の Some Company という企業の Some Section というセクションにいる Suzuki Taro を示しています。DNについての詳細は、6章にて解説します。

3.3.5  X.509 証明書のプロファイル

X.509 証明書の構造を示します(図 3-7)。証明書 (Certificate) は、署名前証明書 (tbsCertificate) と署名アルゴリズム (signatureAlgorithm)、署名値(signatureValue) から構成されます。証明書の所有者や公開鍵、有効期間などの情報は署名前証明書 (tbsCertificate) に記載され、署名前証明書 (tbsCertificate) に対する CA のデジタル署名が署名値 (signatureValue) に記述されます。

図 3-7 X.509証明書の構成

証明書を Internet Explorer にて表示した例を示します(図 3-8)。証明書のシリアル番号、発行者名などが表示されています。

図 3-8 Internet Explorerにて証明書を表示した例

RFC2459 にて定義された、X.509 証明書の基本領域についてのプロファイルを示します(表 3-4)。なお、ここでは説明のために構造を簡略化しています。正確な情報は RFC2459 および X.509 を参照してください。

表 3-4 X.509 証明書の RFC2459 基本プロファイル

領域名

説明

データ型

tbsCertificate

(署名前証明書)

証明書の基本的な情報と公開鍵を表します。

TBSCertificate

 

version

(バージョン)

X.509証明書のバージョンです。
v1の場合は”0”となり、v3 の場合は”2”となります。

INTEGER

serialNumber

(シリアル番号)

証明書を一意に識別するための番号です。発行者(CA)が割り当てます。

INTEGER

signature

(アルゴリズム識別子)

発行者が証明書に署名する際に用いるアルゴリズムです。OIDで指定します。

AlgorithmIdentifier

issuer

(発行者)

証明書を発行した機関(CA) の名前です。X.500 識別名 (DN) において記述されます。
CA の証明書に含まれる subject と同じDNが記述されます。

Name

validity

(有効期間)

証明書の有効期間を表します。

Validity

 

notBefore

(開始時刻)

証明書が有効になる時刻です。

Time

notAfter

(終了時刻)

証明書が無効になる時刻です。

Time

subject

(主体者)

証明書の所有者の名前です。発行者と同じく DN で記述されます。ユーザの名前やサーバー名などが記述されます。

Name

subjectPublicKeyInfo

(主体者公開鍵情報)

証明書所有者(主体者)の公開鍵に関する情報です。

SubjectPublicKeyInfo

 

algorithm

(アルゴリズム)

公開鍵のアルゴリズム名です。OID で指定します。

AlgorithmIdentifier

subjectPublicKey

(主体者公開鍵)

主体者が所有している公開鍵です。

BIT STRING

issuerUniqueID

(発行者ユニーク識別子)

発行者名を再利用した際に、発行者を識別するために使用されます。バージョン 2で追加されました。

発行者名は再利用しないことが推奨されており、使用するべきではありません。この項目は省略可能です。

UniqueIdentifier

subjectUniqueID

(主体者ユニーク識別子)

主体者名を再利用した際に、主体者を識別するために使用されます。バージョン 2 で追加されました。

発行者ユニーク識別子と同様に、主体者ユニーク識別子は使用しないことが推奨されています。この項目は省略可能です。

UniqueIdentifier

extensions

(拡張領域)

証明書の拡張領域です。バージョン 3で追加されました。

Extensions

(Extensionのシーケンス)

signatureAlgorithm

(署名アルゴリズム)

発行者が証明書に署名する際のアルゴリズムです。OID で指定します。

tbsCertificate の signature(アルゴリズム識別子)と同じ値を指定します。

AlgorithmIdentifier

signatureValue

(署名値)

発行者のデジタル署名が入ります。

BIT STRING

3.3.6  X.509証明書の拡張領域

X.509 のバージョン3 より、証明書に拡張領域 (extensions) を追加できるようになりました。拡張領域を用いることにより、目的に応じた証明書の拡張が可能になります。

拡張領域は、3つのフィールドの並び(シーケンス)で構成されます(図 3-9)。

図 3-9 X.509証明書の拡張領域

(1)  識別子 (extnID)

拡張子の種別を表します。OID で指定します。

(2)  重要度 (critical)

拡張子の重要度(critical)を示します。重要度は BOOLEAN 型であり、真(True) か 偽(False) にて指定します。拡張子が重要と指定されている場合 [41] は、証明書を利用するPKI アプリケーションはその拡張子を認識できなければなりません。PKI アプリケーションがその拡張子を認識できない場合は、該当する証明書を拒絶しなければなりません。

(3)  拡張値 (extnValue)

拡張子のデータが入ります。データの型は識別子の OID にて決まります。

以下に、RFC2459 における X.509 証明書の拡張領域のプロファイルを示します(表 3-5)。重要度フラグの指定について、RFC2459 で「しなければならない (MUST)」と表記されたものは(M)、「 する必要がある (SHOULD)」と表記されたものは(S)で表しています。

また、X.509v3 の 2000年版で追加されたフィールドは RFC2459 には記載されておらず、RFC2459 の後継 RFC 3280 [42] に記載されました。

表 3-5 X.509 証明書の RFC2459 拡張プロファイル

領域名

重要度

説明

Subject Type Extensions (主体タイプ拡張)

basicConstraints

(基本制約)

True [43]

(M)

CAの証明書であるか否かを示します。EE(エンドエンティティ)に発行した証明書が、不正に CA の証明書として使われることを防ぐために使用します。CA の証明書である場合は、その CA の下位 CA となることができる階層数を指定できます。

CA 証明書の場合は、このフィールドは必須であり、重要フラグを True にしなければなりません。EE 証明書の場合は、このフィールドは使用しないことが推奨されています。

Name Extensions (名前拡張)

issuerAltName

(発行者別名)

False

(S)

発行者(issuer)の別名を指定します。重要フラグはFalseにすることが推奨されています。

subjectAltName

(主体者別名)

True [44] (M)

基本領域の主体者(subject)の別名(メールアドレス等)を指定します。主体者(subject)領域が空の場合、このフィールドは重要フラグとともに必須となります。

nameConstraints

(名前制約)

True

(M)

下位CAの証明書に使用されます。下位 CA が発行できる証明書の範囲を限定します。

Key Attributes (鍵属性)

keyUsage

(鍵使用目的)

True

(S)

証明書に含まれる公開鍵の使用目的を示します。暗号用の鍵と署名検証用の鍵を区別するために使用します。使用目的はビット列で指定します(表 3-6)。

extendedKeyUsage

(拡張鍵使用目的)

True

False

keyUsage フィールドよりも詳細に、証明書に含まれる公開鍵の使用目的を示します。使用目的は、OID で指定され、Webや電子メールの保護などがあります。

privateKeyUsagePeriod

(秘密鍵有効期間)

False

(M)

デジタル署名に使用する秘密鍵の有効期間を指定します。RFC2459では、このフィールドは使用しないことが推奨されています。

subjectKeyIdentifier

(主体者鍵識別子)

False

(M)

主体者が複数の鍵ペアと証明書を持つ場合に、特定の公開鍵を特定するために用います。公開鍵の特定には、公開鍵のハッシュ値などを用います。

authorityKeyIdentifier

(機関鍵識別子)

False

(M)

subjectKeyIdentifier と同様、CA が複数の鍵ペアと証明書を持つ場合に、特定の公開鍵を特定するために用います。

Policy Information (ポリシー情報)

certificatePolicies

(証明書ポリシー)

記述

なし

証明書ポリシー (CP: Certificate Policy)を OID で指定します。また、認証局運用規定(CPS) への URL を指定します。CP を規定しない場合は AnyPolicy という OID を指定します。

CP, CPS については、3.4.1 にて解説します。

policyMappings

(ポリシーマッピング)

False

(M)

複数の CA が相互認証を行う場合に、それぞれの CP を対応付けるために使用します。

policyConstraints

(ポリシー制約)

True

False

下位 CA に対して、ポリシーマッピングの制限と CP の義務付けを行います。

inhibitAnyPolicy

(AnyPolicyの禁止)

True

下位CAに対して、CP に AnyPolicy を記載した証明書を発行することを禁止します。X.509v3 の 2000年版において追加されました。

Additional Information (追加情報)

cRLDistributionPoints

(CRL配布点)

False

(S)

証明書失効リスト(CRL) [45] を入手するための情報を記載します。CRL を配布する URI と、証明書の失効理由を記述できます。CA と PKI アプリケーションは、このフィールドに対応することが推奨されています。

freshestCRL

(最新CRL)

False

(M)

4章で解説するデルタ CRL を入手するための情報を記載します。記述方法は、cRLDistributionPoints と同様です。X.509v3 の 2000年版において追加されました。

subjectDirectoryAttributes

(主体者ディレクトリ属性)

False

(M)

主体者の属性を指定します。このフィールドは使用しないことが推奨されています。

Private Internet Extensions (独自インターネット拡張)

authorityInfoAccess

(機関アクセス情報)

False

(M)

CA や OCSPサーバー [46] などの認証機関へアクセスするための方法を記載します。アクセス方法はURIや電子メールアドレス(rfc822Name)で指定します。

subjectInfoAccess

(主体者アクセス情報)

False

(M)

主体者へアクセスするための方法を記載します。アクセス方法は authorityInfoAccess と同様です。

RFC2459 の後継 RFC 3280 にて追加されました。

以下に、鍵使用目的(keyUsage)で指定される公開鍵の用途を示します(表 3-6)。鍵使用目的はビット列で表現されており、複数の用途を同時に指定できます。

表 3-6 鍵使用目的の種類

名称

鍵使用目的

digitalSignature

デジタル署名の検証に利用します。

nonRepudiation

否認防止を目的とした、デジタル署名の検証に利用します。

keyEnciperment

鍵配送を目的とした、共通鍵などの鍵の暗号化に利用します。

dataEncipherment

データの暗号化に利用します。

keyAgreement

DH アルゴリズムなどによる鍵合意(Key Agreement) に利用します。

keyCertSign

証明書の署名を検証するために利用します。CA 証明書のみ有効です。

cRLSign

証明書失効リスト(CRL)の署名を検証するために利用します。

encipherOnly

データの暗号化にのみ利用します。keyAgreement が指定されている場合のみ指定可能です。

decipherOnly

データの復号にのみ利用します。keyAgreement が指定されている場合のみ指定可能です。

3.3.7  PKCS

PKI で利用する証明書や秘密鍵などのフォーマットを定めた標準として、PKCS (Public Key Cryptography Standard) が RSA Security 社によって策定されています。PKCS で定められた標準は、現在、1番から 15番まで存在します。

以下に PKCS の種別を示します(表 3-7)。

表 3-7 PKCS の種別

種別

名称

説明

PKCS #1

RSA Encryption Standard

RSA暗号方式のアルゴリズムとデータフォーマットです。RFC2437 にて公開されています。

PKCS #3

Diffie-Hellman Key-Agreement Standard

DHを用いた鍵交換方式の実装方法です。

PKCS #5

Password-Based Cryptography Standard

パスワードをベースとした用いた暗号方式です。RFC2898 にて公開されています。

PKCS #6

Extended-Certificate

Syntax Standard

証明書の形式を規定したものです。

PKCS #7

Cryptographic Message

Syntax Standard

暗号データやデジタル署名のフォーマットです。証明書や CRL の配布、S/MIME にも利用されています。RFC2315 にて公開されています。

PKCS #8

Private-Key Information

Syntax Standard

秘密鍵のデータフォーマットを定めたものです。

PKCS #9

Selected Attribute Types

PKCS #7, PKCS #10, PKCS #12 等の属性型を定めたものです。RFC2985 にて公開されています。

PKCS #10

Certification Request

Syntax Standard

証明書の申請に使用するフォーマットです。RFC2986 にて公開されています。

PKCS #11

Cryptographic Token

Interface Standard

暗号トークン(スマートカード)とのインターフェースを定めています。

PKCS #12

Personal Information

Exchange Syntax Standard

秘密鍵と証明書を交換するためのフォーマットです。秘密鍵はパスワードで保護されます。

PKCS #13

Elliptic Curve

Cryptography Standard

楕円鍵暗号に関するアルゴリズムです。

PKCS #15

Cryptographic Token

Information Format

Standard

暗号トークンのデータフォーマットを定めたものです。

PKCS #2, PKCS #4 は、PKCS #1 に吸収されたため廃止になりました。また、PKCS#14 は未定義となっています。


前のページ 目次 次のページ Copyright © 2002 Information-technology Promotion Agency, Japan. All rights reserved.