cryptoadm コマンドの使い方 [SCF]
Solaris Cryptographic Framework (SCF) に関して簡単に説明する。
SCFはSolaris10の新機能で、その名の通り、暗号化のフレームワークだ。
単に暗号化サービスといってもユーザーコマンドや上位アプリケーションが利用するアプリケーションレベルの暗号化サービスと、IPSecや
Kerberosなどに提供するカーネルレベルの暗号化サービスがある。
SCFではアプリケーションレベルの暗号化サービスとカーネルレベルの暗号化サービスを分け、それぞれ独立して制御することを可能にしている。
ここではその制御に使用する cryptoadmコマンドの使い方について紹介する。
【検証環境】
#
cat /etc/release
Solaris 10 3/05 s10_74L2a SPARC
Copyright
2005 Sun Microsystems, Inc. All Rights Reserved.
Use is subject to license terms.
Assembled 22 January 2005
【cryptoadmコマンドの使い方】
次の例のように実行するとユーザーレベルのプロバイダ、カーネルソフトウェアプロバイダ、カーネルハードウェアプロバイダなどが表示できる。カーネルハー
ドウェアプロバイダは
Sun
Crypto Accelerator などを増設しないと表示されない。
#
cryptoadm list
ユーザーレベルプロバイダ:
Provider: /usr/lib/security/$ISA/pkcs11_kernel.so
Provider: /usr/lib/security/$ISA/pkcs11_softtoken.so
カーネルソフトウェアプロバイダ:
des
aes
arcfour
blowfish
sha1
md5
rsa
swrand
カーネルハードウェアプロバイダ:
また、以下のように実行するとそれぞれのプロバイダが提供する暗号化メカニズムを表示することができる。
#
cryptoadm list -m
ユーザーレベルプロバイダ:
=====================
Provider: /usr/lib/security/$ISA/pkcs11_kernel.so
スロットが表示されませんでした。
Provider: /usr/lib/security/$ISA/pkcs11_softtoken.so
メカニズム:
CKM_DES_CBC
CKM_DES_CBC_PAD
CKM_DES_ECB
CKM_DES_KEY_GEN
CKM_DES_MAC_GENERAL
CKM_DES_MAC
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
CKM_SHA_1
CKM_SHA_1_HMAC
CKM_SHA_1_HMAC_GENERAL
CKM_SSL3_SHA1_MAC
CKM_MD5
CKM_MD5_HMAC
CKM_MD5_HMAC_GENERAL
CKM_SSL3_MD5_MAC
CKM_RC4
CKM_RC4_KEY_GEN
CKM_DSA
CKM_DSA_SHA1
CKM_DSA_KEY_PAIR_GEN
CKM_RSA_PKCS
CKM_RSA_PKCS_KEY_PAIR_GEN
CKM_RSA_X_509
CKM_MD5_RSA_PKCS
CKM_SHA1_RSA_PKCS
CKM_DH_PKCS_KEY_PAIR_GEN
CKM_DH_PKCS_DERIVE
CKM_MD5_KEY_DERIVATION
CKM_SHA1_KEY_DERIVATION
CKM_PBE_SHA1_RC4_128
CKM_PKCS5_PBKD2
CKM_SSL3_PRE_MASTER_KEY_GEN
CKM_TLS_PRE_MASTER_KEY_GEN
CKM_SSL3_MASTER_KEY_DERIVE
CKM_TLS_MASTER_KEY_DERIVE
CKM_SSL3_MASTER_KEY_DERIVE_DH
CKM_TLS_MASTER_KEY_DERIVE_DH
CKM_SSL3_KEY_AND_MAC_DERIVE
CKM_TLS_KEY_AND_MAC_DERIVE
カーネルソフトウェアプロバイダ:
==========================
des: CKM_DES_ECB,CKM_DES_CBC,CKM_DES3_ECB,CKM_DES3_CBC
aes: CKM_AES_ECB,CKM_AES_CBC
arcfour: CKM_RC4
blowfish: CKM_BF_ECB,CKM_BF_CBC
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.
カーネルハードウェアプロバイダ:
==========================
また、以下のようにプロバイダ指定をすることで個別に確認することもできる。
#
cryptoadm list -p provider=des
des: all mechanisms are enable.
指定のプロバイダから特定のメカニズムを無効にするには以下のように実行する。
上記と同じコマンドで確認すると、あるメカニズムが無効になっていることが確認できる。
#
cryptoadm disable provider=des
mechanism=CKM_DES_ECB
#
cryptoadm list -p provider=des
des: all mechanisms are enabled, except CKM_DES_ECB.
ちなみに、上記コマンドで /etc/crypto/kcf.conf が更新される。
#
cat /etc/crypto/kcf.conf
...
des:supportedlist=CKM_DES_CBC,CKM_DES_ECB,CKM_DES3_CBC,CKM_DES3_ECB;
disabledlist=CKM_DES_ECB
aes:supportedlist=CKM_AES_ECB,CKM_AES_CBC
arcfour:supportedlist=CKM_RC4
blowfish:supportedlist=CKM_BF_ECB,CKM_BF_CBC
sha1:supportedlist=CKM_SHA_1,CKM_SHA_1_HMAC_GENERAL,CKM_SHA_1_HMAC
md5:supportedlist=CKM_MD5,CKM_MD5_HMAC_GENERAL,CKM_MD5_HMAC
rsa:supportedlist=CKM_RSA_PKCS,CKM_RSA_X_509,CKM_MD5_RSA_PKCS,
CKM_SHA1_RSA_PKCS
swrand:supportedlist=random
...
また、SCFはsvc:/system/cryptosvc:default サービスによって提供される。
SCFサービスを提供するデーモンは以下のようにkcfd ということがわかる。
#
svcs -p cryptosvc
STATE
STIME FMRI
online 18:11:57
svc:/system/cryptosvc:default
18:11:57 87 kcfd
アプリケーションレベルとカーネルレベルのプロバイダの違いを理解するために
カーネルレベルのプロバイダから des のメカニズムをすべて無効にしてみる。
#
cryptoadm disable provider=des
mechanism=all
#
cryptoadm list -p provider=des
des: all mechanisms are enabled, except
CKM_DES_ECB,CKM_DES_CBC, CKM_DES3_ECB, CKM_DES3_CBC.
以下は、ユーザーが使用する encrypt コマンドで鍵のサイズを確認している。
#
encrypt -l
アルゴリズム 鍵サイズ: 最小 最大 (ビット)
------------------------------------------
aes
128 128
arcfour
8 128
des
64 64
3des
192 192
下記のコマンドで64ビット(8バイト)の鍵を作成している。
#
dd if=/dev/urandom
of=/var/tmp/des.key bs=8 count=1
書き込まれたレコード数 1+0
読み出されたレコード数 1+0
#
ls -l /var/tmp
合計 2
-rw-r--r-- 1 root
root
8 5月 25日 19:13 des.key
この鍵を使って以下のように/etc/inet/hostsファイルを暗号化している。
#
encrypt -a des -k /var/tmp/des.key
-i /etc/inet/hosts -o /var/tmp/hosts.des
#
file /var/tmp/hosts.des
/var/tmp/hosts.des: データ
つまり、カーネルソフトウェアプロバイダの des を無効にしてもアプリケーションレベルには無関係であることがわかる。
次に以下のように設定を元に戻して、ユーザーレベルプロバイダから des のメカニズムを無効にしてみる。
#
cryptoadm enable provider=des
mechanism=all
#
cryptoadm list -p provider=des
des: all mechanisms are enabled.
まず、次のようにユーザーレベルプロバイダの pkcs11_softtoken.so からDESのメカニズムを全て取得する。
#
cryptoadm list -m
provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so | grep _DES_
CKM_DES_CBC
CKM_DES_CBC_PAD
CKM_DES_ECB
CKM_DES_KEY_GEN
CKM_DES_MAC_GENERAL
CKM_DES_MAC
そして以前と同様に、プロバイダから指定したメカニズムを無効にする。(1行で全部書く)
確認すると無効になっていることがわかる。
#
cryptoadm disable
provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so
mechanism=CKM_DES_CBC, CKM_DES_CBC_PAD, CKM_DES_ECB, CKM_DES_KEY_GEN,
CKM_DES_MAC_GENERAL, CKM_DES_MAC
#
cryptoadm list -p
provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so
/usr/lib/security/$ISA/pkcs11_softtoken.so: すべてのメカニズムが有効です, except
CKM_DES_MAC,CKM_DES_MAC_GENERAL, CKM_DES_KEY_GEN, CKM_DES_ECB,
CKM_DES_CBC_PAD, CKM_DES_CBC.
ランダムが有効になっています。
このような状況で先ほどと同様に encrypt コマンドを実行してみると、以下のように拒否される。
#
encrypt -a des -k /var/tmp/des.key
-i /etc/inet/hosts -o /var/tmp/hosts.des
encrypt: このアルゴリズム用の暗号化プロバイダが見つかりません -- des
ちなみにユーザーレベルプロバイダの変更情報は /etc/crypto/pkcs11.conf ファイルに格納される。
#
cat pkcs11.conf
...
/usr/lib/security/$ISA/pkcs11_kernel.so
/usr/lib/security/$ISA/pkcs11_softtoken.so:disabledlist=0x00000123,
0x00000124, 0x00000120, 0x00000121, 0x00000125, 0x00000122
...
cryptoadmのマニュアルを見れば プロバイダーのアンインストールなども載っているので参考にすると良い。
Solaris系技術トレーニング一覧