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

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

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