PKIとは
PKI(Public Key Infrastructure)は「公開鍵基盤」ともいい、「公開鍵暗号方式」という技術を利用し、暗号化、デジタル署名、認証等のセキュリティ対策が実現する基盤です。
PKIの構成要素
- 認証局 (CA: Certification Authority)
証明書所有者に対して、公開鍵と、対応する秘密鍵の所有者の証明書(公開鍵証明書)を発行します。
発行した証明書の信頼性が失われた場合は、その証明書を失効させ、証明書失効リスト (CRL) を発行します。
証明書利用者が証明書の状態を確認できるように、CRLをリポジトリに公開します。 - 登録局 (RA: Registration Authority)
ユーザからの証明書申請が発生した場合に本人確認を行います。
CAに対して証明書の発行や失効を要求します。 - リポジトリ (Repository)
証明書およびCRLを格納しユーザへ公開します。 - アーカイブ (Archive)
証明書の長期保存や秘密鍵のバックアップを行います。 - 証明書所有者 (Certificate Holder)
証明書および対応する秘密鍵を用いて、電子文書へのデジタル署名や暗号文の復号を行います。
証明書に対応する秘密鍵を安全に保持し、デジタル署名や暗号文の復号に使用します。 - 証明書利用者 (Relying Party)
証明書所有者の証明書を入手し、デジタル署名の検証や文書の暗号化を行います。
リポジトリから証明書やCRLを取得し、それらの有効性を検証します。
取得した証明書を使い、署名検証や文書の暗号化を行います。
PKIの機能
PKIは以下の2つの機能を提供します。
種別 | 説明 |
暗号化 (Encryption) |
データを暗号化し、第3者に読まれることを防ぎます。 |
デジタル署名 (Digital Signature) |
データに対して、そのデータの作成者を特定するための署名を付与します。 |
暗号化とデジタル署名の機能を用いて、PKIは以下のセキュリティサービスを提供します。
種別 | 説明 |
守秘性 (Confidentiality) | あるデータを意図した特定の相手(人やサーバ)のみが読めるようにすることができます。暗号化の機能を用い盗聴の脅威を防ぎます。 |
認証 (Authentication) | その人が誰であるのかを証明することができます。認証には、目の前の相手を確認するローカル認証と、離れた相手を確認するネットワーク認証があります。 PKIはネットワーク認証において高レベルな認証を実現できます。認証はデジタル署名の機能を用いて実現し、不正侵入やなりすましの脅威を防ぎます。 |
完全性 (Integrity) | あるデータが変更されていないことを証明します。デジタル署名の機能を用いて実現し、改ざんの脅威を防ぎます。 |
否認防止 (Non-Repudiation) | ある人が以前に行った行動を証明し、否認の脅威を防ぎます。認証と完全性が正しく機能することで実現されます。 |
PKIの構成技術
共通鍵暗号方式
共通鍵暗号方式はブロック暗号方式とストリーム暗号方式に分類されます。ブロック暗号方式は、平文を一定の長さに分割してそれぞれを暗号化する方式です。平文を分割したものをブロック、分割する長さをブロック長と呼びます。ブロック暗号方式の代表的なものにDES、RC2、IDEAがあります。
ストリーム暗号方式は、平文を分割せずに逐次(1~数ビット毎)暗号化する方式です。代表的なものに、RC4 が存在します。
共通鍵暗号方式の種類
種別 | 鍵長 | 方式 | 概要 |
DES | 56bit | ブロック暗号 |
Data Encryption Standardの略です。 IBMが開発した共通鍵暗号アルゴリズムをもとに、1977年にNIST によって FIPS標準として採用されました。 DESは64bit(8bytes)単位でデータを暗号化するブロック暗号アルゴリズムで、入力や鍵データが64bitに満たない場合は、ゼロを追加して64bitにそろえてから処理を行います。 入力としては、64bitの元データと64bitの暗号化用の鍵を受け付け、暗号化処理を行って、64bitの暗号化済みデータを出力します。ただし鍵データには8bit(1byte)ごとに1bitのパリティビット情報が含まれているので、実際には56bitだけが使われます。 |
Triple-DES | 168bit | ブロック暗号 | DESの安全性を高めるために考案されたもので、DES を 3回繰り返します。3回とも別の鍵を使用する3KEY方式と、1回目と3回目に同じ鍵を使用する2KEY方式があります。NIST によって FIPS 標準として採用されています。 |
IDEA | 128bit | ブロック暗号 | International Data Encryption Algorithmの略です。データを64bitのブロックに区切るブロック暗号化方式で、線形解読法や差分解読法といった攻撃方法に対して、十分な強度を持つように設計されています。Ascom-Tech社によって開発され、特許が取得されています。 |
RC2 | 可変(8~1024bit) | ブロック暗号 | RSA社によって開発されました。可変長の暗号鍵が使えるのが特徴です。RFC2268として仕様が公開されています。 差分解読法に対する耐性について問題が指摘されています。 |
RC4 | 可変(40~256bit) | ストリーム暗号 | RSA社によって1987年に開発されたストリーム暗号方式です。 仕様の詳細は公開されていません。 |
RC5 | 可変(最大2048bit) | ブロック暗号 | RC2の後継として、RSA社によって開発されました。シンプルな実装となっており、高い計算能力を必要としません。特許が申請されており、仕様が公開されています。 |
CAST-128 | 可変(最大128bit) | ブロック暗号 | Entrust Technologies社によって開発されました。 線形解読法に対して強い設計となっています。 RFC2144として仕様が公開されています。 |
AES | 可変(128,192,256bit) | ブロック暗号 | Advanced Encryption Standardの略です。NISTの次世代暗号標準。DESの後継としてNISTが公募し、2001年に、Rijndael暗号方式が採用されました。 |
公開鍵暗号方式
公開鍵暗号方式の種類
種別 | 目的 | 概要 |
DH (Diffie-Hellman) |
鍵交換 | W. Diffie と M. Hellman が1976年に発表した、 共通鍵を安全に交換するための鍵配送アルゴリズムです。 |
RSA (Rivest-Shamir-Adleman) |
暗号化 署名 鍵交換 |
Rivest, Shamir, Adlemanの3名が1978年に発明したアルゴリズムです。 同じ鍵ペアを暗号化と署名の両方に利用できることが特徴です。 大きな整数の素因数分解が困難であるという仮定に基づいています。 |
DSA (Digital Signature Algorithm) |
署名 | NISTが1991年に提唱した、デジタル署名のためのアルゴリズムです。 離散対数問題を解くことが難しいという仮定に基づいています。 デジタル署名専用のアルゴリズムであり、暗号化の機能はありません。 |
楕円曲線暗号 (ECC: Elliptic Curve cryptosystem) |
暗号化 署名 鍵交換 |
Neal KoblitzとMillerが1985年に別々に考案した方式です。 特定のアルゴリズムを指すのではなく、 離散対数問題に楕円曲線を適用させて強度を保ちつつ、 鍵長を小さくするために用いられます。 主な適用例として、DSAに適用したECDSAが有名です。 |
証明書について
X.500とは
X.500はITUが策定したディレクトリサービスの標準規格シリーズです。
X.500では以下のプロトコルが定義されています。
- DAP (Directory Access Protocol)
- DSP (Directory System Protocol)
- DISP (Directory Information Shadowing Protocol)
- DOP (Directory Operational Bindings Management Protocol)
TCP/IPを使ってX.500のディレクトリにアクセスするためのプロトコルがいくつか開発されたが、現在ではLDAPが広く使われています。
X.509は上記に含まれる規格の一つで、認証に関わるフレームワークです。証明書は以下のようなフィールドを含みます。
X.509証明書では、証明書の所有者(Subject)やCAの名前(Issuer)を、DN(Distinguished Name) とよばれる形式で表現します。DNは一意の名前をつけるためのもので、属性型 (Attribute Type) と属性値 (Attribute Value) から構成されています。属性型は属性値の種類を指定するものであり、国(c)、組織(o)、組織単位(ou)、名前(cn)などがあります。
補足:LDAPのデータ操作
操作 | 説明 |
バインド | LDAP操作に先立ってアクセスするユーザを事前に認証します。この認証のことをバインドといいます。 |
追加 | 新規エントリを追加する。 |
更新 | エントリの属性値を追加・更新・削除する。 |
削除 | エントリを削除する。 |
検索 | 条件に一致するエントリを検索する。 |
アンバインド | LDAPの操作を終了するときに行う。 |
参考にさせていただいたサイト