Oracle® Solaris 11.2 での暗号化と証明書の管理

印刷ビューの終了

更新: 2014 年 9 月
 
 

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

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

乱数発生関数がある場合、この関数を使用して鍵の乱数を作成できます。この手順は乱数発生関数を使用しません。

  1. (オプション) キーストアを使用する場合は、作成します。
  2. 対称鍵として使用する乱数を生成します。

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

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

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

      % pktool genkey keystore=file
      ...genkey keystore=file
      outkey=key-fn
      [ keytype=aes|arcfour|des|3des|generic ]
      [ keylen=key-size (AES, ARCFOUR or GENERIC only)]
      [ print=y|n ]
      outkey=key-fn

      鍵が格納されているファイル名。

      keytype=specific-symmetric-algorithm

      任意の長さの対称鍵の場合、値は generic になります。特定のアルゴリズムとして、aesarcfourdes、または 3des を指定します。

      FIPS 140 承認アルゴリズムの場合は、FIPS に対して検証された鍵のタイプを選択します。Using a FIPS 140 Enabled System in Oracle Solaris 11.2 のFIPS 140 Algorithms in the Cryptographic Frameworkを参照してください。

      keylen=size-in-bits

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

      FIPS 140 承認アルゴリズムの場合は、FIPS に対して検証された鍵の長さを選択します。Using a FIPS 140 Enabled System in Oracle Solaris 11.2 のFIPS 140 Algorithms in the Cryptographic Frameworkを参照してください。

      print=n

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

    • 鍵を生成して PKCS #11 キーストアに格納します。

      PKCS #11 キーストアの利点は、ラベルに基づいて鍵を取得できることです。この方法は、ファイルを暗号化および復号化する鍵の場合に便利です。この方法を使用するには、Step 1 を完了する必要があります。使用法の文は引数を示しています。キーストア引数の前後の角括弧は、キーストア引数が指定されていないときは鍵が PKCS #11 キーストア内に格納されることを示しています。

      $ pktool genkey keystore=pkcs11
      ...genkey [ keystore=pkcs11 ]
      label=key-label
      [ keytype=aes|arcfour|des|3des|generic ]
      [ keylen=key-size (AES, ARCFOUR or GENERIC only)]
      [ token=token[:manuf[:serial]]]
      [ sensitive=y|n ]
      [ extractable=y|n ]
      [ print=y|n ]
      label=key-label

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

      keytype=specific-symmetric-algorithm

      任意の長さの対称鍵の場合、値は generic になります。特定のアルゴリズムとして、aesarcfourdes、または 3des を指定します。

      FIPS 140 承認アルゴリズムの場合は、FIPS に対して検証された鍵のタイプを選択します。Using a FIPS 140 Enabled System in Oracle Solaris 11.2 のFIPS 140 Algorithms in the Cryptographic Frameworkを参照してください。

      keylen=size-in-bits

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

      FIPS 140 承認アルゴリズムの場合は、FIPS に対して検証された鍵の長さを選択します。Using a FIPS 140 Enabled System in Oracle Solaris 11.2 のFIPS 140 Algorithms in the Cryptographic Frameworkを参照してください。

      token=token

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

      sensitive=n

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

      extractable=y

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

      print=n

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

    • 鍵を生成して NSS キーストアに格納します。

      この方法を使用するには、Step 1 を完了する必要があります。使用法の文は引数を示しています。

      $ pktool genkey keystore=nss
      ...genkey keystore=nss
      label=key-label
      [ keytype=aes|arcfour|des|3des|generic ]
      [ keylen=key-size (AES, ARCFOUR or GENERIC only)]
      [ token=token[:manuf[:serial]]]
      [ dir=directory-path ]
      [ prefix=DBprefix ]
      label=key-label

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

      keytype=specific-symmetric-algorithm

      任意の長さの対称鍵の場合、値は generic になります。特定のアルゴリズムとして、aesarcfourdes、または 3des を指定します。

      FIPS 140 承認アルゴリズムの場合は、FIPS に対して検証された鍵のタイプを選択します。Using a FIPS 140 Enabled System in Oracle Solaris 11.2 のFIPS 140 Algorithms in the Cryptographic Frameworkを参照してください。

      keylen=size-in-bits

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

      FIPS 140 承認アルゴリズムの場合は、FIPS に対して検証された鍵の長さを選択します。Using a FIPS 140 Enabled System in Oracle Solaris 11.2 のFIPS 140 Algorithms in the Cryptographic Frameworkを参照してください。

      token=token

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

      dir=directory

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

      prefix=directory

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

  3. (オプション) 鍵が存在することを確認します。

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

    • key-fn ファイル内の鍵を確認します。
      % pktool list keystore=file objtype=key [infile=key-fn]
      Found n keys.
      Key #1 - keytype:location (keylen)
    • PKCS #11 または NSS キーストア内の鍵を確認します。
      For PKCS #11, use the following command:
      $ pktool list keystore=pkcs11 objtype=key
      Enter PIN for keystore:
      Found n keys.
      Key #1 - keytype:location (keylen)

      次に、このコマンドの keystore=pkcs11keystore=nss に置き換えます。

使用例 3-1  pktool コマンドを使用して対称鍵を作成する

次の例では、ユーザーは最初に PKCS #11 キーストアを作成し、次にアプリケーション用の大きな対称鍵を生成します。最後に、ユーザーはその鍵がキーストアに格納されていることを確認します。

PKCS #11 キーストアの初期パスワードは changeme です。NSS キーストアの最初のパスワードは空のパスワードです。

# pktool setpin
Create new passphrase:Type password
Re-enter new passphrase:Retype password
Passphrase changed.
% pktool genkey label=specialappkey keytype=generic keylen=1024
Enter PIN for Sun Software PKCS#11 softtoken  :Type password

% pktool list objtype=key
Enter PIN for Sun Software PKCS#11 softtoken  :Type password
No.      Key Type      Key Len.      Key Label
----------------------------------------------------
Symmetric keys:
1        Symmetric     1024          specialappkey
使用例 3-2  pktool コマンドを使用して FIPS 承認の AES 鍵を作成する

次の例では、AES アルゴリズムの秘密鍵が FIPS 承認のアルゴリズムと鍵の長さを使用して作成されます。鍵は、あとで復号化するためにローカルファイルに格納されます。コマンドは、400 のアクセス権でファイルを保護します。鍵が作成されると、print=y オプションにより、生成された鍵が端末ウィンドウに表示されます。

鍵ファイルを所有するユーザーは、od コマンドを使用して鍵を取得します。

% pktool genkey keystore=file outkey=256bit.file1 keytype=aes keylen=256 print=y
Key Value ="aaa2df1d10f02eaee2595d48964847757a6a49cf86c4339cd5205c24ac8c8873"
% od -x 256bit.file1

0000000 aaa2 df1d 10f0 2eae e259 5d48 9648 4775
0000020 7a6a 49cf 86c4 339c d520 5c24 ac8c 8873
0000040
使用例 3-3  IPsec セキュリティーアソシエーション用の対称鍵を作成する

次の例では、管理者は IPsec SA 用の鍵データを手動で作成し、それらをファイルに格納します。次に、管理者はそれらの鍵を /etc/inet/secret/ipseckeys ファイルにコピーし、元のファイルを破棄します。

最初に、管理者は IPsec ポリシーで要求される鍵を作成して表示します。

# pktool genkey keystore=file outkey=ipencrin1 keytype=generic keylen=192 print=y
Key Value ="294979e512cb8e79370dabecadc3fcbb849e78d2d6bd2049"
# pktool genkey keystore=file outkey=ipencrout1 keytype=generic keylen=192 print=y
Key Value ="9678f80e33406c86e3d1686e50406bd0434819c20d09d204"
# pktool genkey keystore=file outkey=ipspi1 keytype=generic keylen=32 print=y
Key Value ="acbeaa20"
# pktool genkey keystore=file outkey=ipspi2 keytype=generic keylen=32 print=y
Key Value ="19174215"
# pktool genkey keystore=file outkey=ipsha21 keytype=generic keylen=256 print=y
Key Value ="659c20f2d6c3f9570bcee93e96d95e2263aca4eeb3369f72c5c786af4177fe9e"
# pktool genkey keystore=file outkey=ipsha22 keytype=generic keylen=256 print=y
Key Value ="b041975a0e1fce0503665c3966684d731fa3dbb12fcf87b0a837b2da5d82c810"

そのあと、管理者は次の /etc/inet/secret/ipseckeys ファイルを作成します。

##   SPI values require a leading 0x.
##   Backslashes indicate command continuation.
##
## for outbound packets on this system
add esp spi 0xacbeaa20 \
src 192.168.1.1 dst 192.168.2.1 \
encr_alg aes auth_alg sha256  \
encrkey  294979e512cb8e79370dabecadc3fcbb849e78d2d6bd2049 \
authkey  659c20f2d6c3f9570bcee93e96d95e2263aca4eeb3369f72c5c786af4177fe9e
##
## for inbound packets
add esp spi 0x19174215 \
src 192.168.2.1 dst 192.168.1.1 \
encr_alg aes auth_alg sha256  \
encrkey 9678f80e33406c86e3d1686e50406bd0434819c20d09d204 \
authkey b041975a0e1fce0503665c3966684d731fa3dbb12fcf87b0a837b2da5d82c810

ipseckeys ファイルの構文が有効であることを確認したあと、管理者は元の鍵ファイルを破棄します。

# ipseckey -c /etc/inet/secret/ipseckeys
# rm ipencrin1 ipencrout1 ipspi1 ipspi2 ipsha21 ipsha22

管理者は、ssh コマンドや別のセキュアなメカニズムを使用して、ipseckeys ファイルを通信先のシステムにコピーします。通信先のシステムでは、それらの保護は取り消されます。ipseckeys ファイルの最初のエントリによってインバウンドパケットが保護され、2 番目のエントリによってアウトバウンドパケットが保護されます。通信先のシステムでは鍵は生成されません。

次のステップ

鍵を使用してファイルのメッセージ認証コード (MAC) の作成を続行するには、ファイルの MAC を計算する方法を参照してください。