当前位置: 首页 > news >正文

PKCS#11认识(二)—Object 与 Attribute

文章目录

  • 0 背景
  • 1 什么是Object
  • 2 什么是Attribute
    • 2.1 什么是Attribute
    • 2.2 为什么设计 Attributes?
    • 2.3 Attributes分类概览
  • 3 借助工具理解概念
    • 3.1 Object
      • 3.1.1 列出现有Object
      • 3.1.2 查询 slots
      • 3.1.3 登录 Token 创建 AES Key
      • 3.1.4 再次查看Object
    • 3.2 Attribute
      • 3.2.1 属性结构
      • 3.2.2 通用属性(所有对象共有)
      • 3.2.3 密钥相关属性
      • 3.2.4 RSA 密钥特有属性
      • 3.2.5 证书相关属性
  • 4.参考文献

0 背景

  • 场景问题描述
    • 如果我们将一个私钥或者对称密钥写入到HSM/TEE,但又不允许导出密钥材料的的情况下,下次如何确认里边的密钥与预期导入的密钥一样呢
  • PKCS#11 的解决方案
    • 存储的密钥不仅仅含有密钥本身,还有会有属性,这些属性可以理解为密钥的说明书,有密钥的id,有密钥的用途,类型描述。
    • PKCS#11不仅仅定义了很多标准化的属性,还支持属性的扩展。
  • 如下图流程,可以达到不获取真实密钥而实现校验的目的

1 什么是Object

Object 是 PKCS#11 对所有安全资源(密钥、证书、数据等)的统一抽象。
它屏蔽了不同资源类型的差异,使应用程序可以通过统一的 API 创建、查找、使用、复制和销毁对象;
而对象的具体特性则由 Attributes 描述,应用程序通过 Object Handle 引用和操作这些对象。
这里的"安全资源"包括:

  • 密钥(Key)
  • 证书(Certificate)
  • 普通数据(Data)
  • 厂商扩展对象(Vendor Object)

PKCS#11 │ 管理 Object │ ┌────────┴────────┐ │ │ Handle Attributes (如何访问) (对象是什么)

2 什么是Attribute

2.1 什么是Attribute

Attribute(属性)就是用于描述 PKCS#11 Object 特征的一组键值对(Key-Value Pair)。
例如,一把 AES 密钥:

AES Key

在 PKCS#11 中并不是只有:

Key Value

而是:
一个 Object = 数据(Value)+ Attributes(元数据)

Object ├── CKA_CLASS = Secret Key ├── CKA_KEY_TYPE = AES ├── CKA_LABEL = "AES_KEY" ├── CKA_ID = 01 ├── CKA_VALUE = ******** ├── CKA_ENCRYPT = TRUE ├── CKA_DECRYPT = TRUE ├── CKA_WRAP = FALSE ├── CKA_UNWRAP = FALSE ├── CKA_SENSITIVE = TRUE ├── CKA_EXTRACTABLE= FALSE └── ...

2.2 为什么设计 Attributes?

如果没有 Attributes,一把密钥只有

00112233445566778899AABBCCDDEEFF

KCS#11 根本不知道:
是 RSA?是 ECC?是 AES?能不能签名?能不能加密?能不能导出?谁拥有它?
敲黑板:PKCS#11 不仅需要保存 Key Value,更需要保存 Key 的"身份"和"行为"

2.3 Attributes分类概览

3 借助工具理解概念

3.1 Object

3.1.1 列出现有Object

  • 上一篇文章中,在token中生成了RSA密钥
pkcs11-tool \ --module /usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so \ --login \ --pin 123456 \ --list-objects Using slot 0 with a present token (0x7de1ea57) Private Key Object; RSA label: MyRSA_key1 ID: 01 Usage: decrypt, sign, signRecover, unwrap Access: sensitive, always sensitive, never extractable, local Public Key Object; RSA 2048 bits label: MyRSA_key1 ID: 01 Usage: encrypt, verify, verifyRecover, wrap Access: local

3.1.2 查询 slots

  • 目的:为了查询slot的 Label,下一步新建AES key的时候需要指定
softhsm2-util --show-slots Available slots: Slot 2111957591 Slot info: Description: SoftHSM slot ID 0x7de1ea57 Manufacturer ID: SoftHSM project Hardware version: 2.6 Firmware version: 2.6 Token present: yes Token info: Manufacturer ID: SoftHSM project Model: SoftHSM v2 Hardware version: 2.6 Firmware version: 2.6 Serial number: e63da68afde1ea57 Initialized: yes User PIN init.: yes Label: test1

3.1.3 登录 Token 创建 AES Key

pkcs11-tool \ --module /usr/lib/softhsm/libsofthsm2.so \ --login \ --pin 123456 \ --token-label test1 \ --keygen \ --key-type AES:16 \ --label AES_KEY_128 \ --id 02

3.1.4 再次查看Object

  • 发现已经新增了
~/Desktop$ pkcs11-tool \ --module /usr/lib/softhsm/libsofthsm2.so \ --login \ --pin 123456 \ --token-label test1 \ --list-objects

3.2 Attribute

3.2.1 属性结构

/* General Structure definitions */structCK_ATTRIBUTE{CK_ATTRIBUTE_TYPE type;void*pValue;CK_ULONG ulValueLen;};

3.2.2 通用属性(所有对象共有)

CKA_CLASS // 对象类型(密钥/证书/数据对象等) CKA_TOKEN // 是否存储在 Token 中(true=持久化, false=会话对象) CKA_PRIVATE // 是否需要登录才能访问 CKA_LABEL // 人类可读的标签名 CKA_MODIFIABLE // 属性是否可修改 CKA_COPYABLE // 是否可复制 CKA_DESTROYABLE // 是否可销毁

3.2.3 密钥相关属性

CKA_KEY_TYPE// 密钥类型(RSA/EC/AES等)CKA_ID// 密钥标识符(用于匹配公私钥对和证书)CKA_SENSITIVE// 是否敏感(true=私钥值不可读出)CKA_ENCRYPT// 是否可用于加密CKA_DECRYPT// 是否可用于解密CKA_SIGN// 是否可用于签名CKA_VERIFY// 是否可用于验签CKA_EXTRACTABLE// 密钥是否可导出CKA_VALUE_LEN// 密钥长度

3.2.4 RSA 密钥特有属性

CKA_MODULUS// 模数 nCKA_MODULUS_BITS// 模数位数(如 2048)CKA_PUBLIC_EXPONENT// 公钥指数 eCKA_PRIVATE_EXPONENT// 私钥指数 d

3.2.5 证书相关属性

CKA_CERTIFICATE_TYPE // 证书类型(X.509 等) CKA_SUBJECT // 证书主题 CKA_ISSUER // 证书颁发者 CKA_SERIAL_NUMBER // 序列号 CKA_VALUE // 证书的 DER 编码内容

4.参考文献

  1. PKCS #11 Cryptographic Token Interface Base Specification Version 2.40
    https://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/os/pkcs11-base-v2.40-os.html

  2. SoftHSM2
    https://github.com/softhsm/SoftHSMv2

  3. OpenSC
    https://github.com/OpenSC/OpenSC

http://www.jsqmd.com/news/1214491/

相关文章:

  • 2026年国内热门木工五轴雕刻机靠谱销售厂家盘点及选购参考
  • 2026邯郸别墅自建施工怎么选?TOP 砖混 + 框架 + 轻钢 + 庭院一体化 附电话地址 - 中检检测集团
  • BI工具选型误区:为什么你的数据看板总是“用不起来”?
  • 2026眉山泳池高危检测怎么选?高危检测机构TOP 办证 + 年审 + 水质全项 附电话地址 - 鉴安检测
  • 天津市河东区知名的公司注销财税公司哪家专业
  • SpringAOP+Logback+MDC实现traceId全链路日志追踪
  • Unity弧形文本实现:从顶点变换到性能优化的完整指南
  • 抖音视频怎么去水印?
  • 2026黄南别墅自建施工怎么选?TOP 砖混 + 框架 + 轻钢 + 庭院一体化 附电话地址 - 中检检测集团
  • 2026聊城雨棚搭建怎么选?TOP 铝合金 + 玻璃 + 耐力板 + 上门测量安装 附电话地址 - 科信检测
  • 天翼爱音乐AI歌手“小辰”:以乐为舟,伴每一个逐光前行的你
  • 北京亦庄宠物肝肾养护诊疗哪家好
  • 上海防水补漏公司推荐(2026.7月)本地正规服务商 - 吉林同城获客
  • 为什么你的Cursor总生成无效断言?揭秘LLM理解业务逻辑的4个隐性前提与修复公式
  • 深度解析:如何选择PDRN护肤品代工厂?以水信生物为例的全面指南
  • 告别繁琐歌词制作:LRC Maker让滚动歌词创作变得简单有趣
  • Tecplot 画二维云图水线(多相流)
  • 2026桂林雨棚搭建怎么选?TOP 铝合金 + 玻璃 + 耐力板 + 上门测量安装 附电话地址 - 科信检测
  • 第一阶段-第1天-Python基础复习与环境准备
  • 成都老牌金店测评|周大福、老凤祥线下门店黄金回收业务详细解读 - 奢侈品回收评测
  • 计算机毕业设计之食品管理系统
  • 2026 年建材行业 AI 排名优化公司全调研:技术实力深度评测 - 装修新知
  • 业财一体化的“最后一公里”:从凭证融合到管理会计的质变
  • DMX512 为什么是 512 通道?地址码与灯光控制一文讲透
  • 青岛AI培训讲师哪家专业推荐
  • AI编程副业“隐形天花板”真相:为什么92.6%的人卡在5000元/月?破局关键在交付颗粒度重构
  • 2026年7月权威公示|明鉴识时计划更新,亨得利官方售后写字楼维保门店完整名录,渠道核验 400-901-0695 - 亨得利官方售后
  • HarmonyOS RDB 收藏列表打开慢怎么办:中式美食怎么用批量查询避免循环查库
  • 钻石回收水太深?2026 南京鼓楼区易奢福透明化操作,让你卖得明明白白 - 肉松卷
  • 家政数字化:万亿蓝海的智能革命-家政小程序APP