手册页部分 5: 标准、环境和宏

退出打印视图

更新时间: 2014 年 7 月
 
 

pkcs11_tpm(5)

名称

pkcs11_tpm - 可信平台模块 (Trusted Platform Modules, TPM) 的 RSA PKCS#11 令牌

用法概要

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

描述

pkcs11_tpm.so 对象使用可信计算组协议与 TPM 安全设备对话,从而实现 RSA Security Inc. PKCS#11 加密令牌接口 (Cryptographic Token Interface, Cryptoki) v2.20 规范。此提供器实现 PKCS#11 规范并在 SUNWtss 软件包中使用 TCG 软件栈 (TCG Software Stack, TSS) API。

应用程序开发者应链接到 libpkcs11.so.1,而不是直接链接到 pkcs11_tpm.so。请参见 libpkcs11(3LIB)

实现了以下加密算法:RSASHA1MD5

除以下函数之外,实现了 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(security officer,安全官) PIN(Personal Identification Number,个人识别码)。

  3. 设置用户的唯一 PIN。

令牌初始化是使用 pktool(1) 命令执行的,如下所示:

$ pktool inittoken currlabel=TPM newlabel=tpm/myname
  • 缺省情况下,未初始化的 TPM 按名称 TPM 识别。当用户初始化自己的专用令牌时,可以将其重命名为某一其他名称(例如,tpm/joeuser)或保留为 TPM(在这种情况下,将省略 newlabel 参数)。

  • 用户必须提供缺省的 SO PIN 才能初始化其令牌。缺省 SO PIN 为 87654321。在上述步骤 2 中更改该 PIN。

在初始化令牌之后,必须更改 SO 和用户 PIN 的缺省值。同样,可使用 pktool(1) 更改这些 PIN 值。

更改 SO PIN:

$ pktool setpin token=tpm/joeuser so

so 选项指示此 "setpin" 操作将更改 SO PIN,因此 SO PIN 必须存在。随后,用户必须输入缺省的 SO PIN (87654321) 并输入(和确认)新的 PIN。

在重置了 SO PIN 的缺省值后,还必须更改用户的唯一 PIN。

更改用户的 PIN:

$ pktool setpin token=tmp/joeuser

非 SO 用户的缺省 PIN 是 12345678。用户必须输入缺省 PIN 并输入(和确认)新的唯一 PIN。

pktool setpin 操作提供的 PIN 或通过调用 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 中执行解密的方式进行解密。用户的专用密钥由 TPM 在用户设置其个人 PIN(请参见上文)时生成。SO 和用户的密钥都存储在 TSS 持久性存储数据库中并由唯一的 UUID 值引用。所有用户令牌都有唯一的 SO 密钥和唯一的用户密钥,因此一个用户令牌的 PIN 无法解锁同一计算机上其他用户令牌的专用数据。

每个 TPM 都是唯一的,在一个 TPM 上创建的令牌密钥不能用于其他 TPM。pkcs11_tpm.so 令牌数据完全由 TPM 所在的系统进行管理并且不能移到其他系统上。如果 TPM 重置且 SRK(Storage Root Key,存储库根密钥)发生更改,则以前为该 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)

属性类型
属性值
接口稳定性
Committed(已确定)
MT 级别
MT-Safe with Exceptions(多线程安全,但存在异常)(请参见下文)
标准
PKCS#11 v2.20

多线程安全属性的异常记录在 RSA PKCS#11 v2.20 的第 6.6.2 节中。

另请参见

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

TCG 软件栈 (TCG Software Stack, TSS) 规范 https://www.trustedcomputinggroup.org/specs/TSS(截至出版日期)

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