ここでは、Solaris OS が提供する集中型の暗号化および公開鍵技術サービスについて説明します。
この章では、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) のマニュアルページを参照してください。
この章では、Solaris の暗号化フレームワークの使用方法について説明します。この章の内容は次のとおりです。
次の作業マップでは、暗号化フレームワークの使用についての作業を示します。
作業 |
説明 |
参照先 |
---|---|---|
個々のファイルまたはファイルのセットを保護します |
ファイルの内容が改ざんされていないことを確認します。ファイルが侵入者によって解読されるのを防ぎます。これらの手順は通常のユーザーが行うことができます。 | |
暗号化フレームワークを管理します |
ソフトウェアプロバイダを追加、構成、および削除します。ハードウェアプロバイダのメカニズムを無効および有効にします。これらの手順は管理上の手順です。 | |
プロバイダに署名します |
プロバイダが Solaris 暗号化フレームワークに追加されるようにします。これらの手順は開発者の手順です。 |
Solaris 暗号化フレームワークは、ファイルの保護に役立ちます。次の作業マップでは、使用可能なアルゴリズムを一覧表示する手順、および暗号化によってファイルを保護する手順を示します。
作業 |
説明 |
参照先 |
---|---|---|
対称鍵を生成します |
ユーザーが指定したアルゴリズムで使用するランダム鍵を生成します。 | |
ユーザーが指定した長さの鍵を生成します。任意で、ファイル、PKCS #11 キーストア、または NSS キーストアに鍵を格納します。 | ||
ファイルの整合性を保証するチェックサムを提供します |
受信者のファイルのコピーが送信されたファイルと同一のものであることを検証します。 | |
メッセージ認証コード (MAC) でファイルを保護します |
自分がメッセージの送信者であることを受信者に証明します。 | |
ファイルを暗号化したあと、暗号化されたファイルを復号化します |
ファイルを暗号化することによりファイルの内容を保護します。ファイルを復号化するための暗号化パラメータを指定します。 |
この節では、対称鍵を生成する方法、ファイルの整合性のためにチェックサムを作成する方法、およびファイルが傍受されるのを防ぐ方法について説明します。この節のコマンドは、通常のユーザーが実行することができます。開発者は、これらのコマンドを使用するスクリプトを作成することができます。
ファイルを暗号化し、ファイルの MAC を生成するには、鍵が必要です。鍵は、数のランダムプールから生成します。
乱数発生関数がすでにある場合は、それを使用してください。この関数がない場合は、Solaris の /dev/urandom デバイスを入力として dd コマンドを使用します。詳細は、dd(1M) のマニュアルページを参照してください。
アルゴリズムが必要とする鍵の長さを決定します。
% encrypt -l Algorithm Keysize: Min Max (bits) ------------------------------------------ aes 128 128 arcfour 8 128 des 64 64 3des 192 192 % mac -l Algorithm Keysize: Min Max (bits) ------------------------------------------ des_mac 64 64 sha1_hmac 8 512 md5_hmac 8 512 sha256_hmac 8 512 sha384_hmac 8 1024 sha512_hmac 8 1024 |
dd コマンドに渡す鍵の長さをバイト単位で定義します。
最小鍵サイズと最大鍵サイズを 8 で割ります。最小鍵サイズと最大鍵サイズが異なるときは、中間の鍵サイズを使用することができます。たとえば、sha1_hmac 関数および md5_hmac 関数の場合、値 8、16、または 64 を dd コマンドに渡すことができます。
対称鍵を生成します。
% dd if=/dev/urandom of=keyfile bs=n count=n |
入力ファイルです。ランダム鍵に対しては、/dev/urandom ファイルを使用します。
生成された鍵を保持する出力ファイルです。
バイト単位の鍵サイズです。バイト単位の鍵サイズに対しては、ビット単位の鍵の長さを 8 で割ります。
入力ブロックの数です。n の数は 1 とします。
鍵を保護されたディレクトリに格納します。
そのユーザー以外は鍵のファイルを読み取ることができないように変更します。
% chmod 400 keyfile |
次の例では、AES アルゴリズムの秘密鍵を作成します。この鍵は、あとで復号化するために格納も行います。AES メカニズムでは、 128 ビット鍵を使用します。この鍵は、dd コマンドでは 16 バイトです。
% ls -al ~/keyf drwx------ 2 jdoe staff 512 May 3 11:32 ./ % dd if=/dev/urandom of=$HOME/keyf/05.07.aes16 bs=16 count=1 % chmod 400 ~/keyf/05.07.aes16 |
次の例では、DES アルゴリズムの秘密鍵を作成します。この鍵は、あとで復号化するために格納も行います。DES メカニズムでは、 64 ビット鍵を使用します。この鍵は、dd コマンドでは 8 バイトです。
% dd if=/dev/urandom of=$HOME/keyf/05.07.des8 bs=8 count=1 % chmod 400 ~/keyf/05.07.des8 |
次の例では、3DES アルゴリズムの秘密鍵を作成します。この鍵は、あとで復号化するために格納も行います。3DES メカニズムでは、 192 ビット鍵を使用します。この鍵は、dd コマンドでは 24 バイトです。
% dd if=/dev/urandom of=$HOME/keyf/05.07.3des.24 bs=24 count=1 % chmod 400 ~/keyf/05.07.3des.24 |
次の例では、MD5 アルゴリズムの秘密鍵を作成します。この鍵は、あとで復号化するために格納も行います。この鍵は、dd コマンドでは 64 バイトです。
% dd if=/dev/urandom of=$HOME/keyf/05.07.mack64 bs=64 count=1 % chmod 400 ~/keyf/05.07.mack64 |
アプリケーションによっては、通信の暗号化および復号化に対称鍵が必要です。この手順では、対称鍵を作成して格納します。
乱数発生関数がある場合、この関数を使用して鍵の乱数を作成できます。この手順は乱数発生関数を使用しません。
代わりに、Solaris の /dev/urandom デバイスを入力として dd コマンドを使用します。dd コマンドは鍵を格納しません。手順については、「dd コマンドを使用して対称鍵を生成する方法」を参照してください。
(省略可能) キーストアを使用する場合は、作成します。
PKCS #11 キーストアを作成して初期化する方法については、「pktool setpin コマンドを使ってパスフレーズを生成する方法」を参照してください。
NSS データベースを作成して初期化する方法については、例 15–5 を参照してください。
対称鍵として使用する乱数を生成します。
次のいずれかを実行します。
鍵を生成してファイルに格納します。
鍵をファイルに格納する利点は、このファイルから鍵を抽出して、/etc/inet/secret/ipseckeys ファイルや IPsec など、アプリケーションの鍵ファイルで使用できることです。
% pktool genkey keystore=file outkey=key-fn \ [keytype=specific-symmetric-algorithm] [keylen=size-in-bits] \ [dir=directory] [print=n] |
file の値は、鍵の格納場所のファイルタイプを指定します。
keystore=file のときのファイル名です。
特定のアルゴリズムとして、aes、arcfour、des、または 3des を指定します。
鍵のビット長です。8 で割り切れる数にする必要があります。des または 3des には指定しないでください。
key-fn へのディレクトリパスです。デフォルトでは、directory は現在のディレクトリです。
鍵を端末ウィンドウに印刷します。デフォルトでは、print の値は n です。
鍵を生成して PKCS #11 キーストアに格納します。
PKCS #11 キーストアの利点は、ラベルに基づいて鍵を取得できることです。この方法は、ファイルを暗号化および復号化する鍵の場合に便利です。この方法を使用するには、手順 1 を完了する必要があります。
% pktool genkey label=key-label \ [keytype=specific-symmetric-algorithm] [keylen=size-in-bits] \ [token=token] [sensitive=n] [extractable=y] [print=n] |
鍵についてユーザーが指定したラベルです。ラベルに基づいてキーストアから鍵を取得できます。
特定のアルゴリズムとして、aes、arcfour、des、または 3des を指定します。
鍵のビット長です。8 で割り切れる数にする必要があります。des または 3des には指定しないでください。
トークン名です。デフォルトでは、トークンは Sun Software PKCS#11 softtoken です。
鍵の重要度を指定します。値が y の場合、鍵は print=y 引数を使用して印刷することはできません。デフォルトでは、sensitive の値は n です。
鍵がキーストアから抽出できることを指定します。鍵が抽出されないようにするには、n を指定します。
鍵を端末ウィンドウに印刷します。デフォルトでは、print の値は n です。
鍵を生成して NSS キーストアに格納します。
この方法を使用するには、手順 1 を完了する必要があります。
% pktool keystore=nss genkey label=key-label \ [keytype=[keytype=specific-symmetric-algorithm] [keylen=size-in-bits] [token=token] \ [dir=directory-path] [prefix=database-prefix] |
nss の値は、鍵の格納場所の NSS タイプを指定します。
鍵についてユーザーが指定したラベルです。ラベルに基づいてキーストアから鍵を取得できます。
特定のアルゴリズムとして、aes、arcfour、des、または 3des を指定します。
鍵のビット長です。8 で割り切れる数にする必要があります。des または 3des には指定しないでください。
トークン名です。デフォルトでは、トークンは NSS 内部トークンです。
NSS データベースへのディレクトリパスです。デフォルトでは、directory は現在のディレクトリです。
NSS データベースの接頭辞です。デフォルトは接頭辞なしです。
鍵を端末ウィンドウに印刷します。デフォルトでは、print の値は n です。
(省略可能) 鍵が存在することを確認します。
鍵を格納した場所に応じて、次のコマンドのいずれかを使用します。
次の例では、DES アルゴリズムの秘密鍵を作成します。鍵は、あとで復号化するためにローカルファイルに格納されます。コマンドは、400 のアクセス権でファイルを保護します。鍵が作成されると、print=y オプションにより、生成された鍵が端末ウィンドウに表示されます。
DES メカニズムでは、 64 ビット鍵を使用します。鍵ファイルを所有するユーザーは、od コマンドを使用して鍵を取得します。
% pktool genkey keystore=file outkey=64bit.file1 keytype=des print=y Key Value ="a3237b2c0a8ff9b3" % od -x 64bit.file1 0000000 a323 7b2c 0a8f f9b3 |
ファイルの要約を作成すると、要約の出力を比較することによって、ファイルが改ざんされていないことを確認することができます。要約によって元のファイルが変更されることはありません。
% digest -l md5 sha1 sha256 sha384 sha512 |
digest コマンドでアルゴリズムを指定します。
% digest -v -a algorithm input-file > digest-listing |
次の形式で出力を表示します。
algorithm (input-file) = digest |
ファイルの要約の計算に使用するアルゴリズムです。手順 1 の出力のようにアルゴリズムを入力します。
digest コマンドの入力ファイルです。
digest コマンドの出力ファイルです。
次の例では、digest コマンドにより、 MD5 メカニズムを使用して電子メールの添付ファイルの要約を計算します。
% digest -v -a md5 email.attach >> $HOME/digest.emails.05.07 % cat ~/digest.emails.05.07 md5 (email.attach) = 85c0a53d1a5cc71ea34d9ee7b1b28b01 |
-v オプションを使用しないと、要約は関連情報なしで保存されます。
% digest -a md5 email.attach >> $HOME/digest.emails.05.07 % cat ~/digest.emails.05.07 85c0a53d1a5cc71ea34d9ee7b1b28b01 |
次の例では、digest コマンドが SHA1 メカニズムを使用してディレクトリ一覧を提供します。結果はファイルに格納されます。
% digest -v -a sha1 docs/* > $HOME/digest.docs.legal.05.07 % more ~/digest.docs.legal.05.07 sha1 (docs/legal1) = 1df50e8ad219e34f0b911e097b7b588e31f9b435 sha1 (docs/legal2) = 68efa5a636291bde8f33e046eb33508c94842c38 sha1 (docs/legal3) = 085d991238d61bd0cfa2946c183be8e32cccf6c9 sha1 (docs/legal4) = f3085eae7e2c8d008816564fdf28027d10e1d983 |
メッセージ認証コード (MAC) は、ファイルの要約を計算し、秘密鍵を使用してさらに要約を保護します。MAC によって元のファイルが変更されることはありません。
% mac -l Algorithm Keysize: Min Max ----------------------------------- des_mac 64 64 sha1_hmac 8 512 md5_hmac 8 512 sha256_hmac 8 512 sha384_hmac 8 1024 sha512_hmac 8 1024 |
該当する長さの対称鍵を生成します。
2 つの選択肢があります。鍵が生成されるパスフレーズを指定することができます。または鍵を指定することができます。
パスフレーズを指定する場合、指定したパスフレーズを格納するか覚えておく必要があります。パスフレーズをオンラインで格納する場合、そのパスフレーズファイルは自分だけが読み取ることができるようにします。
鍵を指定する場合、それはメカニズムの現在のサイズである必要があります。手順については、「dd コマンドを使用して対称鍵を生成する方法」を参照してください。
mac コマンドで、鍵を指定して対称鍵アルゴリズムを使用します。
% mac -v -a algorithm [ -k keyfile ] input-file |
次の形式で出力を表示します。
algorithm (input-file) = mac |
MAC を計算するために使用するアルゴリズムです。mac -l コマンドの出力のようにアルゴリズムを入力します。
アルゴリズムで指定された長さの鍵を含むファイルです。
MAC の入力ファイルです。
次の例では、電子メールの添付ファイルを、DES_MAC メカニズムとパスフレーズから生成される鍵で認証します。MAC の一覧はファイルに保存されます。パスフレーズをファイルに格納する場合、そのファイルはユーザー以外は読み取ることができないようにします。
% mac -v -a des_mac email.attach Enter passphrase: <Type passphrase> des_mac (email.attach) = dd27870a % echo "des_mac (email.attach) = dd27870a" >> ~/desmac.daily.05.07 |
次の例では、電子メールの添付ファイルを、MD5_HMAC メカニズムと秘密鍵で認証します。MAC の一覧はファイルに保存されます。
% mac -v -a md5_hmac -k $HOME/keyf/05.07.mack64 email.attach md5_hmac (email.attach) = 02df6eb6c123ff25d78877eb1d55710c % echo "md5_hmac (email.attach) = 02df6eb6c123ff25d78877eb1d55710c" \ >> ~/mac.daily.05.07 |
次の例では、ディレクトリの一覧を、SHA1_HMAC メカニズムと秘密鍵で認証します。結果はファイルに格納されます。
% mac -v -a sha1_hmac \ -k $HOME/keyf/05.07.mack64 docs/* > $HOME/mac.docs.legal.05.07 % more ~/mac.docs.legal.05.07 sha1_hmac (docs/legal1) = 9b31536d3b3c0c6b25d653418db8e765e17fe07a sha1_hmac (docs/legal2) = 865af61a3002f8a457462a428cdb1a88c1b51ff5 sha1_hmac (docs/legal3) = 076c944cb2528536c9aebd3b9fbe367e07b61dc7 sha1_hmac (docs/legal4) = 7aede27602ef6e4454748cbd3821e0152e45beb4 |
ファイルを暗号化しても、元のファイルが削除されたり変更されたりすることはありません。出力ファイルが暗号化されます。
encrypt コマンドの一般的なエラーを解決するには、例のあとの節を参照してください。
該当する長さの対称鍵を作成します。
2 つの選択肢があります。鍵が生成されるパスフレーズを指定することができます。または鍵を指定することができます。
パスフレーズを指定する場合、指定したパスフレーズを格納するか覚えておく必要があります。パスフレーズをオンラインで格納する場合、そのパスフレーズファイルは自分だけが読み取ることができるようにします。
鍵を指定する場合、それはメカニズムの現在のサイズである必要があります。手順については、「dd コマンドを使用して対称鍵を生成する方法」を参照してください。
encrypt コマンドで、鍵を指定して対称鍵アルゴリズムを使用します。
% encrypt -a algorithm [ -k keyfile ] -i input-file -o output-file |
ファイルを暗号化するために使用するアルゴリズムです。encrypt -l コマンドの出力のようにアルゴリズムを入力します。
アルゴリズムで指定された長さの鍵を含むファイルです。アルゴリズムごとの鍵の長さが、ビット単位で encrypt -l コマンドの出力に一覧表示されます。
暗号化する入力ファイルです。このファイルは、コマンドによって変更されることはありません。
入力ファイルと同じ暗号化形式の出力ファイルです。
次の例では、ファイルを AES アルゴリズムで暗号化します。鍵はパスフレーズから生成されます。パスフレーズをファイルに格納する場合、そのファイルはユーザー以外は読み取ることができないようにします。
% encrypt -a aes -i ticket.to.ride -o ~/enc/e.ticket.to.ride Enter passphrase: <Type passphrase> Re-enter passphrase: Type passphrase again |
入力ファイル ticket.to.ride は、元の形式で存在します。
出力ファイルを復号化するとき、ユーザーはファイルを暗号化したときと同じパスフレーズと暗号化メカニズムを使用します。
% decrypt -a aes -i ~/enc/e.ticket.to.ride -o ~/d.ticket.to.ride Enter passphrase: <Type passphrase> |
次の例では、ファイルを AES アルゴリズムで暗号化します。AES メカニズムでは、128 ビット(16 バイト) の鍵が使用されます。
% encrypt -a aes -k ~/keyf/05.07.aes16 \ -i ticket.to.ride -o ~/enc/e.ticket.to.ride |
入力ファイル ticket.to.ride は、元の形式で存在します。
出力ファイルを復号化するとき、ユーザーはファイルを暗号化したときと同じ鍵と暗号化メカニズムを使用します。
% decrypt -a aes -k ~/keyf/05.07.aes16 \ -i ~/enc/e.ticket.to.ride -o ~/d.ticket.to.ride |
次の例では、ファイルを ARCFOUR アルゴリズムで暗号化します。ARCFOUR アルゴリズムでは、8 ビット (1 バイト)、64 ビット (8 バイト)、または 128 ビット (16 バイト) の鍵が使用されます。
% encrypt -a arcfour -i personal.txt \ -k ~/keyf/05.07.rc4.8 -o ~/enc/e.personal.txt |
出力ファイルを復号化するとき、ユーザーはファイルを暗号化したときと同じ鍵と暗号化メカニズムを使用します。
% decrypt -a arcfour -i ~/enc/e.personal.txt \ -k ~/keyf/05.07.rc4.8 -o ~/personal.txt |
次の例では、ファイルを 3DES アルゴリズムで暗号化します。3DES アルゴリズムでは、192 ビット(24 バイト) の鍵が必要です。
% encrypt -a 3des -k ~/keyf/05.07.des24 \ -i ~/personal2.txt -o ~/enc/e.personal2.txt |
出力ファイルを復号化するとき、ユーザーはファイルを暗号化したときと同じ鍵と暗号化メカニズムを使用します。
% decrypt -a 3des -k ~/keyf/05.07.des24 \ -i ~/enc/e.personal2.txt -o ~/personal2.txt |
次のメッセージでは、encryptコマンドに指定した鍵が、使用しているアルゴリズムで許可されないことが示されます。
encrypt: unable to create key for crypto operation: CKR_ATTRIBUTE_VALUE_INVALID
encrypt: failed to initialize crypto operation: CKR_KEY_SIZE_RANGE
アルゴリズムの条件を満たしていない鍵を渡した場合は、条件を満たす鍵を指定する必要があります。
1 つの方法として、パスフレーズを使用します。それによって、条件を満たす鍵が暗号化フレームワークで指定されます。
別の方法として、アルゴリズムで使用できる鍵サイズを渡します。たとえば、DES アルゴリズムでは 64 ビットの鍵が必要です。3DES アルゴリズムでは 192 ビットの鍵が必要です。
次の作業マップでは、Solaris 暗号化フレームワークのソフトウェアプロバイダおよびハードウェアプロバイダの管理の手順を示します。
作業 |
説明 |
参照先 |
---|---|---|
Solaris 暗号化フレームワークのプロバイダを一覧表示します |
Solaris 暗号化フレームワークで使用可能なアルゴリズム、ライブラリ、およびハードウェアデバイスを一覧表示します。 | |
ソフトウェアプロバイダを追加します |
PKCS #11 ライブラリまたはカーネルモジュールを Solaris 暗号化フレームワークに追加します。プロバイダは署名されている必要があります。 | |
ユーザーレベルのメカニズムが使用されないようにします |
ソフトウェアメカニズムの使用を解除します。ソフトウェアメカニズムは、再度有効にすることができます。 | |
カーネルモジュールのメカニズムを一時的に無効にします |
一時的にメカニズムの使用を解除します。通常はテストのために使用します。 | |
プロバイダをアンインストールします |
カーネルソフトウェアプロバイダの使用を解除します。 | |
使用可能なハードウェアプロバイダを一覧表示します |
接続されているハードウェア、そのハードウェアに提供されているメカニズム、および使用可能になっているメカニズムを表示します。 | |
ハードウェアプロバイダのメカニズムを無効にします |
ハードウェアアクセラレータ上の選択したメカニズムが使用されないようにします。 | |
暗号化サービスを再起動または更新します |
暗号化サービスを使用できるようにします。 |
この節では、Solaris 暗号化フレームワークのソフトウェアプロバイダおよびハードウェアプロバイダの管理方法について説明します。必要に応じて、ソフトウェアプロバイダおよびハードウェアプロバイダの使用を解除することができます。たとえば、ソフトウェアプロバイダのアルゴリズムの実装を無効にすることができます。その後、別のソフトウェアプロバイダのアルゴリズムがシステムで使用されるようにすることができます。
Solaris 暗号化フレームワークには、数種類のコンシューマ用のアルゴリズムが用意されています。
ユーザーレベルプロバイダは、 libpkcs11 ライブラリにリンクされているアプリケーションに PKCS #11 暗号化インタフェースを提供します
カーネルソフトウェアプロバイダは、IPsec、Kerberos、およびその他の Solaris カーネルコンポーネント用のアルゴリズムを提供します
カーネルハードウェアプロバイダは、pkcs11_kernel ライブラリによって、カーネルコンシューマおよびアプリケーションが使用可能なアルゴリズムを提供します
プロバイダリストの内容と書式は、Solaris のリリースによって異なります。使用しているシステムでサポートされるプロバイダを表示するには、システムで cryptoadm list コマンドを実行します。
通常のユーザーは、ユーザーレベルのメカニズムのみを使用できます。
% cryptoadm list user-level providers: /usr/lib/security/$ISA/pkcs11_kernel.so /usr/lib/security/$ISA/pkcs11_softtoken.so kernel software providers: des aes blowfish arcfour sha1 md5 rsa kernel hardware providers: ncp/0 |
Solaris 暗号化フレームワークのプロバイダとそのメカニズムを一覧表示します。
すべてのメカニズムが次の出力のように一覧表示されます。ただし、一覧表示されたメカニズムのいくつかは使用できない場合があります。管理者によって使用が許可されているメカニズムのみを一覧表示する方法については、例 14–16 を参照してください。
この出力は、表示用に整形されています。
% cryptoadm list -m user-level providers: ===================== /usr/lib/security/$ISA/pkcs11_kernel.so: CKM_MD5,CKM_MD5_HMAC, CKM_MD5_HMAC_GENERAL,CKM_SHA_1,CKM_SHA_1_HMAC,CKM_SHA_1_HMAC_GENERAL, … /usr/lib/security/$ISA/pkcs11_softtoken.so: CKM_DES_CBC,CKM_DES_CBC_PAD,CKM_DES_ECB,CKM_DES_KEY_GEN, CKM_DES3_CBC,CKM_DES3_CBC_PAD,CKM_DES3_ECB,CKM_DES3_KEY_GEN, CKM_AES_CBC,CKM_AES_CBC_PAD,CKM_AES_ECB,CKM_AES_KEY_GEN, … kernel software providers: ========================== des: CKM_DES_ECB,CKM_DES_CBC,CKM_DES3_ECB,CKM_DES3_CBC aes: CKM_AES_ECB,CKM_AES_CBC blowfish: CKM_BF_ECB,CKM_BF_CBC arcfour: CKM_RC4 sha1: CKM_SHA_1,CKM_SHA_1_HMAC,CKM_SHA_1_HMAC_GENERAL md5: CKM_MD5,CKM_MD5_HMAC,CKM_MD5_HMAC_GENERAL rsa: CKM_RSA_PKCS,CKM_RSA_X_509,CKM_MD5_RSA_PKCS,CKM_SHA1_RSA_PKCS swrand: No mechanisms presented. kernel hardware providers: ========================== ncp/0: CKM_DSA,CKM_RSA_X_509,CKM_RSA_PKCS,CKM_RSA_PKCS_KEY_PAIR_GEN, CKM_DH_PKCS_KEY_PAIR_GEN,CKM_DH_PKCS_DERIVE,CKM_EC_KEY_PAIR_GEN, CKM_ECDH1_DERIVE,CKM_ECDSA |
次の例では、ユーザーレベルライブラリ pkcs11_softtoken が提供するすべてのメカニズムを一覧表示します。
% cryptoadm list -m provider=/usr/lib/security/\$ISA/pkcs11_softtoken.so Mechanisms: CKM_DES_CBC,CKM_DES_CBC_PAD,CKM_DES_ECB,CKM_DES_KEY_GEN, CKM_DES3_CBC,CKM_DES3_CBC_PAD,CKM_DES3_ECB,CKM_DES3_KEY_GEN, … CKM_SSL3_KEY_AND_MAC_DERIVE,CKM_TLS_KEY_AND_MAC_DERIVE |
ポリシーによって、どのメカニズムが使用可能かが判断されます。ポリシーは、管理者によって設定されます。管理者は、特定のプロバイダのメカニズムを無効にすることができます。-p オプションを指定すると、管理者が設定したポリシーによって許可されているメカニズムのリストが表示されます。
% cryptoadm list -p user-level providers: ===================== /usr/lib/security/$ISA/pkcs11_kernel.so: all mechanisms are enabled. random is enabled. /usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled. random is enabled. kernel software providers: ========================== des: all mechanisms are enabled. aes: all mechanisms are enabled. blowfish: all mechanisms are enabled. arcfour: all mechanisms are enabled. sha1: all mechanisms are enabled. md5: all mechanisms are enabled. rsa: all mechanisms are enabled. swrand: random is enabled. kernel hardware providers: ========================== ncp/0: all mechanisms are enabled. |
Primary Administrator 役割を引き受けるか、スーパーユーザーになります。
Primary Administrator 役割には、Primary Administrator プロファイルが含まれます。役割を作成してユーザーに役割を割り当てるには、『Solaris のシステム管理 (基本編)』の第 2 章「Solaris 管理コンソールの操作 (手順)」を参照してください。
システムで使用可能なソフトウェアプロバイダを一覧表示します。
% cryptoadm list user-level providers: /usr/lib/security/$ISA/pkcs11_kernel.so /usr/lib/security/$ISA/pkcs11_softtoken.so kernel software providers: des aes blowfish arcfour sha1 md5 rsa kernel hardware providers: ncp/0 |
pkgadd コマンドを使用して、プロバイダのパッケージを追加します。
# pkgadd -d /path/to/package pkginst |
パッケージには、Sun の証明書によって署名されたソフトウェアが含まれている必要があります。Sun の証明書を要求し、プロバイダに署名する方法については、『Oracle Solaris セキュリティーサービス開発ガイド』の付録 F「暗号化プロバイダのパッケージ化と署名」を参照してください。
パッケージには、一連のメカニズムを備えたほかのプロバイダが使用可能であることを暗号化フレームワークに通知するスクリプトが含まれます。パッケージの要件については、『Oracle Solaris セキュリティーサービス開発ガイド』の付録 F「暗号化プロバイダのパッケージ化と署名」を参照してください。
プロバイダを更新します。
ソフトウェアプロバイダを追加した場合や、ハードウェアおよびそのハードウェアに指定されているポリシーを追加した場合は、プロバイダを更新する必要があります。
# svcadm refresh svc:/system/cryptosvc |
新しいプロバイダをリストに追加します。
この場合、新しいカーネルソフトウェアプロバイダがインストールされています。
# cryptoadm list … kernel software providers: des aes blowfish arcfour sha1 md5 rsa swrand ecc <-- added provider … |
次の例では、署名された PKCS #11 ライブラリをインストールします。
# pkgadd -d /cdrom/cdrom0/SolarisNew Answer the prompts # svcadm refresh system/cryptosvc # cryptoadm list user-level providers: ========================== /usr/lib/security/$ISA/pkcs11_kernel.so /usr/lib/security/$ISA/pkcs11_softtoken.so /opt/SUNWconn/lib/$ISA/libpkcs11.so.1 <-- added provider |
暗号化フレームワークによってライブラリをテストする開発者は、ライブラリを手動でインストールすることができます。
# cryptoadm install provider=/opt/SUNWconn/lib/\$ISA/libpkcs11.so.1 |
プロバイダの署名については、「Sun 以外のソフトウェアのためのバイナリ署名」を参照してください。
ライブラリプロバイダの暗号化メカニズムに使用すべきでないものが存在する場合、選択したメカニズムを削除することができます。この手順では、一例として、pkcs11_softtoken ライブラリの DES メカニズムを使用します。
スーパーユーザーになるか、Crypto Management 権利プロファイルを含む役割を引き受けます。
Crypto Management 権利プロファイルを含む役割を作成し、作成した役割をユーザーに割り当てる方法については、例 9–7 を参照してください。
特定のユーザーレベルソフトウェアプロバイダによって提供されるメカニズムを一覧表示します。
% cryptoadm list -m provider=/usr/lib/security/\$ISA/pkcs11_softtoken.so /usr/lib/security/$ISA/pkcs11_softtoken.so: CKM_DES_CBC,CKM_DES_CBC_PAD,CKM_DES_ECB,CKM_DES_KEY_GEN, CKM_DES3_CBC,CKM_DES3_CBC_PAD,CKM_DES3_ECB,CKM_DES3_KEY_GEN, CKM_AES_CBC,CKM_AES_CBC_PAD,CKM_AES_ECB,CKM_AES_KEY_GEN, … |
$ cryptoadm list -p user-level providers: ===================== … /usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled. random is enabled. … |
使用すべきでないメカニズムを無効にします。
$ cryptoadm disable provider=/usr/lib/security/\$ISA/pkcs11_softtoken.so \ > mechanism=CKM_DES_CBC,CKM_DES_CBC_PAD,CKM_DES_ECB |
使用可能なメカニズムを一覧表示します。
$ cryptoadm list -p provider=/usr/lib/security/\$ISA/pkcs11_softtoken.so /usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled, except CKM_DES_ECB,CKM_DES_CBC_PAD,CKM_DES_CBC. random is enabled. |
次の例では、無効になっている DES メカニズムを再び使用可能にします。
$ cryptoadm list -m provider=/usr/lib/security/\$ISA/pkcs11_softtoken.so /usr/lib/security/$ISA/pkcs11_softtoken.so: CKM_DES_CBC,CKM_DES_CBC_PAD,CKM_DES_ECB,CKM_DES_KEY_GEN, CKM_DES3_CBC,CKM_DES3_CBC_PAD,CKM_DES3_ECB,CKM_DES3_KEY_GEN, … $ cryptoadm list -p provider=/usr/lib/security/\$ISA/pkcs11_softtoken.so /usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled, except CKM_DES_ECB,CKM_DES_CBC_PAD,CKM_DES_CBC. random is enabled. $ cryptoadm enable provider=/usr/lib/security/\$ISA/pkcs11_softtoken.so \ > mechanism=CKM_DES_ECB $ cryptoadm list -p provider=/usr/lib/security/\$ISA/pkcs11_softtoken.so /usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled, except CKM_DES_CBC_PAD,CKM_DES_CBC. random is enabled. |
次の例では、ユーザーレベルライブラリのメカニズムをすべて有効にします。
$ cryptoadm enable provider=/usr/lib/security/\$ISA/pkcs11_softtoken.so all $ cryptoadm list -p provider=/usr/lib/security/\$ISA/pkcs11_softtoken.so /usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled. random is enabled. |
次の例では、libpkcs11.so.1 ライブラリを削除します。
$ cryptoadm uninstall provider=/opt/SUNWconn/lib/\$ISA/libpkcs11.so.1 $ cryptoadm list user-level providers: /usr/lib/security/$ISA/pkcs11_kernel.so /usr/lib/security/$ISA/pkcs11_softtoken.so kernel software providers: … |
暗号化フレームワークに AES などのプロバイダの複数のモードが用意されている場合、遅いメカニズムや破壊されたメカニズムの使用を解除する場合があります。この手順では、一例として、AES アルゴリズムを使用します。
スーパーユーザーになるか、Crypto Management 権利プロファイルを含む役割を引き受けます。
Crypto Management 権利プロファイルを含む役割を作成し、作成した役割をユーザーに割り当てる方法については、例 9–7 を参照してください。
特定のカーネルソフトウェアプロバイダによって提供されるメカニズムを一覧表示します。
$ cryptoadm list -m provider=aes aes: CKM_AES_ECB,CKM_AES_CBC |
使用可能なメカニズムを一覧表示します。
$ cryptoadm list -p provider=aes aes: all mechanisms are enabled. |
$ cryptoadm disable provider=aes mechanism=CKM_AES_ECB |
使用可能なメカニズムを一覧表示します。
$ cryptoadm list -p provider=aes aes: all mechanisms are enabled, except CKM_AES_ECB. |
次の例では、無効になっている AES メカニズムを再び使用可能にします。
cryptoadm list -m provider=aes aes: CKM_AES_ECB,CKM_AES_CBC $ cryptoadm list -p provider=aes aes: all mechanisms are enabled, except CKM_AES_ECB. $ cryptoadm enable provider=aes mechanism=CKM_AES_ECB $ cryptoadm list -p provider=aes aes: all mechanisms are enabled. |
次の例では、AES プロバイダの使用を一時的に削除します。unload サブコマンドは、プロバイダのアンインストール中にプロバイダが自動的に読み込まれないようにするために使用します。たとえば、unload サブコマンドは、プロバイダに影響を与えるパッチをインストールするときに使用します。
$ cryptoadm unload provider=aes |
$ cryptoadm list … kernel software providers: des aes (inactive) blowfish arcfour sha1 md5 rsa swrand |
AES プロバイダは、暗号化フレームワークが更新されるまでは使用できません。
$ svcadm refresh system/cryptosvc |
$ cryptoadm list … kernel software providers: des aes blowfish arcfour sha1 md5 rsa swrand |
カーネルコンシューマがカーネルソフトウェアプロバイダを使用している場合は、ソフトウェアは読み込み解除されません。エラーメッセージが表示され、プロバイダを使用し続けることができます。
次の例では、AES プロバイダの使用を解除します。いったん削除すると、AES プロバイダはカーネルソフトウェアプロバイダのポリシー一覧に表示されません。
$ cryptoadm uninstall provider=aes |
$ cryptoadm list … kernel software providers: des blowfish arcfour sha1 md5 rsa swrand |
カーネルコンシューマがカーネルソフトウェアプロバイダを使用している場合は、エラーメッセージが表示され、プロバイダを使用し続けることができます。
次の例では、AES カーネルソフトウェアプロバイダを再インストールします。
$ cryptoadm install provider=aes mechanism=CKM_AES_ECB,CKM_AES_CBC |
$ cryptoadm list … kernel software providers: des aes blowfish arcfour sha1 md5 rsa swrand |
ハードウェアプロバイダは、自動的に配置され読み込まれます。詳細は、driver.conf(4) のマニュアルページを参照してください。
Solaris 暗号化フレームワーク内での使用が想定されているハードウェアがある場合、そのハードウェアはカーネルの SPI に登録されます。暗号化フレームワークでは、ハードウェアドライバが署名されていることが確認されます。特に、ドライバのオブジェクトファイルが Sun が発行する証明書付きで署名されていることが確認されます。
たとえば、Sun Crypto Accelerator 6000 ボード (mca)、UltraSPARC T1 および T2 プロセッサの暗号化アクセラレータ用 ncp ドライバ (ncp)、UltraSPARC T2 プロセッサ用 n2cp ドライバ (n2cp) は、ハードウェアのメカニズムをフレームワークに接続します。
プロバイダの署名については、「Sun 以外のソフトウェアのためのバイナリ署名」を参照してください。
システムで使用可能なハードウェアプロバイダを一覧表示します。
% cryptoadm list … kernel hardware providers: ncp/0 |
チップまたはボードで提供されるメカニズムを一覧表示します。
% cryptoadm list -m provider=ncp/0 ncp/0: CKM_DSA,CKM_RSA_X_509,CKM_RSA_PKCS,CKM_RSA_PKCS_KEY_PAIR_GEN, CKM_DH_PKCS_KEY_PAIR_GEN,CKM_DH_PKCS_DERIVE,CKM_EC_KEY_PAIR_GEN, CKM_ECDH1_DERIVE,CKM_ECDSA |
チップまたはボードで使用可能なメカニズムを一覧表示します。
% cryptoadm list -p provider=ncp/0 ncp/0: all mechanisms are enabled. |
ハードウェアプロバイダのメカニズムや乱数機能を選択して無効にすることができます。ふたたび有効にする方法については、例 14–25 を参照してください。この例のハードウェア Sun Crypto Accelerator 1000 ボードは、乱数発生関数を提供します。
スーパーユーザーになるか、Crypto Management 権利プロファイルを含む役割を引き受けます。
Crypto Management 権利プロファイルを含む役割を作成し、作成した役割をユーザーに割り当てる方法については、例 9–7 を参照してください。
無効にするメカニズムまたは機能を選択します。
ハードウェアプロバイダを一覧表示します。
# cryptoadm list ... Kernel hardware providers: dca/0 |
選択したメカニズムを無効にします。
# cryptoadm list -m provider=dca/0 dca/0: CKM_RSA_PKCS, CKM_RSA_X_509, CKM_DSA, CKM_DES_CBC, CKM_DES3_CBC random is enabled. # cryptoadm disable provider=dca/0 mechanism=CKM_DES_CBC,CKM_DES3_CBC # cryptoadm list -p provider=dca/0 dca/0: all mechanisms are enabled except CKM_DES_CBC,CKM_DES3_CBC. random is enabled. |
乱数発生関数を無効にします。
# cryptoadm list -p provider=dca/0 dca/0: all mechanisms are enabled. random is enabled. # cryptoadm disable provider=dca/0 random # cryptoadm list -p provider=dca/0 dca/0: all mechanisms are enabled. random is disabled. |
すべてのメカニズムを無効にします。乱数発生関数は無効にしません。
# cryptoadm list -p provider=dca/0 dca/0: all mechanisms are enabled. random is enabled. # cryptoadm disable provider=dca/0 mechanism=all # cryptoadm list -p provider=dca/0 dca/0: all mechanisms are disabled. random is enabled. |
ハードウェアのすべての機能とメカニズムを無効にします。
# cryptoadm list -p provider=dca/0 dca/0: all mechanisms are enabled. random is enabled. # cryptoadm disable provider=dca/0 all # cryptoadm list -p provider=dca/0 dca/0: all mechanisms are disabled. random is disabled. |
次の例では、一部のハードウェアの無効になっているメカニズムを選択して有効にします。
# cryptoadm list -p provider=dca/0 dca/0: all mechanisms are enabled except CKM_DES_ECB,CKM_DES3_ECB |
. random is enabled. # cryptoadm enable provider=dca/0 mechanism=CKM_DES3_ECB # cryptoadm list -p provider=dca/0 dca/0: all mechanisms are enabled except CKM_DES_ECB. random is enabled. |
次の例では、乱数発生関数のみを有効にします。
# cryptoadm list -p provider=dca/0 dca/0: all mechanisms are enabled, except CKM_MD5,CKM_MD5_HMAC,…. random is disabled. # cryptoadm enable provider=dca/0 random # cryptoadm list -p provider=dca/0 dca/0: all mechanisms are enabled, except CKM_MD5,CKM_MD5_HMAC,…. random is enabled. |
次の例では、メカニズムのみを有効にします。乱数発生関数は無効にしておきます。
# cryptoadm list -p provider=dca/0 dca/0: all mechanisms are enabled, except CKM_MD5,CKM_MD5_HMAC,…. random is disabled. # cryptoadm enable provider=dca/0 mechanism=all # cryptoadm list -p provider=dca/0 dca/0: all mechanisms are enabled. random is disabled. |
次の例では、ボードのすべての機能とメカニズムを有効にします。
# cryptoadm list -p provider=dca/0 dca/0: all mechanisms are enabled, except CKM_DES_ECB,CKM_DES3_ECB. random is disabled. # cryptoadm enable provider=dca/0 all # cryptoadm list -p provider=dca/0 dca/0: all mechanisms are enabled. random is enabled. |
デフォルトでは、Solaris 暗号化フレームワークは有効になっています。何らかの理由で kcfd デーモンが失敗したときには、サービス管理機能を使用して暗号化サービスを再起動することができます。詳細は、smf(5) および svcadm(1M) のマニュアルページを参照してください。暗号化サービスの再起動がゾーンに与える影響については、「暗号化サービスとゾーン」を参照してください。
暗号化サービスの状態を確認します。
% svcs cryptosvc STATE STIME FMRI offline Dec_09 svc:/system/cryptosvc:default |
スーパーユーザーになるか、同等の役割を引き受けて、暗号化サービスを有効にします。
役割には、認証と特権コマンドが含まれます。役割の詳細については、「RBAC の構成 (作業マップ)」を参照してください。
# svcadm enable svc:/system/cryptosvc |
次の例では、暗号化サービスを大域ゾーンで更新します。その結果、すべての非大域ゾーンのカーネルレベルの暗号化ポリシーも更新されます。
# svcadm refresh system/cryptosvc |
Solaris 10 8/07 リリースから、鍵管理フレームワーク (KMF) を通じて、公開鍵オブジェクトを管理するためのツールとプログラミングインタフェースが提供されています。公開鍵オブジェクトには、X.509 証明書や公開鍵/非公開鍵ペアが含まれます。これらのオブジェクトの格納形式としては、さまざまなものが使えます。また、KMF では、アプリケーションによる X.509 証明書の使用方法を定義したポリシーを管理するためのツールも提供されます。
鍵管理フレームワーク (KMF) は、公開鍵技術 (PKI) を管理するための統一されたアプローチを提供します。Solaris OS には、PKI 技術を利用する異なるアプリケーションがいくつか含まれています。各アプリケーションはそれぞれ独自のプログラミングインタフェース、鍵格納メカニズム、および管理ユーティリティーを提供します。アプリケーションがあるポリシー適用メカニズムを提供する場合、そのメカニズムはそのアプリケーションにしか適用されません。KMF では、アプリケーションは統一された管理ツール群、単一のプログラミングインタフェース群、および単一のポリシー適用メカニズムを使用します。これらのインタフェースを採用したすべてのアプリケーションの PKI ニーズは、これらの機能によって管理されます。
KMF では、次のインタフェースによって公開鍵技術の管理が統一されます。
kmfcfg コマンド – このコマンドは PKI ポリシーデータベースを管理します。
PKI ポリシー決定には、ある操作の検証方法などの操作が含まれます。また、PKI ポリシーは証明書の適用範囲を制限することもできます。たとえば、ある証明書が特定の目的にしか使用できないことを主張する PKI ポリシーを定義できます。そのようなポリシーは、その証明書がほかの要求のために使用されるのを禁止します。
KMF ライブラリ – このライブラリには、ベースとなるキーストアメカニズムを抽象化するプログラミングインタフェースが含まれています。
アプリケーションは特定のキーストアメカニズムを選択する必要がなく、あるメカニズムから別のメカニズムへ移行できます。サポートされているキーストアは、PKCS #11、NSS、および OpenSSL です。このライブラリに含まれるプラグイン可能フレームワークを使えば、新しいキーストアメカニズムを追加できます。したがって、アプリケーションがある新しいメカニズムを使用する場合、アプリケーションを若干変更するだけで、その新しいキーストアを使用できるようになります。
KMF は、鍵の格納を管理するための手段を提供するとともに、それらの鍵の使用に関する包括的なポリシーを提供します。KMF は、次の 3 つの公開鍵技術のポリシー、鍵、および証明書を管理します。
PKCS #11 プロバイダ、つまり Solaris 暗号化フレームワークからのトークン
NSS、つまりネットワークセキュリティーサービス
OpenSSL、ファイルベースのキーストア
kmfcfg ツールを使えば、KMF ポリシーエントリの作成、変更、または削除を行えます。KMF は、pktool コマンド経由でキーストアを管理します。詳細については、kmfcfg(1) と pktool(1) のマニュアルページ、および次の各節を参照してください。
KMF のポリシーはデータベース内に格納されます。このポリシーデータベースは、KMF プログラミングインタフェースを使用するすべてのアプリケーションによって内部的にアクセスされます。このデータベースを使えば、KMF ライブラリによって管理される鍵や証明書の使用に、制約を設けることができます。アプリケーションは、証明書の検証を試みる際に、ポリシーデータベースをチェックします。kmfcfg コマンドはポリシーデータベースを変更します。
KMF は、PKCS #11 トークン、NSS、OpenSSL の 3 つの公開鍵技術のキーストアを管理します。pktool コマンドを使えば、これらすべての技術について次のことが行えます。
自己署名付き証明書を生成する。
証明書要求を生成する。
キーストアにオブジェクトをインポートする。
キーストア内のオブジェクトを一覧表示する。
キーストアからオブジェクトを削除する。
CRL をダウンロードする。
PKCS #11 および NSS 技術の場合には、pktool コマンドでパスフレーズを生成して PIN を設定することもできます。
キーストアのパスフレーズを生成する。
キーストア内のあるオブジェクトのパスフレーズを生成する。
pktool ユーティリティーの使用例については、pktool(1) のマニュアルページおよび 「鍵管理フレームワークの使用 (作業マップ)」を参照してください。
鍵管理フレームワーク (KMF) を使うと公開鍵技術を集中管理できます。
作業 |
説明 |
参照先 |
---|---|---|
証明書を作成します。 |
PKCS #11、NSS、SSL で使用される証明書を作成します。 | |
証明書をエクスポートします。 |
証明書とそれをサポートする鍵を含むファイルを作成します。このファイルはパスワードで保護できます。 | |
証明書をインポートします。 |
別のシステムから取得した証明書をインポートします。 | |
別のシステムから取得した PKCS #12 形式の証明書をインポートします。 | ||
パスフレーズを生成します。 |
PKCS #11 キーストアまたは NSS キーストアにアクセスするためのパスフレーズを生成します。 |
この節では、パスワード、パスフレーズ、ファイル、キーストア、証明書、CRL などの公開鍵オブジェクトを、pktool コマンドを使って管理する方法について説明します。
この手順では、自己署名付き証明書を作成し、その証明書を PKCS #11 キーストアに格納します。また、この処理の一部として、RSA 公開鍵/非公開鍵ペアも作成されます。非公開鍵は、証明書とともにキーストアに格納されます。
自己署名付き証明書を生成する。
% pktool gencert [keystore=keystore] label=label-name \ subject=subject-DN serial=hex-serial-number |
公開鍵オブジェクトのタイプを指定することでキーストアを指定します。指定可能な値は nss、pkcs11、ssl のいずれかです。このキーワードは省略可能です。
発行者が証明書に与える一意の名前です。
証明書の識別名です。
16 進形式のシリアル番号です。証明書の発行者が、0x0102030405 などの番号を選択します。
% pktool list Found number certificates. 1. (X.509 certificate) Label: label-name ID: Fingerprint that binds certificate to private key Subject: subject-DN Issuer: distinguished-name Serial: hex-serial-number n. ... |
このコマンドは、キーストア内のすべての証明書を一覧表示します。次の例では、キーストアには証明書が 1 つしか含まれていません。
次の例では、My Company のあるユーザーが自己署名付き証明書を作成し、その証明書を PKCS #11 オブジェクト用のキーストアに格納しています。このキーストアは最初は空になっています。キーストアが初期化されていない場合、ソフトトークンの PIN は changeme になります。
% pktool gencert keystore=pkcs11 label="My Cert" \ subject="C=US, O=My Company, OU=Security Engineering Group, CN=MyCA" \ serial=0x000000001 Enter pin for Sun Software PKCS#11 softtoken:Type PIN for token |
% pktool list Found 1 certificates. 1. (X.509 certificate) Label: My Cert ID: 12:82:17:5f:80:78:eb:44:8b:98:e3:3c:11:c0:32:5e:b6:4c:ea:eb Subject: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA Issuer: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA Serial: 0x01 |
この手順では、PEM または生の DER を使ってエンコードされた PKI 情報を含むファイルを、キーストアにインポートする方法を説明します。エクスポートの手順については、例 15–4 を参照してください。
証明書をインポートします。
% pktool import keystore=keystore infile=infile-name label=label-name |
非公開 PKI オブジェクトをインポートする場合、プロンプトが表示されたときにパスワードを入力します。
キーストアの内容を確認します。
% pktool list Found number certificates. 1. (X.509 certificate) Label: label-name ID: Fingerprint that binds certificate to private key Subject: subject-DN Issuer: distinguished-name Serial: hex-serial-number 2. ... |
次の例では、サードパーティーから取得した PKCS #12 ファイルをインポートしています。pktool import コマンドは、gracedata.p12 ファイルから非公開鍵と証明書を取り出し、それらを指定されたキーストア内に格納します。
% pktool import keystore=pkcs11 infile=gracedata.p12 label=GraceCert Enter password to use for accessing the PKCS12 file:Type PKCS #12 password Enter pin for Sun Software PKCS#11 softtoken: Type PIN for token Found 1 certificate(s) and 1 key(s) in gracedata.p12 % pktool list Found 1 certificates. 1. (X.509 certificate) Label: GraceCert ID: 12:82:17:5f:80:78:eb:44:8b:98:e3:3c:11:c0:32:5e:b6:4c:ea:eb Subject: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA Issuer: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA Serial: 0x01 |
次の例では、PEM 形式の X.509 証明書を指定されたキーストアにインポートしています。この公開証明書はパスワードで保護されていません。ユーザーの公開キーストアもパスワードで保護されていません。
% pktool import keystore=pkcs11 infile=somecert.pem label="TheirCompany Root Cert" % pktool list Found 1 certificates. 1. (X.509 certificate) Label: TheirCompany Root Cert ID: 21:ae:83:98:24:d1:1f:cb:65:5b:48:75:7d:02:47:cf:98:1f:ec:a0 Subject: C=US, O=TheirCompany, OU=Security, CN=TheirCompany Root CA Issuer: C=US, O=TheirCompany, OU=Security, CN=TheirCompany Root CA Serial: 0x01 |
PKCS #12 形式のファイルを作成し、非公開鍵とそれに関連付けられた X.509 証明書をほかのシステムにエクスポートすることができます。このファイルへのアクセスはパスワードで保護されます。
エクスポートする証明書を見つけます。
% pktool list Found number certificates. 1. (X.509 certificate) Label: label-name ID: Fingerprint that binds certificate to private key Subject: subject-DN Issuer: distinguished-name Serial: hex-serial-number 2. ... |
鍵と証明書をエクスポートします。
pktool list コマンドから得られたキーストアとラベルを使用します。エクスポートファイルのファイル名を指定します。名前に空白が含まれている場合は、名前を二重引用符で囲みます。
% pktool export keystore=keystore outfile=outfile-name label=label-name |
エクスポートファイルをパスワードで保護します。
プロンプトで、キーストアの現在のパスワードを入力します。ここで、エクスポートファイルのパスワードを作成します。ファイルの受信者は、インポート時にこのパスワードを入力する必要があります。
Enter pin for Sun Software PKCS#11 softtoken: Type PIN for token Enter password to use for accessing the PKCS12 file:Create PKCS #12 password |
パスワードはエクスポートファイルとは別に送ってください。パスワードを伝える最良の方法は、電話上など、通常の通信手段以外の手段を使用する方法です。
次の例では、あるユーザーが、非公開鍵とそれに関連付けられた X.509 証明書を、標準 PKCS #12 ファイル内にエクスポートしています。このファイルは、ほかのキーストアにインポートできます。PKCS #11 パスワードはソースのキーストアを保護します。PKCS #12 パスワードは、PKCS #12 ファイル内の非公開データを保護するために使用されます。このパスワードはファイルのインポート時に必要となります。
% pktool list Found 1 certificates. 1. (X.509 certificate) Label: My Cert ID: 12:82:17:5f:80:78:eb:44:8b:98:e3:3c:11:c0:32:5e:b6:4c:ea:eb Subject: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA Issuer: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA Serial: 0x01 |
% pktool export keystore=pkcs11 outfile=mydata.p12 label="My Cert" Enter pin for Sun Software PKCS#11 softtoken: Type PIN for token Enter password to use for accessing the PKCS12 file:Create PKCS #12 password |
続いて、このユーザーは受信者に電話をかけ、PKCS #12 パスワードを伝えます。
キーストア内のあるオブジェクトに対して、あるいはキーストアそのものに対して、パスフレーズを生成することができます。このパスフレーズは、オブジェクトやキーストアにアクセスする際に必要となります。キーストア内のオブジェクトに対するパスフレーズの生成例については、例 15–4 を参照してください。
キーストアにアクセスするためのパスフレーズを生成します。
% pktool setpin keystore=nss|pkcs11 dir=directory |
プロンプトに答えます。
キーストアにまだパスワードが設定されていない場合には、Return キーを押してパスワードを作成します。
Enter current token passphrase:Press the Return key Create new passphrase:Type the passphrase that you want to use Re-enter new passphrase:Retype the passphrase Passphrase changed. |
これでキーストアがパスフレーズで保護されます。 パスフレーズを忘れると、キーストア内のオブジェクトにアクセスできなくなります。
次の例は、NSS データベースのパスフレーズを設定する方法を示したものです。パスフレーズがまだ作成されていないため、最初のプロンプトで Return キーを押します。
% pktool setpin keystore=nss dir=/var/nss Enter current token passphrase:Press the Return key Create new passphrase: has8n0NdaH Re-enter new passphrase: has8n0NdaH Passphrase changed. |