此为完结篇,介绍Cryptoki库如何工作。

PKCS#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库需要通过网络接口调用密码设备的功能,此时需要采用安全的通信协议进行通信。

身份认证_数据加密_数据安全_加密机_密钥管理_数据加密集成服务_安当加密_安当技术有限公司上海安当技术有限公司致力于开发身份认证、数据加密类产品,依托集中化、跨平台的密钥管理系统,专注于为金融、政府、企业等客户提供更加安全,便捷的身份认证管理和数据加密解决方案。公司主要产品及服务简称为4S:身份认证服务平台,密钥管理平台,硬件加密机,数据加密集成服务https://andang.cn/

PKCS#11标准解读-Cryptoki库如何工作相关推荐

  1. PKCS#11标准解读-Cryptoki库如何工作(4)

    此为完结篇,介绍Cryptoki库如何工作. PKCS#11是使用非常普遍的密码设备接口,在实际应用中,国密的密码设备应用接口规范GMT0018与之作用相同,在技术体系架构中处于类似的位置. 在密码产 ...

  2. CSP和PKCS#11的关系

    一.引言  PKI,被誉为现代信息社会安全的基石,它能够为所有网络透明地提供加密和数字签名等密码服务所需的密钥和证书管理功能,能够提供认证.访问控制.数据完整性机密性.和不可否认性等核心安全服务.由于 ...

  3. 加密机PKCS#11国际加密标准解读-概念和常用接口函数(1)

    PKCS#11是使用非常普遍的密码设备接口,在实际应用中,国密的密码设备应用接口规范GMT0018与之作用相同,在技术体系架构中处于类似的位置. 在密码产品的开发中,按照PKCS#11或者GMT001 ...

  4. PKCS#11 in OP-TEE

    目录 1.PCCS#11简介 2.PKCS#11 specifications 3.Achievements 4.编译和运行 5.libckteec 1.PCCS#11简介 PKCS#11标准定义了独 ...

  5. Boost库学习笔记(二)算法模块-C++11标准

    Boost库学习笔记(二)算法模块-C++11标准 一.综述 Boost.Algorithm是一系列人通用推荐算法的集合,虽然有用的通用算法很多,但是为了保证质量和体积,并不会将太多通用算法通过审查测 ...

  6. C++11标准库 - array 1

    C++11标准库 - array std::array是原生数组的封装,它存放于栈上且大小固定,性能也与之相同.在原生数组的基础上,它添加了范围检查,以及其它的STL的相应特性,比如复制.交换.迭代器 ...

  7. JDK5.0环境下配置PKCS#11

    JDK5.0环境下配置PKCS#11 发表日期:2008-1-5 新浪微博 QQ空间 QQ微博 百度搜藏 腾讯朋友 QQ收藏 百度空间 人人网 开心网 这篇文章不介绍具体的编程方法,而是针对PKCS# ...

  8. C++11学习笔记-----线程库std::thread

    在以前,要想在C++程序中使用线程,需要调用操作系统提供的线程库,比如linux下的<pthread.h>.但毕竟是底层的C函数库,没有什么抽象封装可言,仅仅透露着一种简单,暴力美 C++ ...

  9. APUE学习笔记:第五章 标准I/O库

    5.1 引言 标准I/O库处理很多细节,例如缓冲区分配,以优化长度执行I/O等.这些处理不必担心如何使用正确的块长度.这使得它便于用户使用,但是如果不较深入地了解I/O库函数的操作,也会带来一些问题 ...

最新文章

  1. Asp.net的用户管理
  2. pfSense如何创建和配置VLAN
  3. qt 运行库 linux,linux(ubuntu) 版qt5.x安装的一些知识
  4. PHP中的stdClass 【转】
  5. 以相关组为基础的3D物体识别
  6. MongoDB简单概述
  7. 8年架构师针对web前端小白,作出的职业规划建议
  8. 关于使用struts2上传文件时获取不到文件内容的问题的解决方案
  9. 服务器运行时间设置,服务器的时间同步设置方法
  10. 联客云虚拟工作手机(云手机)应用行业及场景
  11. 修改华为路由器lan端口
  12. 浅谈Unity中的rotation和Quaternion的乘法
  13. 通过PowerShell管理Office 365组
  14. 多线程为什么比单线程快呢?
  15. 蛙蛙推荐:蛙蛙教你文本聚类
  16. Go-Proxy-Checker,一款基于Go编写的高性能代理服务器验证工具
  17. 揭秘青提WiFi分销小程序到底有多赚钱?商家的宝贝代理的吸金利器
  18. zcmu oj 1087: 统计字符
  19. vue使用ts 引入组件_vue中使用TS实现父子组件直接的通信
  20. uva 378 Intersecting Lines

热门文章

  1. cp2102 vcp驱动
  2. krpano 陀螺仪 相关问题
  3. 【尝鲜】无视tpm安装win11 - 任何电脑皆可安装
  4. proteus——555 PWM 发生器
  5. Imperva常用的维护命令
  6. 罗永浩 AR 创业公司估值 10 亿;​苹果宣布加大 AppStore 广告推送量;​Node.js 19 发布|极客头条...
  7. Unity的UGUI使用Text和Image实现文字下划线
  8. Apache DolphinScheduler 社区呼唤志愿者
  9. 白鹭小游戏-成语挑战-资源放置
  10. [CB]2018年中国智能手机市场出货量