网站首页 > 技术教程 正文
KCS#11是使用非常普遍的密码设备接口,在实际应用中,国密的密码设备应用接口规范GMT0018与之作用相同,在技术体系架构中处于类似的位置。
在密码产品的开发中,按照PKCS#11或者GMT0018接口规范提供相应的接口封装,应用程序无需改动或者微小改动就可以更换底层密码设备。
PKCS#11的标准内容比较多,v2-20版本有400页,相应的,PKCS#11的标准解读,将按照概念及常用接口、角色、会话、对象、机制分别进行,最后介绍应用的调用流程,串起各个概念和接口。
此为第四篇,介绍Cryptoki库如何工作,作为此系列的完结篇。机制的部分v2-20版本定义的机制超过200种,还需要跟不同的接口形成对应关系,需要的话直接查阅标准就好了。
一、部分常用接口与Cryptoki模型的映射映射关系
在Cryptoki模型中,应用通过集成Cryptoki库来调用密码设备的功能。
Cryptoki库通过slot和token来映射物理密码设备。
Session可以视为在Application和token之间的一个逻辑连接,通过Function访问object和mechanism完成密码相关的功能。
二、Cryptoki接口工作过程
下图展示了一些常用的Cryptoki接口函数的调用过程。在标准文档的示例中,也有不同接口调用流程的示例,后面或稍微展开做一些解释。
1、C_GetFunctionList 获得一个指向 Cryptoki 库的函数指针表的指针。 所获得的指针可以指入 Cryptoki 库所拥有的存储器,在任何情况下,都不要写入该存储器。C_GetFunctionList 是Cryptoki库初始化之前应用可能会调用的唯一的函数。这样可使应用方便、快速地使用共享 Cryptoki 库和同时使用多个Cryptoki 库。
2、C_Initialize初始化Cryptoki库。C_Initialize应当是一个应用所调用的第一个Cryptoki调用。如果几个应用或进程同时使用Cryptoki,则每个应用应当调用C_Initialize,每次调用C_Finalize前,应调用一次C_Initialize。
3、调用C_Finalize表明,用Cryptoki库完成了一个应用。它应当是应用所做的最后一个Cryptoki调用。如果几个应用或进程正在使用Cryptoki,则每个应用应当调用C_Finalize,每次调用C_Finalize前,应调用一次C_Initialize。在两个调用中,应用才能调用其他的Cryptoki功能。
4、C_OpenSession有两个不同的功能:它能建立一个应用调用,以便当一个令牌被插入一个特定页槽时,会通知一个应用,或者会在一个应用和一个特定槽中的令牌之间打开一个对话。
5、C_CloseSession关闭应用和令牌之间的对话,与C_OpenSession 配对使用。当与会话有关的所有操作都执行完后,必须调用C_CloseSession。关闭一个对话时,由该对话建立的所有对话对象都将自动被破坏,即使该应用有其他对话正在“使用”该对象。例如一个函数正在与该对话并行运作,那么该操作将被取消。
6、C_Login将某个用户登录到一个令牌,所有与会话相关的操作都必须在C_Login之后执行。如果调用成功,则根据用户的类型,每个应用对话要么进入R/W SO功能状态,要么R/W User功能状态,或者是R/O User功能状态。
7、C_Logout将用户从令牌中注销,与C_Login成对使用。如果函数调用成功,每个应用程序根据当前的用户类型进入R/W Public Session状态或R/O Public Session状态。
当C_Logout成功执行后,任何返回到专用目标的应用程序句柄就无效了(即使用户以后被返回注册到令牌,那些句柄仍然无效),另外,所有的专用会话目标都被破坏。
如果会话中存在任何激活的密码或目标搜寻操作,并且接着执行C_Logout,那么那些操作可能仍在继续进行,因此,注销前应完成一切已激活的操作。
8、需要注意在Cryptoki库中,所有密码运算操作(加密解密、签名验签、消息摘要)都有一个预置操作。比如在调用C_Encrypt之前必须调用C_EncryptInit来启动。
三、应用集成
Cryptoki库一般由密码设备厂商开发,将设备自身的密码功能转换为符合PKCS#11标准的接口。这样当底层的密码设备进行版本更新或者使用其他厂商的产品进行替代时,应用开发商只需要对比自身引用所需接口功能能够满足,就可以通过更新Cryptoki库的方式完成升级。
如果是单机的应用,一般采用设备+驱动+Cryptoki库+应用的集成方式。
现实中更多的是网络应用,应用集成的Cryptoki库需要通过网络接口调用密码设备的功能,此时需要采用安全的通信协议进行通信。
- 上一篇: 必收藏 | 宽带错误码含义及处理方法大全
- 下一篇: 连接宽带上网时,你遇到过这些错误代码吗?
猜你喜欢
- 2024-10-25 Auto CAD 常用系统变量 cad2020系统变量
- 2024-10-25 做开发十年,我总结出了这些开发经验
- 2024-10-25 Windows高级工程师:GDI/GDI+绘图;基础入门大全
- 2024-10-25 菜比手把手教你破解游戏多开(轻喷)
- 2024-10-25 JVM 完整深入解析 jvm解析阶段
- 2024-10-25 Linux打开的文件过多Too many open file
- 2024-10-25 一文看完Oracle数据库之PGA概念、组成、自动管理、参数及视图
- 2024-10-25 JavaScript 中内存泄漏的原因以及对策
- 2024-10-25 史上最全Oracle文件损坏处理办法(附实验步骤)
- 2024-10-25 C++消息循环GetMessage/TranslateMessage/DispatchMessage
你 发表评论:
欢迎- 最近发表
-
- 函数公式的7大潜规则,这次给你讲透了
- 数据逆向查找不止有vlookup,你该知道的三种逆向查询操作
- Vlookup函数怎么一次查找能返回多个结果?
- vlookup函数的嵌套你用过吗?一次可以引用3个表格的数据
- Vlookup函数的新用法,查询合并单元格,很多Excel高手都不知道
- 分明有数据,公式也没错,为什么vlookup还是会返回错误值
- 条件判断还在用if函数就out了,vlookup函数模糊查询一键完成
- EXCEL函数 VLOOKUP函数 HLOOKUP函数
- excel中vlookup函数的用法(excel中vlookup函数公式)
- 自动获取vlookup函数的第三参数,再也不用一列一列的数了
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)