pkcs密码中间件位于上层应用和底层安全设备之间,应用基于 PKCS#11 标准接口开发各类应用程序。主要包括2个库
- 主API库: 提供给应用的PKCS11接口。
- tokenDLL库:由主 API 库调用,完成从上向下到指定设备的套接。
- 安全密码设备:安全服务资源和实施的载体,完成具体安全功能支撑。
表 pkcs11函数接口
种类 | 函数 | 描述 |
通用l | C_Initialize | 初始化 Cryptoki |
目的函数 | C_Finalize | 清除各种Cryptoki相关资源 |
| C_GetInfo | 获得关于Cryptoki的通用信息 |
| C_GetFunctionList | 获得Cryptoki 库函数的进入点 |
槽和令牌 | C_GetSlotList | 获得系统中槽的名单 |
管理 | C_GetSlotInfo | 获得关于特殊槽的信息 |
函数 | C_GetTokenInfo | 获得关于特殊令牌的信息 |
| C_WaitForSlotEvent | 等待槽事件(令牌插入,转移等) 的发生 |
| C_GetMechanismList | 获得由令牌支持的机制的名单 |
| C_GetMechanismInfo | 获得关于特殊机制的信息 |
| C_InitToken | 初始化一个令牌 |
| C_InitPIN | 初始化普通用户的 PIN |
| C_SetPIN | 改变现在用户的PIN |
会话管理函数 | C_OpenSession | 打开一个应用程序和特殊令牌之间的连接或安装一个应用程序呼叫返回令牌插入 |
| C_CloseSession | 关闭一个会话 |
| C_CloseAllSessions | 用令牌关闭所有的会话 |
| C_GetSessionInfo | 获得关于会话的信息 |
| C_GetOperationState | 获得会话的加密操作状态 |
| C_SetOperationState | 设置会话的加密操作状态 |
| C_Login | 注册一个令牌 |
| C_Logout | 从一个令牌注销 |
对象管理函数 | C_CreateObject | 建立一个对象 |
| C_CopyObject | 建立一个对象的拷贝 |
| C_DestroyObject | 销毁一个对象 |
| C_GetObjectSize | 获取字节中一个对象的大小 |
| C_GetAttributeValue | 获取一个对象的属性值 |
| C_SetAttributeValue | 改变一个对象的属性值 |
| C_FindObjectsInit | 初始化一个对象的搜索操作 |
| C_FindObjects | 继续一个对象搜索操作 |
| C_FindObjectsFinal | 完成一个对象搜索操作 |
加密 | C_EncryptInit | 初始化一个加密操作 |
函数 | C_Encrypt | 加密单部分数据 |
| C_EncryptUpdate | 继续一个多部分加密操作 |
| C_EncryptFinal | 完成一个多部分加密操作 |
解密 | C_DecryptInit | 初始化一个解密操作 |
函数 | C_Decrypt | 解密单部分加密数据 |
| C_DecryptUpdate | 继续一个多部分解密操作 |
| C_DecryptFinal | 完成一个多部分解密操作 |
消息 | C_DigestInit | 初始化一个消息摘要操作 |
解密 | C_Digest | 摘要单部分数据 |
函数 | C_DigestUpdate | 继续一个多部分摘要操作 |
| C_DigestKey | 摘要一个密钥 |
| C_DigestFinal | 完成一个多部分摘要操作 |
签名 | C_SignInit | 初始化一个签名操作 |
和MACing | C_Sign | 签名单部分数据 |
函数 | C_SignUpdate | 继续一个多部分签名操作 |
| C_SignFinal | 完成一个多部分签名操作 |
| C_SignRecoverInit | 初始化一个签名操作,在操作中数据能从签名中恢复 |
| C_SignRecover | 签名单部分数据,在操作中数据能从签名中恢复 |
鉴定函数 | C_VerifyInit | 初始化一个鉴定操作 |
签名 | C_Verify | 在单部分数据上鉴定一个签名 |
和 MACs | C_VerifyUpdate | 继续一个多部分鉴定操作 |
| C_VerifyFinal | 完成一个多部分鉴定操作 |
| C_VerifyRecoverInit | 初始化一个鉴定操作,在操作中数据能从签名中恢复 |
| C_VerifyRecover | 在单部分数据上鉴定一个签名,在操作中数据能从签名中恢复 |
双效加密 | C_DigestEncryptUpdate | 继续类似的多部分摘要和加密操作 |
函数 | C_DecryptDigestUpdate | 继续类似的多部分解密和摘要操作 |
| C_SignEncryptUpdate | 继续类似的多部分签名和加密操作 |
| C_DecryptVerifyUpdate | 继续类似的多部分解密和鉴定操作 |
密钥 | C_GenerateKey | 产生一个保密密钥 |
管理 | C_GenerateKeyPair | 产生一个公共/私钥对 |
函数 | C_WrapKey | 加密一个密钥 |
| C_UnwrapKey | 解密一个密钥 |
| C_DeriveKey | 从基础密钥派生一个密钥 |
随机数字生成 | C_SeedRandom | 把一个附加种子材料加入随机数字生成器 |
函数 | C_GenerateRandom | 生成随机数据 |
并行功能管理函数 | C_GetFunctionStatus | 经常返回 CKR_FUNCTION_NOT_PARALLEL的遗产函数 |
| C_CancelFunction | 经常返回 CKR_FUNCTION_NOT_PARALLEL的遗产函数 |
呼叫返回函数 |
| Cryptoki中应用程序提供的处理通知的函数 |
|
| 导入对象 |
|
| 删除对象 |
|
| 导出对象 |
C_Initialize: 初始化所有slot,通过配置文件读取所有的tokendll,并初始化各个token,初始化信息包括填充tokeninfo,slotinfo,flag等,将以上slotData信息添加到SlotTtable数组中,slotID按顺序依次以1,2,3,4....表示。
C_GetSlotList: 获取slot count和count个slotID。
C_OpenSession: 根据输入slotID打开一个会话,并获取各个token的所有对象属性数据;
在打开会话的基础上调用以下接口:
C_CreateObject:创建对象。根据属性模板创建一个秘钥或证书对象,返回对象句柄,该对象被添加到会话的对象列表中;
C_EncryptInit: 加密初始化操作。传入当前会话句柄和秘钥句柄;
C_Encrypt: 传入会话句柄和待加密数据;
C_GenerateKeyPair:传入公钥和私钥模板,返回公私钥句柄;
C_DestroyObject:销毁对象。从会话的对象列表中移除该对象;
C_CloseSession:关闭会话
C_Finalize: 清除cryptki相关资源,即清除slotTable中特定slotID的slotData数据,和C_Initialize对应。