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

第 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