PKCS #11 密码令牌接口标准 (Cryptoki)

标准编号:PKCS #11 系列 (当前版本 v3.0, 2020年; 主流 v2.4/v2.5)

发布组织:OASIS (原 RSA Laboratories) | 标准技术委员会

摘要:PKCS #11 是公钥密码标准中最广泛使用的令牌接口标准,它为硬件安全模块 (HSM)、智能卡、USB Key 等加密令牌提供了统一的 C 语言 API。通过该 API,应用程序可以独立于具体硬件执行密钥生成、加解密、签名验签、密钥导入导出、随机数生成等操作。它是企业级加密应用、证书颁发机构、SSL/TLS 加速、代码签名等场景中安全硬件调用的实际标准。

核心概念:

主要函数类别:

安全认证等级:PKCS #11 定义了 Level 1 (仅函数接口) 和 Level 2 (多用户安全认证) 以及 Level 3 (多用户且受保护的路径)。

官方资源: OASIS PKCS #11 技术委员会网站 | PKCS #11 参考文档

关联工具: 非对称加密工具 (RSA/ECC) | 对称加密工具 | 哈希摘要工具

PKCS #11 (Cryptoki) 规范详解

PKCS #11 是 RSA Laboratories 定义的加密令牌接口标准,也称 Cryptoki(Cryptographic Token Interface)。它定义了一个 C 语言 API,使应用程序可以通过统一接口访问各种加密设备——智能卡、HSM(硬件安全模块)、USB Key 和 TPM。当前版本 3.0。

核心概念

PKCS #11 的核心概念包括:Slot(槽位)是物理或逻辑的令牌接口;Token 是插入 Slot 中的加密设备;Session 是应用与 Token 之间的会话;Object 是 Token 中存储的密钥、证书等数据对象,分令牌对象(持久化)和会话对象(临时)。Object 有属性集,如 CKA_TOKEN 表示是否持久化、CKA_PRIVATE 表示是否需要登录才能访问。

常用函数

典型调用流程:C_Initialize 初始化库;C_OpenSession 打开会话;C_Login 登录令牌(验证 PIN);C_FindObjects 查找对象;C_EncryptInit + C_Encrypt 做对称加密;C_SignInit + C_Sign 做签名;C_GenerateKeyPair 生成密钥对;C_CloseSession 关闭会话;C_Finalize 清理。私钥对象通常标记为 CKA_PRIVATE=true,意味着必须登录后才能使用。

智能卡应用

PKCS #11 广泛用于智能卡场景:PIV 卡和 CAC 卡通过 PKCS #11 接口提供证书和签名服务;银行 USB Key 通过 PKCS #11 接口供网银客户端调用签名功能;HSM 设备通过 PKCS #11 为 CA 系统提供密钥管理和签名服务。OpenSSL 可以通过引擎模块加载 PKCS #11 库,实现用硬件密钥做 TLS 客户端认证。常见的 PKCS #11 实现包括 OpenSC、SoftHSM 和各厂商的专有驱动。

← 返回规范索引