最終更新日:2002年12月12日
証明書(公開鍵証明書)の標準として、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 が公開されています。
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 ルーターなどに利用されます。 |
X.509 証明書や関連技術のフォーマットには、ASN.1 と呼ばれる表記方法が使用されています。ASN.1 は、構造化された複雑なデータ形式を表現するための表記法です。
以下に、ASN.1 でエンコードされたデータの基本構造を示します(図 3-5)。ASN.1 のデータは、「識別子」「データ長」「値」の順で並べられます。データ構造はネストすることも可能であり、ネストする場合、値にはさらに「識別子」「データ長」「値」のフィールドが入ります。

図 3-5 ASN.1 の構成
それぞれのフィールドの意味は以下のようになります。
- 識別子:値に含まれるデータの種別(データ型)を指定します [38]。
- データ長:値に含まれるデータの長さを指定します。
- 値:データの内容が記述されます。
以下に ASN.1 で使用される基本的なデータ型を示します(表 3-3)。
表 3-3 ASN.1 の基本的なデータ型
|
データ型 |
説明 |
|
BOOLEAN |
真(True)と偽(False)の値を表現します。 |
|
INTEGER |
任意の長さの整数を表します。 |
|
BIT STRING |
任意の長さのビット列を表します。 |
|
OCTET STRING |
任意の長さのバイト列を表します。 |
|
NULL |
値が空(ヌル)であることを表します。 |
|
OBJECT IDENTIFIER (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)といいます。
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章にて解説します。
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証明書のバージョンです。 |
INTEGER |
|
|
serialNumber (シリアル番号) |
証明書を一意に識別するための番号です。発行者(CA)が割り当てます。 |
INTEGER |
||
|
signature (アルゴリズム識別子) |
発行者が証明書に署名する際に用いるアルゴリズムです。OIDで指定します。 |
AlgorithmIdentifier |
||
|
issuer (発行者) |
証明書を発行した機関(CA) の名前です。X.500 識別名 (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 |
||
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 が指定されている場合のみ指定可能です。 |
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.