マニュアルページセク ション 5: 標準、環境、マクロ

印刷ビューの終了

更新: 2014 年 7 月
 
 

pkcs11_tpm(5)

名前

pkcs11_tpm - トラステッドプラットフォームモジュール (TPM) 用 RSA PKCS#11 トークン

形式

/usr/lib/security/pkcs11_tpm.so
/usr/lib/security/64/pkcs11_tpm.so

説明

pkcs11_tpm.so オブジェクトは、Trusted Computing Group のプロトコルを使用して TPM セキュリティーデバイスと通信することで、RSA Security Inc. の PKCS#11 暗号化トークンインタフェース (Cryptoki) v2.20 仕様を実装します。このプロバイダは PKCS#11 仕様を実装し、SUNWtss パッケージの TCG ソフトウェアスタック (TSS) API を使用します。

アプリケーション開発者は、pkcs11_tpm.so に直接リンクするのではなく、libpkcs11.so.1 にリンクするようにしてください。libpkcs11 (3LIB) を参照してください。

実装されている暗号化アルゴリズムは、RSASHA1、および MD5 です。

libpkcs11 (3LIB) のリストに示されている標準の PKCS#11 関数は、次を除きすべて実装されています。

C_EncryptUpdate
C_EncryptFinal
C_DecryptUpdate
C_DecryptFinal
C_DigestEncryptUpdate
C_DecryptDigestUpdate
C_SignEncryptUpdate
C_DecryptVerifyUpdate
C_GetFunctionStatus
C_CancelFunction
C_WaitForSlotEvent
C_GenerateKey
C_DeriveKey

サポートされている RSA PKCS#11 v2.20 メカニズムは次のとおりです。

CKM_RSA_PKCS_KEY_PAIR_GEN
CKM_RSA_PKCS
CKM_RSA_PKCS_OAEP
CKM_RSA_X_509
CKM_MD5_RSA_PKCS
CKM_SHA1_RSA_PKCS
CKM_SHA_1
CKM_SHA_1_HMAC
CKM_SHA_1_HMAC_GENERAL
CKM_MD5
CKM_MD5_HMAC
CKM_MD5_HMAC_GENERAL

ユーザーごとの初期化

pkcs11_tpm プロバイダを使用できるのは、システムに TPM デバイスが存在し、かつ SUNWtss パッケージがインストールされている場合だけです。これらの前提条件が満たされている場合、ユーザーは pktool(1) を使用すると自分専用のプライベートトークンを作成できます。このトークンにより、TPM デバイスを使用した操作を実行でき、TPM によって保護された鍵で自分の非公開データを保護できます。

ユーザーの TPM トークンを準備して初期化するには、次の手順を実行する必要があります。

  1. トークンを初期化します。

  2. SO (セキュリティー責任者) の PIN を設定します。

  3. ユーザーの一意の PIN を設定します。

トークンを初期化するには、 pktool(1) コマンドを次のように使用します。

$ pktool inittoken currlabel=TPM newlabel=tpm/myname
  • デフォルトでは、初期化されていない TPM は TPM という名前で認識されます。ユーザーが自分専用のプライベートトークンを初期化するときに、別の名前 (tpm/joeuser など) に変更することも、TPM のままにする (その場合は newlabel 引数を省略する) こともできます。

  • ユーザーは自分のトークンを初期化する前に、デフォルトの SO PIN を入力する必要があります。デフォルトの SO PIN は 87654321 です。これは上記の手順 2 で変更されています。

トークンを初期化したあとは、SO PIN とユーザー PIN をデフォルト値から変更する必要があります。これらの PIN の値を変更するには、再度 pktool(1) を使用します。

SO PIN の変更は次のように行います。

$ pktool setpin token=tpm/joeuser so

so オプションは、この「setpin」操作が SO PIN の変更であることを示すもので、省略できません。ユーザーはデフォルトの SO PIN (87654321) を入力してから、新しい PIN を入力 (および確認) する必要があります。

SO PIN をデフォルトから変更したあと、ユーザーの一意の PIN もリセットする必要があります。

ユーザーの PIN の変更は次のように行います。

$ pktool setpin token=tmp/joeuser

SO 以外のユーザーのデフォルト PIN は 12345678 です。ユーザーはデフォルトの PIN を入力してから、新しい一意の PIN を入力 (および確認) する必要があります。

pktool setpin 操作または C_Login() 関数と C_SetPIN() 関数に設定する PIN には、長さが 1 から 256 までで、空文字を含まない、任意の文字列を使用できます。

トークンへのアクセス

ユーザーは自分のトークンを初期化したあと、pktool(1) で、あるいは PKCS11 アプリケーションを作成することにより、トークンの使用を開始できます。その際、前述の手順で作成した名前 (前述の例では tpm/joeuser) を使用してトークンを特定します。

たとえば、

$ pktool gencert token=tpm/joeuser -i
$ pktool list token=tpm/joeuser

注意事項

pkcs11_tpm.so により、ファイルシステム固有のトークンオブジェクトの記憶領域にオブジェクトストレージが提供されます。プライベートオブジェクトは秘密鍵による暗号化で保護されています。復号化するには、トークンの秘密鍵を TPM に読み込み、復号化をすべて TPM 内で実行する必要があります。ユーザーの秘密鍵は、ユーザーが個人用の PIN を設定したときに (前述の説明を参照)、TPM によって生成されます。SO の鍵もユーザーの鍵も、TSS 永続的ストレージデータベースに保存され、一意の UUID 値で参照されます。どのユーザートークンにも一意の SO 鍵と一意のユーザー鍵があるため、あるユーザーのトークンの PIN で、同じマシンの別のユーザーのトークンに保存されている非公開データがロック解除されることはありません。

TPM はそれぞれ一意なので、ある TPM で作成されたトークンキーを別の TPM で使用することはできません。pkcs11_tpm.so トークンのデータは、TPM が存在しているシステムですべて管理されます。ほかのシステムに移動することはできません。TPM がリセットされ SRK (ストレージルートキー) が変更された場合、その TPM でそれまでに生成された鍵はすべて無効になります。

pkcs11_tpm.so は、作成されたトークンごとに専用のワークスペースを作成して、管理ファイルを管理します。デフォルトでは、この領域は /var/user/$USERNAME/tpm/ として作成されます。ただし、ユーザーはトークンの初期化や使用を開始する前に PKCS11_TPM_DIR 環境変数を設定することにより、この設定をオーバーライドできます。

戻り値

実装されている各関数の戻り値は、RSA PKCS#11 v2.20 仕様で定義されています。http://www.rsasecurity.com を参照してください。

ファイル

/var/user/$USERNAME/tpm/

ユーザーのデフォルトのトークンオブジェクトストア。

${PKCS11_TPM_DIR}

代替のトークンオブジェクトストア。

属性

属性についての詳細は、マニュアルページの attributes(5) を参照してください。

属性タイプ
属性値
インタフェースの安定性
確実
MT レベル
例外付きで MT-安全 (後述の説明を参照)
標準
PKCS#11 v2.20

「MT-安全」属性の例外については、RSA PKCS#11 v2.20 のセクション 6.6.2 を参照してください。

関連項目

pktool(1), cryptoadm(1M), libpkcs11(3LIB), attributes(5)

TCG ソフトウェアスタック (TSS) 仕様 https://www.trustedcomputinggroup.org/specs/TSS (公開時点のアドレス)

RSA PKCS#11 v2.20 http://www.rsasecurity.com