IPsec と IKE の管理

第 3 章 インターネットキー交換 (概要)

IP データグラムのセキュリティ保護された伝送に必要な IPsec SA (セキュリティアソシエーション) のキー情報の管理を、キー管理といいます。自動キー管理では、キーの作成、認証、および交換のため、セキュリティ保護された通信チャネルを必要とします。Solaris オペレーティングシステムでは、インターネットキー交換 (IKE) を使用してキー管理を自動化します。IKE を使用すれば、セキュリティ保護されたチャネルを大量のトラフィックに割り当てるために容易にスケーリングできます。IPv4 パケットの IPsec SA では、IKE の利点を生かすことができます。

SunTM Crypto Accelerator 1000 カードを搭載したシステムで IKE を使用する場合には、公開鍵の操作はこのカードで行われます。公開鍵の操作のためにオペレーティングシステムのリソースが使用されることはありません。

この章では、以下の内容について説明します。

IKE の概要

インターネットキー交換 (IKE) デーモン in.iked(1M) では、保護された方法でセキュリティアソシエーションのキー情報のネゴシエーションと認証を行います。また、SunOSTM によって提供される内部機能からキーのランダムシードを使用します。IKE は、PFS (Perfect Forward Secrecy) をサポートしています。PFS では、データ伝送を保護するキーを使用しないで追加キーを取得し、データ伝送のキーの作成に使用するシードを再利用しません。

IKE デーモンによってリモートホストの公開暗号鍵が検出されると、ローカルシステムではその鍵を使用できるようになります。ローカルシステムは、リモートホストの公開鍵を使用してメッセージを暗号化します。メッセージを読み取れるのは、このリモートホストだけです。IKE デーモンでは、そのジョブを交換と呼ばれる 2 つのフェーズで実行します。

フェーズ 1 交換

フェーズ 1 交換はメインモードといいます。フェーズ 1 交換では、IKE は公開鍵暗号方式を使用して、ピア IKE エンティティによる IKE 自体を認証します。その結果が ISAKMP (Internet Security Association and Key Management Protocol) セキュリティアソシエーションで、IKE で IP データグラムのキー情報のネゴシエーションを行うためのセキュリティ保護されたチャネルとなります。IPsec SA とは異なり、ISAKMP セキュリティアソシエーションは双方向であるため、1 つだけ必要です。

IKE でキー情報のネゴシエーションを行う方法は、フェーズ 1 交換で設定可能です。IKE では、/etc/inet/ike/config ファイルから設定情報を読み取ります。設定情報には、影響するインタフェース、使用するアルゴリズム、認証方式、および PFS 使用の有無が含まれています。認証方式には、事前共有鍵と公開鍵証明書の 2 つがあります。公開鍵証明書は、自己署名付きにすることも、PKI (Public Key Infrastructure) 機関から認証局 (CA) によって発行することもできます。PKI 機関には、SunTM Open Net Environment (Sun ONE) Certificate Server、Entrust、および Verisign があります。

フェーズ 2 交換

フェーズ 2 交換はクイックモードといいます。フェーズ 2 交換では、IKE は IKE デーモンを実行するホスト間の IPsec SA を作成および管理します。また、フェーズ 1 で作成したセキュリティ保護されたチャネルを使用して、キー情報の伝送を保護します。IKE デーモンは、/dev/random を使用して乱数発生関数からキーを作成します。また、IKE デーモンは、キーを一定の割合 (構成可能) で更新します。このキー情報は、IPsec ポリシーの構成ファイルに指定されているアルゴリズムによって使用されます。

IKE 構成の選択

2 つの IKE デーモンが相互を認証するためには、IKE ポリシーの構成ファイル ike.config(4) が有効でなければなりません。さらに、キー情報も必要です。この構成ファイルには、IKE ポリシーのエントリが格納されています。これらのエントリは、フェーズ 1 交換の認証方式を決定します。選択肢は、事前共有鍵か公開鍵証明書のどちらかです。

鍵のペア auth_method preshared は、事前共有鍵が使用されることを示します。auth_method の値が preshared 以外の場合には、公開鍵証明書が使用されることを示します。公開鍵証明書は、自己署名付きにすることも、PKI 機関から発行することもできます。

事前共有鍵の使用

事前共有鍵は、1 つのシステムの管理者によって作成され、通信するシステムの管理者とアウトオブバンドで共有します。管理者は、大量のランダム鍵の作成、そのファイルとアウトオブバンド伝送の保護に十分注意する必要があります。鍵は、各システムの /etc/inet/secret/ike.preshared ファイルに保存されます。IPsec の場合は ipseckeys ファイルですが、IKE の場合は ike.preshared(4) ファイルとなります。ike.preshared ファイルにある鍵に問題があると、その鍵から導出されるすべての鍵に問題が発生します。

1 つのシステムの事前共有鍵は、通信するシステムの鍵と同一にする必要があります。鍵は特定の IP アドレスに連結され、そのセキュリティ保護は管理者が通信するシステムを制御する場合に最も強化されます。

公開鍵証明書の使用

公開鍵証明書を使用すると、通信するシステムが秘密鍵情報をアウトオブバンドで共有する必要がなくなります。公開鍵では、鍵の認証とネゴシエーションに Diffie-Hellman 方式を採用します。公開鍵証明書には、2 つの方法があります。公開鍵証明書は、自己署名付きにすることも、認証局 (CA) が認証することもできます。

自己署名付き公開鍵証明書は、管理者によって作成されます。ikecert certlocal -ks コマンドを実行して、システムの公開鍵と非公開鍵のペアの非公開部分を作成します。その後、管理者は通信するシステムから X.509 形式で自己署名付き証明書の出力を取得します。通信するシステムの証明書は、鍵のペアの公開部分の ikecert certdb コマンドに入力されます。自己署名付き証明書は、通信するホストの /etc/inet/ike/publickeys ディレクトリに保存されます。

自己署名付き証明書は、事前共有鍵と CA 間の中間ポイントになります。事前共有鍵とは異なり、自己署名付き証明書は移動体システムまたは再番号付けされる可能性があるシステムで使用できます。証明書に自己署名するには、管理者は DNS (www.example.org) または EMAIL (root@domain.org) の代替名を使用します。

公開鍵は、PKI または CA 機関で配信できます。公開鍵とそれに関連する CA は、管理者によって /etc/inet/ike/publickeys ディレクトリに格納されます。また、ベンダーは証明書無効リスト (CRL) も発行します。管理者は鍵と CA を格納するだけでなく、CRL を /etc/inet/ike/crls ディレクトリに格納する責任があります。

CA には、サイトの管理者ではなく、外部の機関によって認証されるといった特長があります。その点では、CA は公証された証明書となります。自己署名付き証明書と同様に、CA は移動体システムまたは再番号付けされる可能性があるシステムで使用できます。その一方、自己署名付き証明書とは異なり、CA は通信する多くのシステムを保護するために容易にスケーリングします。

IKE と加速ハードウェア

IKE アルゴリズムは、とりわけそのフェーズ 1 交換において、多くの処理を要します。大量の交換を処理するシステムでは、Sun Crypto Accelerator 1000 カードを使って公開鍵の操作を処理することができます。IKE の計算負荷をアクセラレータカードに移すための IKE 構成方法については、IKE で Sun Crypto Accelerator 1000 カードを使用する方法を参照してください。

IKE ユーティリティおよび IKE ファイル

この節では、IKE ポリシーの構成ファイルと、IKE を実装するさまざまなコマンドについて説明します。IPv4 ネットワークに IKE を実装する方法の手順については、IKE の実装 (作業マップ)を参照してください。

表 3–1 IKE ファイルおよび IKE コマンドのリスト

ファイルまたはコマンド 

説明 

in.iked(1M) デーモン

インターネットキー交換 (IKE) デーモン。自動キー管理を有効にする 

ikeadm(1M)

IKE 管理コマンド。IKE ポリシーの表示および変更用 

ikecert(1M)

認証データベース管理コマンド。ローカル公開鍵の認証データベースの操作用 

/etc/inet/ike/config ファイル

IKE ポリシーの構成ファイル。インバウンド IKE 要求のマッチングとアウトバウンド IKE 要求の準備に関するサイトの規則が含まれる。このファイルがある場合には、in.iked デーモンがブート時に自動的に開始する

/etc/inet/secret/ike.preshared ファイル

事前共有鍵のファイル。フェーズ 1 認証の秘密鍵情報が含まれる。事前共有鍵を使って IKE を構成するときに使用 

/etc/inet/secret/ike.privatekeys ファイル

非公開鍵のディレクトリ。公開鍵と非公開鍵のペアの非公開部分が含まれる 

/etc/inet/ike/publickeys ディレクトリ

公開鍵と証明書ファイルを保存するディレクトリ。公開鍵と非公開鍵のペアの公開部分が含まれる 

/etc/inet/ike/crls ディレクトリ

公開鍵と証明書ファイルの無効リストを保存するディレクトリ 

IKE デーモン

in.iked(1M) デーモンを実行すると、Solaris ホスト上の暗号キーの管理が自動化されます。また、同じプロトコルを実行するリモートホストとのネゴシエーションを行い、認証されたキー情報が、保護された方法でセキュリティアソシエーションに提供されます。このデーモンは、セキュリティ保護された通信を行うすべてのホストで実行されている必要があります。

IKE ポリシーの構成ファイル /etc/inet/ike/config がある場合には、IKE デーモンがブート時に自動的にロードされます。デーモンは構成ファイルの構文を検査します。

IKE デーモンを実行すると、フェーズ 1 では、システムがそのピア IKE エンティティに対してそのシステム自体を認証します。そのピアは、認証方式として IKE ポリシーファイルに定義されています。その後、フェーズ 2 では、セッションのキーが設定されます。ポリシーファイルで指定した時間間隔で、IKE キーが自動的に更新されます。in.iked デーモンを実行すると、ネットワークから着信する IKE 要求と、 PF_KEY ソケット経由のアウトバウンドトラフィックの要求を待機します。詳細については、pf_key(7P) のマニュアルページを参照してください。

2 つのプログラムで IKE デーモンをサポートします。ikeadm(1M) コマンドを実行すると、管理者は IKE ポリシーを表示できます。さらに、このコマンドを実行して IKE ポリシーを変更することもできます。ikecert(1M) コマンドを実行すると、管理者は 2 つの公開鍵データベース ike.privatekeyspublickeys を表示したり管理したりできます。

IKE ポリシーファイル

IKE ポリシーの構成ファイル /etc/inet/ike/config により、IKE デーモン自体のキー情報、およびそのファイルが管理する IPsec SA のキー情報が提供されます。IKE デーモン自体は、フェーズ 1 交換でキー情報を要求します。ike/config ファイルにある規則に基づいてキー情報が設定されます。ポリシーファイルにある有効な規則にはラベルが含まれています。その規則により、キー情報を使用するホストまたはネットワークが特定され、認証方式が指定されます。有効なポリシーファイルの例については、IKE 作業を参照してください。そのパラメータの例と説明については、ike.config(4) のマニュアルページを参照してください。

IPsec SA は、IPsec ポリシーの構成ファイル /etc/inet/ipsecinit.conf で設定されるポリシーに従って保護される IP データグラムで使用されます。IKE ポリシーファイルにより、IPsec SA の作成時に PFS を使用するかどうかが決定されます。

ike/config ファイルのセキュリティに関する注意点は、ipsecinit.conf ファイルのセキュリティと同様です。詳細については、ipsecinit.confipsecconf のセキュリティについてを参照してください。

IKE 管理コマンド

ikeadm コマンドを実行すると、次のことができます。

例とオプションの詳細については、ikeadm(1M) のマニュアルページを参照してください。実行する IKE デーモンの権限レベルにより、表示および変更可能な IKE デーモンの要素が決まります。権限レベルには、次のものがあります。

0x0 (基本レベル)

基本レベルの権限では、キー情報を表示できない。また、キー情報の変更もできない。基本レベルは、in.iked デーモン実行時のデフォルトレベル。

0x1 (modkeys レベル)

modkeys レベルの権限では、事前共有鍵を削除、変更、または追加できる

0x2 (keymat レベル)

keymat レベルの権限では、ikeadm コマンドを指定して実際のキー情報を表示できる

ikeadm コマンドのセキュリティに関する注意点は、ipseckey コマンドのセキュリティと同様です。詳細については、ipseckey におけるセキュリティについてを参照してください。

事前共有鍵ファイル

/etc/inet/secret/ ディレクトリには、ISAKMP SA と IPsec SA の事前共有鍵が格納されています。共有鍵を手動で作成すると、ike.preshared ファイルには ISAKMP SA の事前共有鍵、ipseckeys ファイルには IPsec SA の事前共有鍵が格納されます。secret ディレクトリは 0700 で保護されています。secret ディレクトリの中にあるファイルは 0600 で保護されています。

IKE 公開鍵のデータベースおよびコマンド

ikecert(1M) コマンドを実行すると、ローカルホストの公開鍵データベースを操作できます。このコマンドは、ike/config ファイルが公開鍵証明書を要求するときに使用します。IKE ではそれらのデータベースを使用してフェーズ 1 交換を認証するため、in.iked デーモンを起動する前に、それらのデータベースに必要な情報が含まれていなければなりません。3 つのサブコマンド certlocalcertdbcertrldb をそれぞれ実行して、3 つのデータベースを処理します。

ikecert certlocal コマンド

certlocal サブコマンドを実行して、/etc/inet/secret/ike.privatekeys ディレクトリにある非公開鍵データベースを管理します。このサブコマンドを選択すると、非公開鍵の追加、表示、および削除を行うことができます。また、自己署名付き証明書または証明書要求のいずれかを作成できます。-ks オプションを選択すると、自己署名付き証明書が作成され、-kc オプションを選択すると、証明書要求が作成されます。

非公開鍵を作成する場合、certlocal サブコマンドには、ike/config ファイルの情報が必要です。certlocal オプションと ike/config エントリの対応を次の表に示します。

表 3–2 ike certlocal の値と ike/config の値の対応表

certlocal オプション

ike/config エントリ

注 

-A 対象の代替名

cert_trust 対象代替名

証明書を一意に識別するニックネーム。指定可能な値は、IP アドレス、電子メールアドレス、およびドメイン名 

-D X.509 識別名

X.509 識別名

国、組織名、組織単位、共通名を含む認証局のフルネーム 

-t dsa-sha1

auth_method dss_sig

RSA よりもわずかに遅くなる。特許は登録されていない  

-t rsa-md5

-t rsa-sha1

auth_method rsa_sig

DSA よりもわずかに速くなる。特許の期限切れは 2000 年 9 月 

RSA 公開鍵は、最大ペイロードを暗号化するのに十分な長さが必要。一般的に識別名などの ID ペイロードが最大 

-t rsa-md5

-t rsa-sha1

auth_method rsa_encrypt

RSA 暗号化により、IKE にある ID が不正侵入者から保護されますが、IKE ピアには互いの公開鍵の認識が要求されます。 

ikecert certlocal -kc コマンドを指定して証明書要求を実行する場合、そのコマンドの出力を PKI 機関に送信します。会社が独自の PKI を運営している場合は、出力を PKI 管理者に送信します。機関または PKI 管理者はこれに基づいてキー情報を作成します。ユーザーは、返されたキー情報を certdbcertrldb サブコマンドへの入力として使用します。

ikecert certdb コマンド

certdb サブコマンドを実行して、公開鍵データベース /etc/inet/ike/publickeys を管理します。このサブコマンドを選択すると、証明書と公開鍵を追加、表示、および削除できます。また、通信するシステムで ikecert certlocal -ks コマンドを実行して作成された証明書を入力として受け入れます。手順については、自己署名付き公開証明書による IKE の設定方法を参照してください。さらに、PKI または CA から受信する証明書も入力として受け入れます。手順については、認証局による署名付き公開鍵による IKE の設定方法を参照してください。

ikecert certrldb コマンド

certrldb サブコマンドを実行して、証明書無効リスト (CRL; Certificate Revocation List) データベース /etc/inet/ike/crls を管理します。crls データベースには、公開鍵の無効リストが保存されています。よって、このリストには、すでに有効でない証明書が明記されます。PKI によって CRL が提供されるときに、ikecert certrldb コマンドを指定して CRL データベースにそれらの CRL を格納します。手順については、証明書無効リストにアクセスする方法を参照してください。

/etc/inet/ike/publickeys ディレクトリ

/etc/inet/ike/publickeys ディレクトリには、公開鍵と非公開鍵のペアの公開部分とファイルにあるその証明書、つまり「スロット」が格納されています。 /etc/inet/ike ディレクトリは 0755 で保護されます。ikecert certdb コマンドを使用して、そのディレクトリを読み込みます。

そのファイルには、別のシステムで生成された証明書の X.509 識別名がコード化形式で含まれています。自己署名付き証明書を使用する場合、そのコマンドへの入力として、通信するシステムの管理者から受信する証明書を使用します。PKI からの証明書を使用する場合、PKI から受け取る 2 つのキー情報をこのデータベースに格納します。PKI に送信した情報に基づいた証明書を格納します。また、PKI からの CA も格納します。

/etc/inet/secret/ike.privatekeys ディレクトリ

ike.privatekeys ディレクトリには、公開鍵と非公開鍵のペアの一部である非公開鍵ファイル、ISAKMP SA のキー情報が格納されています。このディレクトリは 0700 で保護されています。このデータベースにある非公開鍵は、publickeys データベースの公開鍵とペアにする必要があります。ikecert certlocal コマンドを実行して、コマンドのディレクトリを読み込みます。非公開鍵は、ペアとなる公開鍵、自己署名付き証明書や CA が /etc/inet/ike/publickeys ディレクトリに格納されてから有効になります。

/etc/inet/ike/crls ディレクトリ

/etc/inet/ike/crls ディレクトリには証明書無効リスト (CRL) ファイルが含まれています。各ファイルは、/etc/inet/ike/publickeys/ ディレクトリにある公開鍵証明書ファイルに対応しています。PKI 機関により、それらの証明書の CRL が提供されます。ikecert certrldb コマンドを使用して、そのデータベースを読み込みます。