pkcs11_softtoken - 软件 OASIS PKCS#11 的软令牌
/usr/lib/security/pkcs11_softtoken.so /usr/lib/security/64/pkcs11_softtoken.so
pkcs11_softtoken.so 对象在软件中实现 OASIS PKCS#11 加密令牌接口 (Cryptographic Token Interface, Cryptoki) v2.40 规范。令牌对象的持久性存储由此 PKCS#11 实现提供。
pkcs11_softtoken 提供者是 Oracle Solaris 的必需部分,不得使用 cryptoadm(8) 禁用。
某些加密算法可能采用硬件加速。管理员可以运行以下命令来确定适用于其系统的此列表,并在输出中查看 HW 列:
# cryptoadm list -vm provider='/usr/lib/security/$ISA/pkcs11_softtoken.so'
对于开发者,在 CK_MECHANISM_INFO 结构中针对这些采用硬件加速的 PKCS#11 机制设置 CKF_HW 标志。
应用程序开发者应链接到 libpkcs11.so 而不是直接链接到 pkcs11_softtoken.so。请参见 libpkcs11(3LIB)。
实现了以下加密算法:DES、3DES、AES、Blowfish、RC4、MD5、SHA1、SHA224、SHA256、SHA384、SHA512、RSA、DSA、DH、ECC 和 Camellia。请注意,RC4 只能用于解密。
除以下函数之外,实现了 libpkcs11(3LIB) 中列出的所有标准 PKCS#11 函数:
C_GetObjectSize C_InitPIN C_WaitForSlotEvent
对这些函数的调用将返回 CKR_FUNCTION_NOT_SUPPORTED。
支持以下 OASIS PKCS#11 v2.40 机制:
CKM_RSA_PKCS_KEY_PAIR_GEN CKM_RSA_PKCS CKM_RSA_X_509 CKM_DSA_KEY_PAIR_GEN CKM_DSA CKM_DSA_SHA1 CKM_DH_PKCS_KEY_PAIR_GEN CKM_DH_PKCS_DERIVE CKM_EC_KEY_PAIR_GEN CKM_ECDSA CKM_ECDSA_SHA1 CKM_ECDH1_DERIVE CKM_DES_KEY_GEN CKM_DES_ECB CKM_DES_CBC CKM_DES_CBC_PAD CKM_DES3_KEY_GEN CKM_DES3_ECB CKM_DES3_CBC CKM_DES3_CBC_PAD CKM_AES_KEY_GEN CKM_AES_ECB CKM_AES_CBC CKM_AES_CBC_PAD CKM_AES_CTR CKM_AES_XCBC_MAC CKM_AES_XCBC_MAC_96 CKM_AES_GMAC CKM_AES_GCM CKM_AES_CCM CKM_AES_CFB128 CKM_BLOWFISH_KEY_GEN CKM_BLOWFISH_CBC CKM_CAMELLIA_KEY_GEN CKM_CAMELLIA_ECB CKM_CAMELLIA_CBC CKM_RC4_KEY_GEN CKM_RC4 (usable for decryption only) CKM_MD5_RSA_PKCS CKM_SHA1_RSA_PKCS CKM_SHA224_RSA_PKCS CKM_SHA256_RSA_PKCS CKM_SHA384_RSA_PKCS CKM_SHA512_RSA_PKCS CKM_MD5 CKM_SHA_1 CKM_SHA224 CKM_SHA256 CKM_SHA384 CKM_SHA512 CKM_SHA512_224 CKM_SHA512_256 CKM_SHA512_T CKM_MD5_HMAC CKM_MD5_HMAC_GENERAL CKM_SHA_1_HMAC CKM_SHA_1_HMAC_GENERAL CKM_SHA224_HMAC CKM_SHA256_HMAC CKM_SHA224_HMAC_GENERAL CKM_SHA512_224_HMAC_GENERAL CKM_SHA512_256_HMAC_GENERAL CKM_SHA512_T_HMAC_GENERAL CKM_SHA512_224_HMAC CKM_SHA512_256_HMAC CKM_SHA512_T_HMAC CKM_SHA256_HMAC_GENERAL CKM_SHA384_HMAC CKM_SHA384_HMAC_GENERAL CKM_MD5_KEY_DERIVATION CKM_SHA1_KEY_DERIVATION CKM_SHA224_KEY_DERIVATION CKM_SHA256_KEY_DERIVATION CKM_SHA384_KEY_DERIVATION CKM_SHA512_KEY_DERIVATION CKM_SHA512_224_KEY_DERIVATION CKM_SHA512_256_KEY_DERIVATION CKM_SHA512_T_KEY_DERIVATION CKM_SSL3_PRE_MASTER_KEY_GEN CKM_SSL3_MASTER_KEY_DERIVE CKM_SSL3_KEY_AND_MAC_DERIVE CKM_SSL3_MASTER_KEY_DERIVE_DH CKM_TLS_PRE_MASTER_KEY_GEN CKM_TLS_MASTER_KEY_DERIVE CKM_TLS_KEY_AND_MAC_DERIVE CKM_TLS_MASTER_KEY_DERIVE_DH CKM_TLS12_MASTER_KEY_DERIVE CKM_TLS12_MASTER_KEY_DERIVE_DH CKM_TLS12_KEY_AND_MAC_DERIVE CKM_TLS12_KEY_SAFE_DERIVE CKM_TLS_KDF CKM_TLS_MAC
以下每种类型的密钥对象都具有令牌特定的某些属性,缺省情况下,这些属性将因创建对象、生成密钥/密钥对以及派生密钥而设置为 true。
CKA_ENCRYPT、CKA_VERIFY、CKA_VERIFY_RECOVER
CKA_DECRYPT、CKA_SIGN、CKA_SIGN_RECOVER、CKA_EXTRACTABLE
CKA_ENCRYPT、CKA_DECRYPT、CKA_SIGN、CKA_VERIFY、CKA_EXTRACTABLE
支持以下证书对象:
对于 CKC_X_509 证书对象,支持以下属性:CKA_SUBJECT、CKA_VALUE、CKA_LABEL、CKA_ID、CKA_ISSUER、CKA_SERIAL_NUMBER 和 CKA_CERTIFICATE_TYPE。
对于 CKC_X_509_ATTR_CERT 证书对象,支持以下属性:CKA_OWNER、CKA_VALUE、CKA_LABEL、CKA_SERIAL_NUMBER、CKA_AC_ISSUER、CKA_ATTR_TYPES 和 CKA_CERTIFICATE_TYPE。
在 C_FindObjectsInit 中执行匹配模板的对象搜索操作。匹配的对象将进行缓存以供后续 C_FindObjects 操作使用。
pkcs11_softtoken.so 对象提供了一个基于文件系统的持久性令牌对象存储,用来存储令牌对象。令牌对象存储的缺省位置是 /var/user/$USERNAME/pkcs11_softtoken。用户可以使用 ${SOFTTOKEN_DIR} 环境变量覆盖该缺省位置。
如果令牌对象存储从未经过初始化,C_Login() 函数可能会返回 CKR_OK,但用户无法创建、生成、派生或查找任何专用令牌对象并会收到 CKR_PIN_EXPIRED。
用户应该通过新口令短语或现有口令短语使用 pktool inittoken 命令,分别初始化或重新初始化令牌对象存储。可以设置或更改用户定义的 softtoken 令牌标签。更重要的是,令牌对象存储内部的所有对象将被销毁。然后,用户仅需使用 pktool setpin 命令即可更改令牌对象存储的口令短语。
在使用 pktool setpin 命令所设置的新口令短语登录到对象存储后,用户即可在此新创建的对象存储中创建和存储专用令牌对象。在 setpin 初始化令牌对象存储之前,允许使用 C_Login() 函数,但用户创建、生成、派生或查找任何专用令牌对象的所有尝试都会失败并会显示 CKR_PIN_EXPIRED 错误。
为 C_Login() 和 C_SetPIN() 函数提供的 PIN 可以是长度介于 1 到 256 之间且不带嵌入空字符的任何字符串。
在 OASIS PKCS#11 v2.40 规范中定义并列出了其中每个已实现函数的返回值。请参见 http://www.oasis-open.org
用户的缺省令牌对象存储
令牌对象存储的备用位置
有关以下属性的说明,请参见 attributes(7):
|
pktool(1)、cryptoadm(8)、libpkcs11(3LIB)、attributes(7)
OASIS PKCS#11 v2.40 http://www.oasis-open.org