Skip to main content
使用 Lager Box 上的 Yubico YubiHSM 2 生成密钥、导入密钥并对数据签名。私钥始终保存在 HSM 内。

导入

方法

标记为是的每个方法都接受两个只能以关键字传入的参数:auth_key_id=1 和 password。密码是必需的。驱动不会保存它,也不会把它写入异常信息。

方法参考

Net.get(name, type=NetType.Hsm)

按名称获取一个 HSM Net。
返回: YubiHsm2 每次调用都会打开设备、执行一个操作,然后再次关闭设备。驱动在两次调用之间不会占用该 USB 设备。

info()

返回: 包含 firmware、serial、log_used、log_size、part_number 和 algorithms 的 dict

generate_key(object_id, algorithm, label='', domains=(1,), capabilities=None, *, auth_key_id=1, password)

在 HSM 内生成一个非对称密钥。
返回: 包含 id 和 public_key_pem 的 dict 生成 RSA 密钥可能需要几分钟。对 RSA 密钥,调用最多等待 300 秒。

sign(object_id, data, mechanism, *, auth_key_id=1, password)

用已存储的密钥对 data 签名。
mechanism 取值为 ecdsa-sha256、ecdsa-sha384、ecdsa-sha512、eddsa、rsa-pkcs1-sha256、rsa-pkcs1-sha384、rsa-pkcs1-sha512、rsa-pss-sha256、rsa-pss-sha384 或 rsa-pss-sha512。 返回: bytes - 签名

import_key(object_id, private_key_pem, label='', domains=(1,), capabilities=None, *, auth_key_id=1, password)

导入一个未加密的 PEM 私钥。返回: int - 对象 ID

list_objects(type=None, label=None, *, auth_key_id=1, password)

返回: list[dict],每项包含 id、type、label、algorithm、domains、capabilities、size 和 sequence。get_object_info() 返回一个这样的 dict。 type 和 object_type 取值为 asymmetric-key、authentication-key、opaque、wrap-key、hmac-key、template 或 otp-aead-key。

reset(*, auth_key_id=1, password)

将 HSM 恢复出厂设置,并最多等待 10 秒让它恢复。这会删除 HSM 上的所有密钥。

session(*, auth_key_id=1, password)

一个上下文管理器,产出 yubihsm 包的已登录会话,用于本驱动未封装的操作。

错误

说明

  • 请从环境变量或文件读取密码,不要写在脚本源码中
  • 对应的 CLI 命令是 lager hsm
  • 对应的 Rust 接口见 Rust HSM 参考