Go to main content

マニュアルページ セクション 7: 標準、環境、マクロ、文字セット、その他

印刷ビューの終了

更新: 2022年7月27日
 
 

pkcs11_tpm(7)

名前

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

形式

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

説明

pkcs11_tpm.so オブジェクトは、Trusted Computing Group のプロトコルを使用して TPM セキュリティーデバイスと通信することによって、OASIS PKCS#11 暗号化トークンインタフェース (Cryptoki) v2.40 仕様を実装します。このプロバイダは PKCS#11 仕様を実装し、pkg:/library/security/trousers パッケージの 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

次の OASIS PKCS#11 v2.40 メカニズムがサポートされています。

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 デバイスが存在し、かつ pkg:/library/security/trousers パッケージがインストールされ、svc:/application/security/tcsd サービスが有効になっている場合のみです。また、システム管理者は tpmadm(8) を使用して TPM の所有権を取得し、それを暗号化フレームワーク PKCS#11 プロバイダとして有効にする必要があります。

# pkg install pkcs11_tpm
# svcadm enable svc:/application/security/tcsd
# tpmadm init
Enter TPM Owner PIN:
Confirm TPM Owner PIN:
# cryptoadm install provider='/usr/lib/security/$ISA/pkcs11_tpm.so'

これらの前提条件が満たされている場合、ユーザーは 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 usertype=so

The usertype=so option indicates that this “setpin” operation is to change the SO PIN and must be present.ユーザーはデフォルトの 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 環境変数を設定することにより、この設定をオーバーライドできます。

戻り値

実装されている各関数の戻り値は、OASIS PKCS#11 v2.40 仕様で定義および一覧表示されています。See https://www.oasis-open.org/committees/pkcs11/.

ファイル

/var/user/$USERNAME/tpm/

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

${PKCS11_TPM_DIR}

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

属性

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

属性タイプ
属性値
使用条件
system/library/security/pkcs11_tpm
インタフェースの安定性
確実
MT レベル
例外付きで MT-安全。OASIS PKCS#11 v2.40 の使用法に関するガイドのセクション 1.9.3 を参照してください。
標準
PKCS#11 v2.40

関連項目

pktool(1), libpkcs11(3LIB), attributes(7), cryptoadm(8)

TCG TPM Software Stack (TSS) Specifications

https://trustedcomputinggroup.org/work-groups/software-stack/

OASIS PKCS#11 v2.40 specification

https://www.oasis-open.org/committees/pkcs11/