Solaris のシステム管理 (セキュリティサービス)

パート IV Solaris 暗号化サービス

ここでは、Solaris OS が提供する集中型の暗号化および公開鍵技術サービスについて説明します。

第 13 章 Solaris の暗号化フレームワーク (概要)

この章では、Solaris の暗号化フレームワークについて説明します。この章の内容は次のとおりです。

Solaris の暗号化フレームワークの管理方法と使用方法については、第 14 章Solaris の暗号化フレームワーク (手順)を参照してください。

Solaris の暗号化フレームワークの新機能

Solaris 10 1/06: フレームワークの libpkcs11.so ライブラリには、「メタスロット」という新しいコンポーネントが含まれています。メタスロットは、フレームワークにインストールされているすべてのトークンとスロットの機能を結合させて単一の仮想スロットで提供するコンポーネントです。メタスロットにより、事実上、アプリケーションから利用可能なすべての暗号化サービスに単一のスロットを通じて透過的に接続できるようになります。

Solaris の暗号化フレームワーク

Solaris の暗号化フレームワークは、暗号化要求を処理するアルゴリズムと PKCS #11 ライブラリの共通の格納場所を提供します。PKCS #11 ライブラリは、RSA Security Inc. PKCS #11 Cryptographic Token Interface (Cryptoki) に従って 実装されます。

暗号化フレームワークは、現在、Kerberos および IPsec に対する暗号化要求をカーネルレベルで処理します。ユーザーレベルコンシューマは、libsasl や IKE などです。

米国の輸出法では、公開された暗号化インタフェースは使用の制限が義務付けられています。Solaris の暗号化フレームワークは、カーネル暗号化プロバイダおよび PKCS #11 暗号化プロバイダの署名を義務付けることにより、この現行法を満たしています。詳細については、「Sun 以外のソフトウェアのためのバイナリ署名」を参照してください。

暗号化フレームワークにより、暗号化サービスのプロバイダはそのサービスが Solaris オペレーティングシステム の多数のコンシューマに使用されるようにすることができます。プロバイダはプラグインとも言います。暗号化フレームワークでは、3 種類のプラグインが使用可能です。

暗号化フレームワークは、ユーザーレベルプロバイダ用に標準インタフェースとして PKCS #11 v2.11 ライブラリを実装しています。このライブラリは、Sun 以外のアプリケーションがプロバイダに到達するために使用することができます。サードパーティーは、署名付きライブラリ、署名付きカーネルアルゴリズムモジュール、および署名付きデバイスドライバを暗号化フレームワークに追加することもできます。これらのプラグインは、pkgadd ユーティリティーによって Sun 以外のソフトウェアがインストールされると追加されます。暗号化フレームワークの主なコンポーネントの一覧図については、『Oracle Solaris セキュリティーサービス開発ガイド』の第 8 章「Oracle Solaris 暗号化フレームワークの紹介」を参照してください。

Solaris の暗号化フレームワークの用語

次の定義と例のリストは、暗号化フレームワークでの作業時に役立ちます。

Solaris の暗号化フレームワークの適用範囲

暗号化フレームワークには、管理者、ユーザー、およびプロバイダを提供する開発者向けのコマンドが用意されています。

Solaris 暗号化フレームワークの管理コマンド

cryptoadm コマンドは、動作中の暗号化フレームワークを管理します。このコマンドは、Crypto Management 権利プロファイルの一部です。この権利プロファイルは、暗号化フレームワークを安全に管理する役割に割り当てることができます。cryptoadm コマンドは、次の内容を管理します。

svcadm コマンドを使用して、暗号化サービスデーモン、kcfd を有効化、更新、および無効化することができます。このコマンドは、Solaris のサービス管理機能 smf の一部です。svc:/system/cryptosvcs は、暗号化フレームワークのサービスインスタンスです。詳細は、smf(5) および svcadm(1M) のマニュアルページを参照してください。

Solaris 暗号化フレームワークのユーザーレベルコマンド

Solaris の暗号化フレームワークでは、ファイルの整合性の確認、ファイルの暗号化、およびファイルの復号化を行うユーザーレベルコマンドが用意されています。独立したコマンド elfsign によって、フレームワークでの使用のためにプロバイダがバイナリに署名することができます。

Sun 以外のソフトウェアのためのバイナリ署名

elfsign コマンドは、Solaris 暗号化フレームワークでの使用のためにプロバイダに署名する手段です。一般に、このコマンドはプロバイダの開発者によって実行されます。

elfsign コマンドには、Sun の証明書を要求するためのサブコマンドとバイナリ署名を行うためのサブコマンドが用意されています。署名を確認するサブコマンドもあります。署名されていないバイナリは、Solaris の暗号化フレームワークで使用することができません。1 つまたは複数のプロバイダに署名するには、Sun の証明書と、その証明書の要求に使用された非公開鍵が必要です。詳細については、『Oracle Solaris セキュリティーサービス開発ガイド』の付録 F「暗号化プロバイダのパッケージ化と署名」を参照してください。

Solaris の暗号化フレームワークのプラグイン

サードパーティーは、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) のマニュアルページを参照してください。

第 14 章 Solaris の暗号化フレームワーク (手順)

この章では、Solaris の暗号化フレームワークの使用方法について説明します。この章の内容は次のとおりです。

暗号化フレームワークの使用 (作業マップ)

次の作業マップでは、暗号化フレームワークの使用についての作業を示します。

作業 

説明 

参照先 

個々のファイルまたはファイルのセットを保護します 

ファイルの内容が改ざんされていないことを確認します。ファイルが侵入者によって解読されるのを防ぎます。これらの手順は通常のユーザーが行うことができます。 

「Solaris 暗号化フレームワークによるファイルの保護 (作業マップ)」

暗号化フレームワークを管理します 

ソフトウェアプロバイダを追加、構成、および削除します。ハードウェアプロバイダのメカニズムを無効および有効にします。これらの手順は管理上の手順です。 

「暗号化フレームワークの管理 (作業マップ)」

プロバイダに署名します 

プロバイダが Solaris 暗号化フレームワークに追加されるようにします。これらの手順は開発者の手順です。 

『Oracle Solaris セキュリティーサービス開発ガイド』の付録 F「暗号化プロバイダのパッケージ化と署名」

Solaris 暗号化フレームワークによるファイルの保護 (作業マップ)

Solaris 暗号化フレームワークは、ファイルの保護に役立ちます。次の作業マップでは、使用可能なアルゴリズムを一覧表示する手順、および暗号化によってファイルを保護する手順を示します。

作業 

説明 

参照先 

対称鍵を生成します 

ユーザーが指定したアルゴリズムで使用するランダム鍵を生成します。 

dd コマンドを使用して対称鍵を生成する方法」

 

ユーザーが指定した長さの鍵を生成します。任意で、ファイル、PKCS #11 キーストア、または NSS キーストアに鍵を格納します。 

pktool コマンドを使用して対称鍵を生成する方法」

ファイルの整合性を保証するチェックサムを提供します 

受信者のファイルのコピーが送信されたファイルと同一のものであることを検証します。 

「ファイルの要約を計算する方法」

メッセージ認証コード (MAC) でファイルを保護します 

自分がメッセージの送信者であることを受信者に証明します。 

「ファイルの MAC を計算する方法」

ファイルを暗号化したあと、暗号化されたファイルを復号化します 

ファイルを暗号化することによりファイルの内容を保護します。ファイルを復号化するための暗号化パラメータを指定します。 

「ファイルを暗号化および復号化する方法」

Solaris 暗号化フレームワークによるファイルの保護

この節では、対称鍵を生成する方法、ファイルの整合性のためにチェックサムを作成する方法、およびファイルが傍受されるのを防ぐ方法について説明します。この節のコマンドは、通常のユーザーが実行することができます。開発者は、これらのコマンドを使用するスクリプトを作成することができます。

Proceduredd コマンドを使用して対称鍵を生成する方法

ファイルを暗号化し、ファイルの MAC を生成するには、鍵が必要です。鍵は、数のランダムプールから生成します。

乱数発生関数がすでにある場合は、それを使用してください。この関数がない場合は、Solaris の /dev/urandom デバイスを入力として dd コマンドを使用します。詳細は、dd(1M) のマニュアルページを参照してください。

  1. アルゴリズムが必要とする鍵の長さを決定します。

    1. 使用可能なアルゴリズムを一覧表示します。


      % 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
    2. dd コマンドに渡す鍵の長さをバイト単位で定義します。

      最小鍵サイズと最大鍵サイズを 8 で割ります。最小鍵サイズと最大鍵サイズが異なるときは、中間の鍵サイズを使用することができます。たとえば、sha1_hmac 関数および md5_hmac 関数の場合、値 8、16、または 64 を dd コマンドに渡すことができます。

  2. 対称鍵を生成します。


    % dd if=/dev/urandom of=keyfile bs=n count=n
    
    if=file

    入力ファイルです。ランダム鍵に対しては、/dev/urandom ファイルを使用します。

    of=keyfile

    生成された鍵を保持する出力ファイルです。

    bs=n

    バイト単位の鍵サイズです。バイト単位の鍵サイズに対しては、ビット単位の鍵の長さを 8 で割ります。

    count=n

    入力ブロックの数です。n の数は 1 とします。

  3. 鍵を保護されたディレクトリに格納します。

    そのユーザー以外は鍵のファイルを読み取ることができないように変更します。


    % chmod 400 keyfile
    

例 14–1 AES アルゴリズムの鍵を作成する

次の例では、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


例 14–2 DES アルゴリズムの鍵を作成する

次の例では、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


例 14–3 3DES アルゴリズムの鍵を作成する

次の例では、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


例 14–4 MD5 アルゴリズムの鍵を作成する

次の例では、MD5 アルゴリズムの秘密鍵を作成します。この鍵は、あとで復号化するために格納も行います。この鍵は、dd コマンドでは 64 バイトです。


% dd if=/dev/urandom of=$HOME/keyf/05.07.mack64 bs=64 count=1
% chmod 400 ~/keyf/05.07.mack64

Procedurepktool コマンドを使用して対称鍵を生成する方法

アプリケーションによっては、通信の暗号化および復号化に対称鍵が必要です。この手順では、対称鍵を作成して格納します。

  1. (省略可能) キーストアを使用する場合は、作成します。

  2. 対称鍵として使用する乱数を生成します。

    次のいずれかを実行します。

    • 鍵を生成してファイルに格納します。

      鍵をファイルに格納する利点は、このファイルから鍵を抽出して、/etc/inet/secret/ipseckeys ファイルや IPsec など、アプリケーションの鍵ファイルで使用できることです。


      % pktool genkey keystore=file outkey=key-fn \ 
      [keytype=specific-symmetric-algorithm] [keylen=size-in-bits] \
      [dir=directory] [print=n]
      keystore

      file の値は、鍵の格納場所のファイルタイプを指定します。

      outkey=key-fn

      keystore=file のときのファイル名です。

      keytype=specific-symmetric-algorithm

      特定のアルゴリズムとして、aesarcfourdes、または 3des を指定します。

      keylen=size-in-bits

      鍵のビット長です。8 で割り切れる数にする必要があります。des または 3des には指定しないでください。

      dir=directory

      key-fn へのディレクトリパスです。デフォルトでは、directory は現在のディレクトリです。

      print=n

      鍵を端末ウィンドウに印刷します。デフォルトでは、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]
      label=key-label

      鍵についてユーザーが指定したラベルです。ラベルに基づいてキーストアから鍵を取得できます。

      keytype=specific-symmetric-algorithm

      特定のアルゴリズムとして、aesarcfourdes、または 3des を指定します。

      keylen=size-in-bits

      鍵のビット長です。8 で割り切れる数にする必要があります。des または 3des には指定しないでください。

      token=token

      トークン名です。デフォルトでは、トークンは Sun Software PKCS#11 softtoken です。

      sensitive=n

      鍵の重要度を指定します。値が y の場合、鍵は print=y 引数を使用して印刷することはできません。デフォルトでは、sensitive の値は n です。

      extractable=y

      鍵がキーストアから抽出できることを指定します。鍵が抽出されないようにするには、n を指定します。

      print=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]
      keystore

      nss の値は、鍵の格納場所の NSS タイプを指定します。

      label=key-label

      鍵についてユーザーが指定したラベルです。ラベルに基づいてキーストアから鍵を取得できます。

      keytype=specific-symmetric-algorithm

      特定のアルゴリズムとして、aesarcfourdes、または 3des を指定します。

      keylen=size-in-bits

      鍵のビット長です。8 で割り切れる数にする必要があります。des または 3des には指定しないでください。

      token=token

      トークン名です。デフォルトでは、トークンは NSS 内部トークンです。

      dir=directory

      NSS データベースへのディレクトリパスです。デフォルトでは、directory は現在のディレクトリです。

      prefix=directory

      NSS データベースの接頭辞です。デフォルトは接頭辞なしです。

      print=n

      鍵を端末ウィンドウに印刷します。デフォルトでは、print の値は n です。

  3. (省略可能) 鍵が存在することを確認します。

    鍵を格納した場所に応じて、次のコマンドのいずれかを使用します。

    • key-fn ファイル内の鍵を確認します。


      % pktool list keystore=file objtype=key infile=key-fn
      Found n keys.
      Key #1 - keytype:location (keylen)
      
    • PKCS #11 または NSS キーストア内の鍵を確認します。


      $ pktool list objtype=key
      Enter PIN for keystore:
      Found n keys.
      Key #1 - keytype:location (keylen)
      

例 14–5 pktool コマンドを使用して DES 鍵を作成する

次の例では、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

Procedureファイルの要約を計算する方法

ファイルの要約を作成すると、要約の出力を比較することによって、ファイルが改ざんされていないことを確認することができます。要約によって元のファイルが変更されることはありません。

  1. 使用可能な要約アルゴリズムを列挙します。


    % digest -l
    md5
    sha1
    sha256
    sha384
    sha512
  2. ファイルの要約を計算し、要約の一覧を保存します。

    digest コマンドでアルゴリズムを指定します。


    % digest -v -a algorithm input-file > digest-listing
    
    -v

    次の形式で出力を表示します。


    algorithm (input-file) = digest
    
    -a algorithm

    ファイルの要約の計算に使用するアルゴリズムです。手順 1 の出力のようにアルゴリズムを入力します。

    input-file

    digest コマンドの入力ファイルです。

    digest-listing

    digest コマンドの出力ファイルです。


例 14–6 MD5 メカニズムで要約を計算する

次の例では、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


例 14–7 SHA1 メカニズムで要約を計算する

次の例では、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

Procedureファイルの MAC を計算する方法

メッセージ認証コード (MAC) は、ファイルの要約を計算し、秘密鍵を使用してさらに要約を保護します。MAC によって元のファイルが変更されることはありません。

  1. 使用可能なメカニズムを一覧表示します。


    % 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. 該当する長さの対称鍵を生成します。

    2 つの選択肢があります。鍵が生成されるパスフレーズを指定することができます。または鍵を指定することができます。

    • パスフレーズを指定する場合、指定したパスフレーズを格納するか覚えておく必要があります。パスフレーズをオンラインで格納する場合、そのパスフレーズファイルは自分だけが読み取ることができるようにします。

    • 鍵を指定する場合、それはメカニズムの現在のサイズである必要があります。手順については、dd コマンドを使用して対称鍵を生成する方法」を参照してください。

  3. ファイルの MAC を作成します。

    mac コマンドで、鍵を指定して対称鍵アルゴリズムを使用します。


    % mac -v -a algorithm [ -k keyfile ] input-file
    
    -v

    次の形式で出力を表示します。


    algorithm (input-file) = mac
    
    -a algorithm

    MAC を計算するために使用するアルゴリズムです。mac -l コマンドの出力のようにアルゴリズムを入力します。

    -k keyfile

    アルゴリズムで指定された長さの鍵を含むファイルです。

    input-file

    MAC の入力ファイルです。


例 14–8 DES_MAC およびパスフレーズで 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


例 14–9 MD5_HMAC および鍵ファイルで MAC を計算する

次の例では、電子メールの添付ファイルを、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


例 14–10 SHA1_HMAC および鍵ファイルで MAC を計算する

次の例では、ディレクトリの一覧を、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

Procedureファイルを暗号化および復号化する方法

ファイルを暗号化しても、元のファイルが削除されたり変更されたりすることはありません。出力ファイルが暗号化されます。

encrypt コマンドの一般的なエラーを解決するには、例のあとの節を参照してください。

  1. 該当する長さの対称鍵を作成します。

    2 つの選択肢があります。鍵が生成されるパスフレーズを指定することができます。または鍵を指定することができます。

    • パスフレーズを指定する場合、指定したパスフレーズを格納するか覚えておく必要があります。パスフレーズをオンラインで格納する場合、そのパスフレーズファイルは自分だけが読み取ることができるようにします。

    • 鍵を指定する場合、それはメカニズムの現在のサイズである必要があります。手順については、dd コマンドを使用して対称鍵を生成する方法」を参照してください。

  2. ファイルを暗号化します。

    encrypt コマンドで、鍵を指定して対称鍵アルゴリズムを使用します。


    % encrypt -a algorithm  [ -k keyfile ] -i input-file -o output-file
    
    -a algorithm

    ファイルを暗号化するために使用するアルゴリズムです。encrypt -l コマンドの出力のようにアルゴリズムを入力します。

    -k keyfile

    アルゴリズムで指定された長さの鍵を含むファイルです。アルゴリズムごとの鍵の長さが、ビット単位で encrypt -l コマンドの出力に一覧表示されます。

    -i input-file

    暗号化する入力ファイルです。このファイルは、コマンドによって変更されることはありません。

    -o output-file

    入力ファイルと同じ暗号化形式の出力ファイルです。


例 14–11 AES およびパスフレーズで暗号化および復号化する

次の例では、ファイルを 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>


例 14–12 AES および鍵ファイルで暗号化および復号化する

次の例では、ファイルを 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


例 14–13 ARCFOUR および鍵ファイルで暗号化および復号化する

次の例では、ファイルを 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


例 14–14 3DES および鍵ファイルで暗号化および復号化する

次の例では、ファイルを 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コマンドに指定した鍵が、使用しているアルゴリズムで許可されないことが示されます。

アルゴリズムの条件を満たしていない鍵を渡した場合は、条件を満たす鍵を指定する必要があります。

暗号化フレームワークの管理 (作業マップ)

次の作業マップでは、Solaris 暗号化フレームワークのソフトウェアプロバイダおよびハードウェアプロバイダの管理の手順を示します。

作業 

説明 

参照先 

Solaris 暗号化フレームワークのプロバイダを一覧表示します 

Solaris 暗号化フレームワークで使用可能なアルゴリズム、ライブラリ、およびハードウェアデバイスを一覧表示します。 

「使用可能なプロバイダを一覧表示する方法」

ソフトウェアプロバイダを追加します 

PKCS #11 ライブラリまたはカーネルモジュールを Solaris 暗号化フレームワークに追加します。プロバイダは署名されている必要があります。 

「ソフトウェアプロバイダを追加する方法」

ユーザーレベルのメカニズムが使用されないようにします 

ソフトウェアメカニズムの使用を解除します。ソフトウェアメカニズムは、再度有効にすることができます。 

「ユーザーレベルのメカニズムが使用されないようにする方法」

カーネルモジュールのメカニズムを一時的に無効にします 

一時的にメカニズムの使用を解除します。通常はテストのために使用します。 

「カーネルソフトウェアプロバイダが使用されないようにする方法」

プロバイダをアンインストールします 

カーネルソフトウェアプロバイダの使用を解除します。 

例 14–22

使用可能なハードウェアプロバイダを一覧表示します 

接続されているハードウェア、そのハードウェアに提供されているメカニズム、および使用可能になっているメカニズムを表示します。 

「ハードウェアプロバイダを一覧表示する方法」

ハードウェアプロバイダのメカニズムを無効にします 

ハードウェアアクセラレータ上の選択したメカニズムが使用されないようにします。 

「ハードウェアプロバイダのメカニズムと機能を無効にする方法」

暗号化サービスを再起動または更新します 

暗号化サービスを使用できるようにします。 

「すべての暗号化サービスを更新または再起動する方法」

暗号化フレームワークの管理

この節では、Solaris 暗号化フレームワークのソフトウェアプロバイダおよびハードウェアプロバイダの管理方法について説明します。必要に応じて、ソフトウェアプロバイダおよびハードウェアプロバイダの使用を解除することができます。たとえば、ソフトウェアプロバイダのアルゴリズムの実装を無効にすることができます。その後、別のソフトウェアプロバイダのアルゴリズムがシステムで使用されるようにすることができます。

Procedure使用可能なプロバイダを一覧表示する方法

Solaris 暗号化フレームワークには、数種類のコンシューマ用のアルゴリズムが用意されています。

  1. 簡潔な形式でプロバイダを一覧表示します。


    注 –

    プロバイダリストの内容と書式は、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
  2. 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

例 14–15 既存の暗号化メカニズムを検索する

次の例では、ユーザーレベルライブラリ 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


例 14–16 使用可能な暗号化メカニズムを検索する

ポリシーによって、どのメカニズムが使用可能かが判断されます。ポリシーは、管理者によって設定されます。管理者は、特定のプロバイダのメカニズムを無効にすることができます。-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.

Procedureソフトウェアプロバイダを追加する方法

  1. Primary Administrator 役割を引き受けるか、スーパーユーザーになります。

    Primary Administrator 役割には、Primary Administrator プロファイルが含まれます。役割を作成してユーザーに役割を割り当てるには、『Solaris のシステム管理 (基本編)』の第 2 章「Solaris 管理コンソールの操作 (手順)」を参照してください。

  2. システムで使用可能なソフトウェアプロバイダを一覧表示します。


    % 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
  3. pkgadd コマンドを使用して、プロバイダのパッケージを追加します。


    # pkgadd -d /path/to/package pkginst
    

    パッケージには、Sun の証明書によって署名されたソフトウェアが含まれている必要があります。Sun の証明書を要求し、プロバイダに署名する方法については、『Oracle Solaris セキュリティーサービス開発ガイド』の付録 F「暗号化プロバイダのパッケージ化と署名」を参照してください。

    パッケージには、一連のメカニズムを備えたほかのプロバイダが使用可能であることを暗号化フレームワークに通知するスクリプトが含まれます。パッケージの要件については、『Oracle Solaris セキュリティーサービス開発ガイド』の付録 F「暗号化プロバイダのパッケージ化と署名」を参照してください。

  4. プロバイダを更新します。

    ソフトウェアプロバイダを追加した場合や、ハードウェアおよびそのハードウェアに指定されているポリシーを追加した場合は、プロバイダを更新する必要があります。


    # svcadm refresh svc:/system/cryptosvc
    
  5. 新しいプロバイダをリストに追加します。

    この場合、新しいカーネルソフトウェアプロバイダがインストールされています。


    # cryptoadm list 
    …
    kernel software providers:
        des
        aes
        blowfish
        arcfour
        sha1
        md5
        rsa
        swrand
        ecc <-- added provider

例 14–17 ユーザーレベルソフトウェアプロバイダを追加する

次の例では、署名された 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 以外のソフトウェアのためのバイナリ署名」を参照してください。


Procedureユーザーレベルのメカニズムが使用されないようにする方法

ライブラリプロバイダの暗号化メカニズムに使用すべきでないものが存在する場合、選択したメカニズムを削除することができます。この手順では、一例として、pkcs11_softtoken ライブラリの DES メカニズムを使用します。

  1. スーパーユーザーになるか、Crypto Management 権利プロファイルを含む役割を引き受けます。

    Crypto Management 権利プロファイルを含む役割を作成し、作成した役割をユーザーに割り当てる方法については、例 9–7 を参照してください。

  2. 特定のユーザーレベルソフトウェアプロバイダによって提供されるメカニズムを一覧表示します。


    % 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,
    …
  3. 使用可能なメカニズムを一覧表示します。


    $ cryptoadm list -p
    user-level providers:
    =====================
    …
    /usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled.
    random is enabled.
    …
  4. 使用すべきでないメカニズムを無効にします。


    $ cryptoadm disable provider=/usr/lib/security/\$ISA/pkcs11_softtoken.so \
    > mechanism=CKM_DES_CBC,CKM_DES_CBC_PAD,CKM_DES_ECB
    
  5. 使用可能なメカニズムを一覧表示します。


    $ 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.

例 14–18 ユーザーレベルソフトウェアプロバイダのメカニズムを有効にする

次の例では、無効になっている 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.


例 14–19 ユーザーレベルソフトウェアプロバイダのメカニズムをすべて有効にする

次の例では、ユーザーレベルライブラリのメカニズムをすべて有効にします。


$ 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.


例 14–20 ユーザーレベルソフトウェアプロバイダの使用を永続的に削除する

次の例では、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:
…

Procedureカーネルソフトウェアプロバイダが使用されないようにする方法

暗号化フレームワークに AES などのプロバイダの複数のモードが用意されている場合、遅いメカニズムや破壊されたメカニズムの使用を解除する場合があります。この手順では、一例として、AES アルゴリズムを使用します。

  1. スーパーユーザーになるか、Crypto Management 権利プロファイルを含む役割を引き受けます。

    Crypto Management 権利プロファイルを含む役割を作成し、作成した役割をユーザーに割り当てる方法については、例 9–7 を参照してください。

  2. 特定のカーネルソフトウェアプロバイダによって提供されるメカニズムを一覧表示します。


    $ cryptoadm list -m provider=aes
    aes: CKM_AES_ECB,CKM_AES_CBC
  3. 使用可能なメカニズムを一覧表示します。


    $ cryptoadm list -p provider=aes
    aes: all mechanisms are enabled.
  4. 使用すべきでないメカニズムを無効にします。


    $ cryptoadm disable provider=aes mechanism=CKM_AES_ECB
    
  5. 使用可能なメカニズムを一覧表示します。


    $ cryptoadm list -p provider=aes
    aes: all mechanisms are enabled, except CKM_AES_ECB.

例 14–21 カーネルソフトウェアプロバイダのメカニズムを有効にする

次の例では、無効になっている 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.


例 14–22 カーネルソフトウェアプロバイダの使用を一時的に削除する

次の例では、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

カーネルコンシューマがカーネルソフトウェアプロバイダを使用している場合は、ソフトウェアは読み込み解除されません。エラーメッセージが表示され、プロバイダを使用し続けることができます。



例 14–23 ソフトウェアプロバイダの使用を永続的に解除する

次の例では、AES プロバイダの使用を解除します。いったん削除すると、AES プロバイダはカーネルソフトウェアプロバイダのポリシー一覧に表示されません。


$ cryptoadm uninstall provider=aes

$ cryptoadm list 
…
kernel software providers:
    des
    blowfish
    arcfour
    sha1
    md5
    rsa
    swrand

カーネルコンシューマがカーネルソフトウェアプロバイダを使用している場合は、エラーメッセージが表示され、プロバイダを使用し続けることができます。



例 14–24 削除されたカーネルソフトウェアプロバイダを再インストールする

次の例では、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

Procedureハードウェアプロバイダを一覧表示する方法

ハードウェアプロバイダは、自動的に配置され読み込まれます。詳細は、driver.conf(4) のマニュアルページを参照してください。

始める前に

Solaris 暗号化フレームワーク内での使用が想定されているハードウェアがある場合、そのハードウェアはカーネルの SPI に登録されます。暗号化フレームワークでは、ハードウェアドライバが署名されていることが確認されます。特に、ドライバのオブジェクトファイルが Sun が発行する証明書付きで署名されていることが確認されます。

たとえば、Sun Crypto Accelerator 6000 ボード (mca)、UltraSPARC T1 および T2 プロセッサの暗号化アクセラレータ用 ncp ドライバ (ncp)、UltraSPARC T2 プロセッサ用 n2cp ドライバ (n2cp) は、ハードウェアのメカニズムをフレームワークに接続します。

プロバイダの署名については、「Sun 以外のソフトウェアのためのバイナリ署名」を参照してください。

  1. システムで使用可能なハードウェアプロバイダを一覧表示します。


    % cryptoadm list
    … 
    kernel hardware providers:
       ncp/0
  2. チップまたはボードで提供されるメカニズムを一覧表示します。


    % 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
  3. チップまたはボードで使用可能なメカニズムを一覧表示します。


    % cryptoadm list -p provider=ncp/0
    ncp/0: all mechanisms are enabled.

Procedureハードウェアプロバイダのメカニズムと機能を無効にする方法

ハードウェアプロバイダのメカニズムや乱数機能を選択して無効にすることができます。ふたたび有効にする方法については、例 14–25 を参照してください。この例のハードウェア Sun Crypto Accelerator 1000 ボードは、乱数発生関数を提供します。

  1. スーパーユーザーになるか、Crypto Management 権利プロファイルを含む役割を引き受けます。

    Crypto Management 権利プロファイルを含む役割を作成し、作成した役割をユーザーに割り当てる方法については、例 9–7 を参照してください。

  2. 無効にするメカニズムまたは機能を選択します。

    ハードウェアプロバイダを一覧表示します。


    # 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.

例 14–25 ハードウェアプロバイダのメカニズムと機能を有効にする

次の例では、一部のハードウェアの無効になっているメカニズムを選択して有効にします。


# 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.

Procedureすべての暗号化サービスを更新または再起動する方法

デフォルトでは、Solaris 暗号化フレームワークは有効になっています。何らかの理由で kcfd デーモンが失敗したときには、サービス管理機能を使用して暗号化サービスを再起動することができます。詳細は、smf(5) および svcadm(1M) のマニュアルページを参照してください。暗号化サービスの再起動がゾーンに与える影響については、「暗号化サービスとゾーン」を参照してください。

  1. 暗号化サービスの状態を確認します。


    % svcs cryptosvc
     STATE          STIME    FMRI
    offline         Dec_09   svc:/system/cryptosvc:default
  2. スーパーユーザーになるか、同等の役割を引き受けて、暗号化サービスを有効にします。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、「RBAC の構成 (作業マップ)」を参照してください。


    # svcadm enable svc:/system/cryptosvc
    

例 14–26 暗号化サービスを更新する

次の例では、暗号化サービスを大域ゾーンで更新します。その結果、すべての非大域ゾーンのカーネルレベルの暗号化ポリシーも更新されます。


# svcadm refresh system/cryptosvc

第 15 章 Solaris 鍵管理フレームワーク

Solaris 10 8/07 リリースから、鍵管理フレームワーク (KMF) を通じて、公開鍵オブジェクトを管理するためのツールとプログラミングインタフェースが提供されています。公開鍵オブジェクトには、X.509 証明書や公開鍵/非公開鍵ペアが含まれます。これらのオブジェクトの格納形式としては、さまざまなものが使えます。また、KMF では、アプリケーションによる X.509 証明書の使用方法を定義したポリシーを管理するためのツールも提供されます。

公開鍵技術の管理

鍵管理フレームワーク (KMF) は、公開鍵技術 (PKI) を管理するための統一されたアプローチを提供します。Solaris OS には、PKI 技術を利用する異なるアプリケーションがいくつか含まれています。各アプリケーションはそれぞれ独自のプログラミングインタフェース、鍵格納メカニズム、および管理ユーティリティーを提供します。アプリケーションがあるポリシー適用メカニズムを提供する場合、そのメカニズムはそのアプリケーションにしか適用されません。KMF では、アプリケーションは統一された管理ツール群、単一のプログラミングインタフェース群、および単一のポリシー適用メカニズムを使用します。これらのインタフェースを採用したすべてのアプリケーションの PKI ニーズは、これらの機能によって管理されます。

KMF では、次のインタフェースによって公開鍵技術の管理が統一されます。

鍵管理フレームワークのユーティリティー

KMF は、鍵の格納を管理するための手段を提供するとともに、それらの鍵の使用に関する包括的なポリシーを提供します。KMF は、次の 3 つの公開鍵技術のポリシー、鍵、および証明書を管理します。

kmfcfg ツールを使えば、KMF ポリシーエントリの作成、変更、または削除を行えます。KMF は、pktool コマンド経由でキーストアを管理します。詳細については、kmfcfg(1)pktool(1) のマニュアルページ、および次の各節を参照してください。

KMF のポリシー管理

KMF のポリシーはデータベース内に格納されます。このポリシーデータベースは、KMF プログラミングインタフェースを使用するすべてのアプリケーションによって内部的にアクセスされます。このデータベースを使えば、KMF ライブラリによって管理される鍵や証明書の使用に、制約を設けることができます。アプリケーションは、証明書の検証を試みる際に、ポリシーデータベースをチェックします。kmfcfg コマンドはポリシーデータベースを変更します。

KMF のキーストア管理

KMF は、PKCS #11 トークン、NSS、OpenSSL の 3 つの公開鍵技術のキーストアを管理します。pktool コマンドを使えば、これらすべての技術について次のことが行えます。

PKCS #11 および NSS 技術の場合には、pktool コマンドでパスフレーズを生成して PIN を設定することもできます。

pktool ユーティリティーの使用例については、pktool(1) のマニュアルページおよび 「鍵管理フレームワークの使用 (作業マップ)」を参照してください。

鍵管理フレームワークの使用 (作業マップ)

鍵管理フレームワーク (KMF) を使うと公開鍵技術を集中管理できます。

作業 

説明 

参照先 

証明書を作成します。 

PKCS #11、NSS、SSL で使用される証明書を作成します。 

pktool gencert コマンドを使って証明書を作成する方法」

証明書をエクスポートします。  

証明書とそれをサポートする鍵を含むファイルを作成します。このファイルはパスワードで保護できます。 

「証明書と非公開鍵を PKCS #12 形式でエクスポートする方法」

証明書をインポートします。 

別のシステムから取得した証明書をインポートします。 

「証明書をキーストアにインポートする方法」

別のシステムから取得した PKCS #12 形式の証明書をインポートします。 

例 15–2

パスフレーズを生成します。 

PKCS #11 キーストアまたは NSS キーストアにアクセスするためのパスフレーズを生成します。 

pktool setpin コマンドを使ってパスフレーズを生成する方法」

鍵管理フレームワークの使用 (手順)

この節では、パスワード、パスフレーズ、ファイル、キーストア、証明書、CRL などの公開鍵オブジェクトを、pktool コマンドを使って管理する方法について説明します。

Procedurepktool gencert コマンドを使って証明書を作成する方法

この手順では、自己署名付き証明書を作成し、その証明書を PKCS #11 キーストアに格納します。また、この処理の一部として、RSA 公開鍵/非公開鍵ペアも作成されます。非公開鍵は、証明書とともにキーストアに格納されます。

  1. 自己署名付き証明書を生成する。


    % pktool gencert [keystore=keystore] label=label-name \
    subject=subject-DN serial=hex-serial-number
    
    keystore=keystore

    公開鍵オブジェクトのタイプを指定することでキーストアを指定します。指定可能な値は nsspkcs11ssl のいずれかです。このキーワードは省略可能です。

    label=label-name

    発行者が証明書に与える一意の名前です。

    subject=subject-DN

    証明書の識別名です。

    serial=hex-serial-number

    16 進形式のシリアル番号です。証明書の発行者が、0x0102030405 などの番号を選択します。

  2. キーストアの内容を確認します。


    % 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 つしか含まれていません。


例 15–1 pktool を使って自己署名付き証明書を作成する

次の例では、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

Procedure証明書をキーストアにインポートする方法

この手順では、PEM または生の DER を使ってエンコードされた PKI 情報を含むファイルを、キーストアにインポートする方法を説明します。エクスポートの手順については、例 15–4 を参照してください。

  1. 証明書をインポートします。


    % pktool import keystore=keystore infile=infile-name label=label-name
    
  2. 非公開 PKI オブジェクトをインポートする場合、プロンプトが表示されたときにパスワードを入力します。

    1. プロンプトで、ファイルのパスワードを入力します。

      PKCS #12 形式のエクスポートファイルなど、非公開の PKI 情報をインポートする場合、そのファイルはパスワードを必要とします。インポートするファイルの作成者が PKCS #12 パスワードを教えてくれます。


      Enter password to use for accessing the PKCS12 file:Type PKCS #12 password
      
    2. プロンプトで、キーストアのパスワードを入力します。


      Enter pin for Sun Software PKCS#11 softtoken: Type PIN for token
      
  3. キーストアの内容を確認します。


    % 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. ...

例 15–2 PKCS #12 ファイルをキーストアにインポートする

次の例では、サードパーティーから取得した 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


例 15–3 X.509 証明書をキーストアにインポートする

次の例では、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

Procedure証明書と非公開鍵を PKCS #12 形式でエクスポートする方法

PKCS #12 形式のファイルを作成し、非公開鍵とそれに関連付けられた X.509 証明書をほかのシステムにエクスポートすることができます。このファイルへのアクセスはパスワードで保護されます。

  1. エクスポートする証明書を見つけます。


    % 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. ...
  2. 鍵と証明書をエクスポートします。

    pktool list コマンドから得られたキーストアとラベルを使用します。エクスポートファイルのファイル名を指定します。名前に空白が含まれている場合は、名前を二重引用符で囲みます。


    % pktool export keystore=keystore outfile=outfile-name label=label-name
    
  3. エクスポートファイルをパスワードで保護します。

    プロンプトで、キーストアの現在のパスワードを入力します。ここで、エクスポートファイルのパスワードを作成します。ファイルの受信者は、インポート時にこのパスワードを入力する必要があります。


    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
    

    ヒント –

    パスワードはエクスポートファイルとは別に送ってください。パスワードを伝える最良の方法は、電話上など、通常の通信手段以外の手段を使用する方法です。



例 15–4 証明書と非公開鍵を PKCS #12 形式でエクスポートする

次の例では、あるユーザーが、非公開鍵とそれに関連付けられた 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 パスワードを伝えます。


Procedurepktool setpin コマンドを使ってパスフレーズを生成する方法

キーストア内のあるオブジェクトに対して、あるいはキーストアそのものに対して、パスフレーズを生成することができます。このパスフレーズは、オブジェクトやキーストアにアクセスする際に必要となります。キーストア内のオブジェクトに対するパスフレーズの生成例については、例 15–4 を参照してください。

  1. キーストアにアクセスするためのパスフレーズを生成します。


    % pktool setpin keystore=nss|pkcs11 dir=directory
    
  2. プロンプトに答えます。

    キーストアにまだパスワードが設定されていない場合には、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.

    これでキーストアがパスフレーズで保護されます。 パスフレーズを忘れると、キーストア内のオブジェクトにアクセスできなくなります。


例 15–5 キーストアをパスフレーズで保護する

次の例は、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.