跳过导航链接 | |
退出打印视图 | |
手册页第 5 部分:标准、环境和宏 Oracle Solaris 11.1 Information Library (简体中文) |
- 可信平台模块 (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)。
实现了以下加密算法:RSA、SHA1 和 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 令牌,必须执行以下步骤:
初始化令牌。
设置 SO(security officer,安全官) PIN(Personal Identification Number,个人识别码)。
设置用户的唯一 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。
用户的缺省令牌对象存储。
备用令牌对象存储。
有关下列属性的说明,请参见 attributes(5):
|
多线程安全属性的异常记录在 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