ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Solaris のシステム管理 (セキュリティサービス) Oracle Solaris 10 8/11 Information Library (日本語) |
パート II システム、ファイル、およびデバイスのセキュリティー
13. Oracle Solaris の暗号化フレームワーク (概要)
14. Oracle Solaris の暗号化フレームワーク (手順)
Oracle Solaris 暗号化フレームワークによるファイルの保護 (作業マップ)
19. Oracle Solaris Secure Shell の使用 (手順)
この節では、対称鍵を生成する方法、ファイルの整合性のためにチェックサムを作成する方法、およびファイルが傍受されるのを防ぐ方法について説明します。この節のコマンドは、通常のユーザーが実行することができます。開発者は、これらのコマンドを使用するスクリプトを作成することができます。
ファイルを暗号化し、ファイルの MAC を生成するには、鍵が必要です。鍵は、数のランダムプールから生成します。
乱数発生関数がすでにある場合は、それを使用してください。この関数がない場合は、Oracle 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
最小鍵サイズと最大鍵サイズを 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
例 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
アプリケーションによっては、通信の暗号化および復号化に対称鍵が必要です。この手順では、対称鍵を作成して格納します。
乱数発生関数がある場合、この関数を使用して鍵の乱数を作成できます。この手順は乱数発生関数を使用しません。
代わりに、Oracle Solaris の /dev/urandom デバイスを入力として dd コマンドを使用します。dd コマンドは鍵を格納しません。手順については、「dd コマンドを使用して対称鍵を生成する方法」を参照してください。
次のいずれかを実行します。
鍵をファイルに格納する利点は、このファイルから鍵を抽出して、/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 キーストアの利点は、ラベルに基づいて鍵を取得できることです。この方法は、ファイルを暗号化および復号化する鍵の場合に便利です。この方法を使用するには、手順 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 です。
この方法を使用するには、手順 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 です。
鍵を格納した場所に応じて、次のコマンドのいずれかを使用します。
% pktool list keystore=file objtype=key infile=key-fn Found n keys. Key #1 - keytype:location (keylen)
$ 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
ファイルの要約を作成すると、要約の出力を比較することによって、ファイルが改ざんされていないことを確認することができます。要約によって元のファイルが変更されることはありません。
% digest -l md5 sha1 sha256 sha384 sha512
digest コマンドでアルゴリズムを指定します。
% digest -v -a algorithm input-file > digest-listing
次の形式で出力を表示します。
algorithm (input-file) = digest
ファイルの要約の計算に使用するアルゴリズムです。手順 1 の出力のようにアルゴリズムを入力します。
digest コマンドの入力ファイルです。
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
メッセージ認証コード (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 の入力ファイルです。
例 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
ファイルを暗号化しても、元のファイルが削除されたり変更されたりすることはありません。出力ファイルが暗号化されます。
encrypt コマンドの一般的なエラーを解決するには、例のあとの節を参照してください。
2 つの選択肢があります。鍵が生成されるパスフレーズを指定することができます。または鍵を指定することができます。
パスフレーズを指定する場合、指定したパスフレーズを格納するか覚えておく必要があります。パスフレーズをオンラインで格納する場合、そのパスフレーズファイルは自分だけが読み取ることができるようにします。
鍵を指定する場合、それはメカニズムの現在のサイズである必要があります。手順については、「dd コマンドを使用して対称鍵を生成する方法」を参照してください。
encrypt コマンドで、鍵を指定して対称鍵アルゴリズムを使用します。
% encrypt -a algorithm [ -k keyfile ] -i input-file -o output-file
ファイルを暗号化するために使用するアルゴリズムです。encrypt -l コマンドの出力のようにアルゴリズムを入力します。
アルゴリズムで指定された長さの鍵を含むファイルです。アルゴリズムごとの鍵の長さが、ビット単位で encrypt -l コマンドの出力に一覧表示されます。
暗号化する入力ファイルです。このファイルは、コマンドによって変更されることはありません。
入力ファイルと同じ暗号化形式の出力ファイルです。
例 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コマンドに指定した鍵が、使用しているアルゴリズムで許可されないことが示されます。
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 ビットの鍵が必要です。