この章では、Solaris の暗号化フレームワークについて説明します。この章の内容は次のとおりです。
Solaris の暗号化フレームワークの管理方法と使用方法については、第 14 章Solaris の暗号化フレームワーク (手順)を参照してください。
Solaris 10 1/06: フレームワークの libpkcs11.so ライブラリには、「メタスロット」という新しいコンポーネントが含まれています。メタスロットは、フレームワークにインストールされているすべてのトークンとスロットの機能を結合させて単一の仮想スロットで提供するコンポーネントです。メタスロットにより、事実上、アプリケーションから利用可能なすべての暗号化サービスに単一のスロットを通じて透過的に接続できるようになります。
詳細は、「Solaris の暗号化フレームワークの用語」にあるスロット、メタスロット、およびトークンの定義を参照してください。
メタスロットの管理方法については、cryptoadm(1M) のマニュアルページを参照してください。
Solaris の新機能の一覧および Solaris リリースについての説明は、『Oracle Solaris 10 9/10 の新機能』を参照してください。
Solaris の暗号化フレームワークは、暗号化要求を処理するアルゴリズムと PKCS #11 ライブラリの共通の格納場所を提供します。PKCS #11 ライブラリは、RSA Security Inc. PKCS #11 Cryptographic Token Interface (Cryptoki) に従って 実装されます。
暗号化フレームワークは、現在、Kerberos および IPsec に対する暗号化要求をカーネルレベルで処理します。ユーザーレベルコンシューマは、libsasl や IKE などです。
米国の輸出法では、公開された暗号化インタフェースは使用の制限が義務付けられています。Solaris の暗号化フレームワークは、カーネル暗号化プロバイダおよび PKCS #11 暗号化プロバイダの署名を義務付けることにより、この現行法を満たしています。詳細については、「Sun 以外のソフトウェアのためのバイナリ署名」を参照してください。
暗号化フレームワークにより、暗号化サービスのプロバイダはそのサービスが Solaris オペレーティングシステム の多数のコンシューマに使用されるようにすることができます。プロバイダはプラグインとも言います。暗号化フレームワークでは、3 種類のプラグインが使用可能です。
ユーザーレベルプラグイン – pkcs11_softtoken.so.1 など、PKCS #11 ライブラリを使用することによってサービスを提供する共有オブジェクト。
カーネルレベルプラグイン – AES など、ソフトウェアの暗号化アルゴリズムの実装を提供するカーネルモジュール。
暗号化フレームワークのアルゴリズムの多くは、SSE2 命令セットを備えた x86 および SPARC ハードウェア用に最適化されます。
ハードウェアプラグイン – デバイスドライバおよび関連するハードウェアアクセラレータ。たとえば、Niagara チップ、ncp および n2cp デバイスドライバです。ハードウェアアクセラレータにより、オペレーティングシステムの高価な暗号化機能が肩代わりされます。たとえば、Sun Crypto Accelerator 6000 ボードがあります。
暗号化フレームワークは、ユーザーレベルプロバイダ用に標準インタフェースとして PKCS #11 v2.11 ライブラリを実装しています。このライブラリは、Sun 以外のアプリケーションがプロバイダに到達するために使用することができます。サードパーティーは、署名付きライブラリ、署名付きカーネルアルゴリズムモジュール、および署名付きデバイスドライバを暗号化フレームワークに追加することもできます。これらのプラグインは、pkgadd ユーティリティーによって Sun 以外のソフトウェアがインストールされると追加されます。暗号化フレームワークの主なコンポーネントの一覧図については、『Oracle Solaris セキュリティーサービス開発ガイド』の第 8 章「Oracle Solaris 暗号化フレームワークの紹介」を参照してください。
次の定義と例のリストは、暗号化フレームワークでの作業時に役立ちます。
アルゴリズム – 暗号化のアルゴリズム。入力を暗号化またはハッシュする、確立した再帰的な計算手順です。暗号化アルゴリズムには対称と非対称があります。対称アルゴリズムでは、暗号化と復号化に同じ鍵が使用されます。非対称アルゴリズムは、公開鍵暗号化で使用され、2 つの鍵を必要とします。ハッシングもアルゴリズムです。
アルゴリズムの例として、次のものがあります。
AES や ARCFOUR などの対称アルゴリズム
Diffie-Hellman や RSA などの非対称アルゴリズム
MD5 などのハッシング機能
コンシューマ – プロバイダから提供される暗号化サービスのユーザーです。コンシューマになりえるものとして、アプリケーション、エンドユーザー、カーネル処理などが挙げられます。
コンシューマの例として、次のものがあります。
IKE などのアプリケーション
encrypt コマンドを実行する通常のユーザーなどのエンドユーザー
IPsec などのカーネル操作
メカニズム – 特定の目的のアルゴリズムのモードのアプリケーションです。
たとえば、認証に適用される DES メカニズム (CKM_DES_MAC など) は、暗号化に適用されるメカニズム (CKM_DES_CBC_PAD) とは別です。
メタスロット – フレームワークに読み込まれているほかのスロットの機能を単一のスロットに統合したものです。メタスロットは、フレームワークを通じて利用可能なプロバイダのすべての機能を取り扱う際の作業を軽減します。メタスロットを使用するアプリケーションから処理要求を受けると、実際のスロットのうちどのスロットがその処理を行うべきかをメタスロットが判断します。メタスロットの機能は構成可能ですが、構成が必須ではありません。メタスロットはデフォルトでは有効になっています。メタスロットの構成方法については、cryptoadm(1M) のマニュアルページを参照してください。
モード – 暗号化アルゴリズムのバージョンです。たとえば、CBC (Cipher Block Chaining) は、ECB (Electronic Code Book) とは別のモードです。AES アルゴリズムには、CKM_AES_ECB と CKM_AES_CBC の 2 つのモードがあります。
ポリシー – どのメカニズムを使用できるようにするかについて、管理者によって選択されるものです。デフォルトでは、すべてのプロバイダとすべてのメカニズムが使用可能です。メカニズムを無効にすることは、ポリシーの適用です。無効になっていたメカニズムを有効にすることも、ポリシーの適用です。
プロバイダ – コンシューマが使用する暗号化サービスです。プロバイダは、フレームワークに組み込まれる(プラグインする)ので、プラグインとも呼ばれます。
プロバイダの例として、次のものがあります。
pkcs11_softtoken.so などの PKCS #11 ライブラリ
aes や arcfour などの暗号化アルゴリズムのモジュール
Sun Crypto Accelerator 6000 の mca ドライバなど、デバイスドライバおよび関連するハードウェアアクセラレータ
スロット – 1 つまたは複数の暗号化デバイスとのインタフェースです。各スロットは物理的なリーダー (読み取り器) またはその他のデバイスインタフェースに相当し、スロットにはトークンが 1 つ搭載されていることがあります。トークンは、フレームワーク内の暗号化デバイスを論理的に表示します。
暗号化フレームワークには、管理者、ユーザー、およびプロバイダを提供する開発者向けのコマンドが用意されています。
管理コマンド – cryptoadm コマンドには、使用可能なプロバイダとその機能を一覧表示する list サブコマンドが用意されています。通常のユーザーは、cryptoadm list コマンドおよび cryptoadm --help コマンドを実行することができます。
それ以外の cryptoadm サブコマンドでは、Crypto Management 権利プロファイルを含む役割を引き受けるか、スーパーユーザーになる必要があります。disable、install、および uninstall などのサブコマンドを使用して、暗号化フレームワークを管理できます。詳細は、cryptoadm(1M) のマニュアルページを参照してください。
svcadm コマンドを使用して、kcfd デーモンの管理やカーネルの暗号化ポリシーの更新を行うことができます。詳細は、svcadm(1M) のマニュアルページを参照してください。
ユーザーレベルコマンド –digest コマンドおよび mac コマンドによって、ファイル整合性サービスが提供されます。encrypt および decrypt コマンドは、ファイルが傍受されるのを防ぎます。これらのコマンドの使用方法については、「Solaris 暗号化フレームワークによるファイルの保護 (作業マップ)」を参照してください。
Sun 以外のプロバイダのためのバイナリ署名 – elfsign コマンドによって、暗号化フレームワーク内での使用のためにサードパーティーがバイナリに署名することができます。フレームワークに追加可能なバイナリは、PKCS #11 ライブラリ、カーネルアルゴリズムモジュール、およびハードウェアデバイスドライバです。elfsign コマンドの使用方法については、『Oracle Solaris セキュリティーサービス開発ガイド』の付録 F「暗号化プロバイダのパッケージ化と署名」を参照してください。
cryptoadm コマンドは、動作中の暗号化フレームワークを管理します。このコマンドは、Crypto Management 権利プロファイルの一部です。この権利プロファイルは、暗号化フレームワークを安全に管理する役割に割り当てることができます。cryptoadm コマンドは、次の内容を管理します。
暗号化プロバイダ情報の表示
プロバイダメカニズムの無効化または有効化
Solaris 10 1/06: メタスロットの無効化または有効化
svcadm コマンドを使用して、暗号化サービスデーモン、kcfd を有効化、更新、および無効化することができます。このコマンドは、Solaris のサービス管理機能 smf の一部です。svc:/system/cryptosvcs は、暗号化フレームワークのサービスインスタンスです。詳細は、smf(5) および svcadm(1M) のマニュアルページを参照してください。
Solaris の暗号化フレームワークでは、ファイルの整合性の確認、ファイルの暗号化、およびファイルの復号化を行うユーザーレベルコマンドが用意されています。独立したコマンド elfsign によって、フレームワークでの使用のためにプロバイダがバイナリに署名することができます。
digest コマンド – 1 つまたは複数のファイルまたは標準入力のメッセージ要約を計算します。要約は、ファイルの整合性を検証するのに便利です。SHA1 および MD5 は、要約機能の例です。
mac コマンド – 1 つまたは複数のファイルまたは標準入力のメッセージ認証コード (MAC) を計算します。MAC は、データを認証されたメッセージに関連付けます。MAC によって、受信者は、メッセージの送信者、およびメッセージが改ざんされていないことを検証できるようになります。sha1_mac メカニズムおよび md5_hmac メカニズムが MAC を計算します。
encrypt コマンド – 対称暗号でファイルまたは stdin を暗号化します。encrypt -l コマンドは、使用可能なアルゴリズムを一覧表示します。ユーザーレベルライブラリで一覧表示されるメカニズムは、encrypt コマンドで使用可能です。暗号化フレームワークでは、ユーザーの暗号化のために AES、DES、3DES (Triple-DES)、および ARCFOUR メカニズムが用意されています。
decrypt コマンド – encrypt コマンドで暗号化されたファイルまたは stdin を復号化します。decrypt コマンドは、元のファイルの暗号化に使用されたのと同一の鍵とメカニズムを使用します。
elfsign コマンドは、Solaris 暗号化フレームワークでの使用のためにプロバイダに署名する手段です。一般に、このコマンドはプロバイダの開発者によって実行されます。
elfsign コマンドには、Sun の証明書を要求するためのサブコマンドとバイナリ署名を行うためのサブコマンドが用意されています。署名を確認するサブコマンドもあります。署名されていないバイナリは、Solaris の暗号化フレームワークで使用することができません。1 つまたは複数のプロバイダに署名するには、Sun の証明書と、その証明書の要求に使用された非公開鍵が必要です。詳細については、『Oracle Solaris セキュリティーサービス開発ガイド』の付録 F「暗号化プロバイダのパッケージ化と署名」を参照してください。
サードパーティーは、Solaris 暗号化フレームワークに自身のプロバイダをプラグインできます。Sun 以外のプロバイダとは、次のオブジェクトのいずれかです。
プロバイダのオブジェクトは、Sun の証明書付きで署名されている必要があります。証明書要求は、サードパーティーが選択する非公開鍵と Sun が提供する証明書に基づきます。証明書要求は Sun に送信され、サードパーティーが登録されたあと、証明書が発行されます。次にサードパーティーは Sun の証明書付きでそのプロバイダオブジェクトに署名します。
ロード可能なカーネルソフトウェアモジュールおよびハードウェアアクセラレータ用のカーネルデバイスドライバも、カーネルに登録する必要があります。登録は、Solaris 暗号化フレームワークの SPI (サービスプロバイダインタフェース) で行います。
プロバイダをインストールするために、サードパーティーは署名付きのオブジェクトと Sun の証明書をインストールするパッケージを提供します。パッケージには証明書が含まれ、管理者が証明書を安全なディレクトリに格納する必要があります。詳細については、『Oracle Solaris セキュリティーサービス開発ガイド』の付録 F「暗号化プロバイダのパッケージ化と署名」を参照してください。
大域ゾーンと各非大域ゾーンには、それぞれの /system/cryptosvc サービスが用意されています。大域ゾーンで暗号化サービスが有効になったり更新されたりすると、大域ゾーンで kcfd デーモンが起動され、大域ゾーンに対するユーザーレベルポリシーが設定され、システムに対するカーネルポリシーが設定されます。非大域ゾーンでサービスが有効になったり更新されたりすると、その非大域ゾーンで kcfd デーモンが起動され、そのゾーンに対するユーザーレベルポリシーが設定されます。カーネルポリシーは、大域ゾーンによって設定されています。
ゾーンの詳細については、『Oracle Solaris のシステム管理 (Oracle Solaris コンテナ : 資源管理と Oracle Solaris ゾーン)』のパート II「ゾーン」を参照してください。永続的なアプリケーションを管理するサービス管理機能の詳細については、『Solaris のシステム管理 (基本編)』の第 18 章「サービスの管理 (概要)」および smf(5) のマニュアルページを参照してください。