PKCS#11标准解读-对象,此为第三篇,介绍对象和属性。
PKCS#11是使用非常普遍的密码设备接口,在实际应用中,国密的密码设备应用接口规范GMT0018与之作用相同,在技术体系架构中处于类似的位置。
在密码产品的开发中,按照PKCS#11或者GMT0018接口规范提供相应的接口封装,应用程序无需改动或者微小改动就可以更换底层密码设备。
PKCS#11的标准内容比较多,v2-20版本有400页,相应的,PKCS#11的标准解读,将按照概念及常用接口、角色、会话、对象、机制分别进行,最后介绍应用的调用流程,串起各个概念和接口。
此为第三篇,介绍Cryptoki的对象及其属性。
一、对象属性层次结构
Cryptoki可以识别一系列的对象。一个对象包含一个属性集,每个属性都有给定的一个值。
下图展示Cryptoki的对象层次结构以及支持的一些属性。
Cryptoki提供了对象管理的系列函数。一些密钥运算接口函数也会创建Key对象来保存结果。
一个对象总是包含所有必须的属性。一个令牌可以保存多个相同的对象。
二、对象的创建、修改、拷贝
所有创建、修改、拷贝对象的函数都使用一个模板作为参数之一,模板指定了具体的属性值。
加密函数创建对象时也可能添加额外的它们自己的属性值,具体取决于加密机制。
某一个对象类所需的属性没有默认值时,必须在创建的时候通过函数或模板指定。
在创建对象时,以下情况会导致创建失败:
1)、提供的模板给一个无效的属性指定值。
2)、给一个有效地属性指定一个非法的值。
3)、赋值给一个只读的属性。
4)、模板中指定的属性和值不足以创建一个对象。
5)、模板中指定的属性值有冲突,尽管独立来看是满足接口规范的,但是不满足特定令牌的需求。
6)、重复为一个特定的属性指定相同的值。
在对象创建之后,可以通过C_SetAttributeValue来修改属性值。
需要关注的是有些接口规范中表示为可修改的属性,对于特定的token可能不支持修改。
可以通过C_CopyObject来拷贝对象,拷贝对象的时候也可以通过一个应用提供的模板修改对象副本的属性。
除了Cryptoki指定的可修改属性,CKA_TOKEN、CKA_PRIVATE、CKA_MODIFIABLE也可以在拷贝过程中修改。
需要注意一个特定的令牌可能不支持某些属性的修改。
三、对象及属性
1、所有对象的通用属性。
Attribute |
Data Type |
Meaning |
CKA_CLASS |
CK_OBJECT_CLASS |
Object class(type) |
CKA_CLASS必须在创建对象时指定。
2、硬件功能对象
CKO_HW_FEATURE代表设备的功能。他们提供了一种易于扩展的方法将新的价值特性引入到Cryptoki接口中。
除非在CKA_CLASS属性中指定CKO_HW_FEATURE这个值,否则在使用C_FindObjectInit和C_FindObjects查找对象时不会返回硬件功能对象。
Attribute |
Data Type |
Meaning |
CKA_HW_FEATURE_TYPE |
CK_HW_FEATURE |
Hardware feature(type) |
CKA_HW_FEATURE_TYPE需要在创建对象时指定。
3、时钟
属性CKA_HW_FEATURE_TYPE值为CKH_CLOCK代表时钟对象。时钟对象代表设备上的实时时钟。
这代表的是与 CK_TOKEN_INFO 结构中的 utcTime 字段相同的时钟源。时钟对象有如下属性:
Attribute |
Data Type |
Meaning |
CKA_VALUE |
CK_CHAR[16] |
长度为 16 的字符串表示当前时间, 格式为:YYYYMMDDhhmmssxx (最后 2 个保留‘0’字符)。 |
设备允许的话可以通过C_SetAttributeValue来设置该属性,设备可能要求SO用户来修改时间。
4、单调计数器对象
属性CKA_HW_FEATURE_TYPE值为CKH_MONOTONIC_COUNTER代表单调计数器对象。
单调计数器对象表示设备上存在的硬件计数器。这个计数器保证在每次读取其值时增加,但不一定增加1。
应用程序可能会使用它来生成序列号,以确保令牌的唯一性。
单调计数器对象属性:
Attribute |
Data Type |
Meaning |
CKA_RESET_ON_INIT |
CK_BBOOL |
使用C_InitializeToken初始化时,计数器将复位到一个先前的返回值。 |
CKA_HAS_RESET |
CK_BBOOL |
计数器的值在某些点已经被及时复位至少一次。 |
CKA_VALUE |
Byte Array |
单调计数器的当前版本,以大字节序返回。 |
注意单调计数器的这几个属性都是只读的,客户端无法设置。
5、用户接口对象
属性CKA_HW_FEATURE_TYPE值为CKH_USER_INTERFACE代表用户接口对象。
用户接口对象代表了设备的交互能力。
Attribute |
Data Type |
Meaning |
CKA_PIXEL_X |
CK_ULONG |
屏幕分辨率-X轴 |
CKA_PIXEL_Y |
CK_ULONG |
屏幕分辨率-Y轴 |
CKA_RESOLUTION |
CK_ULONG |
DPI,每英寸像素值 |
CKA_CHAR_ROWS |
CK_ULONG |
面向字符的显示,字符行数 |
CKA_CHAR_COLUMNS |
CK_ULONG |
面向字符的现实,字符列数 |
|