#hsm #yubi-key #hmac #ed25519 #ecdsa

yubihsm

纯Rust客户端,用于YubiHSM2设备,支持通过HTTP和USB访问设备。支持大多数HSM功能,包括ECDSA、Ed25519、HMAC和RSA。

79个版本 (41个不兼容的)

0.42.1 2023年8月15日
0.42.0 2023年4月27日
0.42.0-pre.02023年3月14日
0.41.0 2022年8月2日
0.7.2 2018年3月31日

#1653 in 密码学

Download history 4020/week @ 2024-04-20 3387/week @ 2024-04-27 2993/week @ 2024-05-04 3163/week @ 2024-05-11 2867/week @ 2024-05-18 2179/week @ 2024-05-25 2500/week @ 2024-06-01 3693/week @ 2024-06-08 4839/week @ 2024-06-15 4706/week @ 2024-06-22 4343/week @ 2024-06-29 3764/week @ 2024-07-06 4634/week @ 2024-07-13 5072/week @ 2024-07-20 5117/week @ 2024-07-27 4108/week @ 2024-08-03

19,527 每月下载次数
用于 8 个crate (4个直接使用)

Apache-2.0 OR MIT

455KB
10K SLoC

yubihsm.rs

crate Docs Build Status Dependency Status Apache2/MIT licensed MSRV

纯Rust客户端,用于YubiHSM 2设备,由Yubico提供。

文档

关于

这是一个纯Rust客户端库,用于YubiHSM 2设备,实现了Yubico的YubiHSM SDK中的libyubihsm C库的大部分功能。它提供了两个后端与YubiHSM通信:

  • HTTP:通过Yubico SDK中的yubihsm-connector进程与YubiHSM通信。
  • USB:使用rusb crate直接通过USB与YubiHSM通信。

yubihsm::Client类型提供了对HSM命令的访问。

这不是Yubico的官方项目,也不受Yubico的支持或认可(尽管管理他们Twitter账号的人认为这很棒)。

注意:如果你在寻找YubiKey库而不是YubiHSM,请查看yubikey-piv.rs

最低支持的Rust版本

此crate需要Rust 1.57 或更高版本。

支持的命令

注意:如果您想使用此列表中未提供的命令,请打开一个请求支持的issue。

命令 实现 MockHSM 描述
认证会话 使用密码或加密密钥认证到HSM
闪烁设备 闪烁HSM的LED(以识别它)
更改认证密钥 替换创建当前会话使用的认证密钥
关闭会话 与HSM终止加密会话
创建OTP AEAD 创建Yubico OTP AEAD
创建会话 与HSM启动一个新的加密会话
解密OAEP 解密使用RSA-OAEP加密的数据
解密OTP 解密Yubico OTP,获取计数器和计时器信息
解密PKCS1 解密使用RSA-PKCS#1v1.5加密的数据
删除对象 删除指定ID和类型的对象
推导ECDH ⚠️ 使用HSM支持的关键计算椭圆曲线Diffie-Hellman
设备信息 获取HSM的信息
Echo 回显发送给HSM的消息
导出包装 以加密形式从HSM导出对象
生成非对称密钥 在HSM中随机生成新的非对称密钥
生成HMAC密钥 在HSM中随机生成HMAC密钥
生成OTP AEAD密钥 为Yubico OTP身份验证随机生成AES密钥
生成包装密钥 为导出/导入对象随机生成AES密钥
获取日志条目 获取HSM的审计日志
获取对象信息 获取有关对象的信息
获取不可见对象 从HSM获取一个不可见的字节数组
获取选项 获取HSM审计设置
获取伪随机数 获取HSM内部PRNG生成的随机数据
获取公钥 获取HSM支持的非对称私钥的公钥
获取存储信息 获取当前空闲存储的信息
获取SSH模板 从HSM获取SSH证书模板对象
导入包装 将加密密钥导入HSM
列出对象 列出当前会话可见的对象
放置非对称密钥 将现有的非对称密钥放入HSM
放置身份验证密钥 将YubiHSM身份验证密钥放入HSM
放置HMAC密钥 将HMAC密钥放入HSM
放置不可见对象 将不可见的字节数组放入HSM
放置OTP AEAD密钥 将Yubico OTP密钥放入HSM
放置SSH模板 将SSH证书模板对象放入HSM
放置包装密钥 将AES密钥包装密钥放入HSM
随机化OTP AEAD 随机生成Yubico OTP AEAD
重置设备 将HSM重置到出厂默认设置
重新包装OTP AEAD 将一个Yubico OTP AEAD从密钥重新包装到另一个密钥
会话消息 向HSM发送加密消息
设置日志索引 将HSM中的日志消息标记为已消费
设置选项 更改HSM审计设置
签名证明证书 为非对称密钥创建X.509证书
签名ECDSA 使用HSM支持的关键计算ECDSA签名
签名EdDSA 使用HSM支持的关键计算Ed25519签名
签名HMAC 使用HSM支持的关键执行HMAC操作
签名PKCS1 ⚠️ 使用HSM支持的关键计算RSASSA-PKCS#1v1.5签名
签名PSS ⚠️ 使用HSM支持的关键计算RSASSA-PSS签名
签名SSH证书 ⚠️ 签名SSH证书请求
解包数据 解密使用包装密钥加密的数据
验证HMAC 验证给定数据的HMAC标签是否有效
包装数据 使用包装密钥加密数据
状态
支持
⚠️ 部分/未测试支持
不支持

注意:标记为⚠️的命令尚未经过适当测试,可能包含错误或根本无法工作。它们默认禁用:要使用它们,您必须启用untested cargo功能。如果您成功使它们工作,请打开一个报告成功的issue(或PR)问题,以便我们可以将它们提升到✅。

测试

此crate允许您以三种不同的方式运行集成测试套件

  • 针对真实YubiHSM2设备的实时测试
    • 通过HTTP
    • 通过USB
  • 使用MockHSM进行模拟测试,该工具实现了部分YubiHSM2功能

cargo test:通过yubihsm-connector测试YubiHSM2通过HTTP的实时连接

此模式假设您拥有YubiHSM2硬件设备,已经为您的平台下载了YubiHSM2 SDK,并且正在运行一个监听在localhost默认端口12345的yubihsm-connector进程。

YubiHSM2设备应处于默认出厂状态。要将其重置到该状态,请使用yubihsm-shell reset命令或插入后立即按住YubiHSM2 10秒。

您可以通过LED快速闪烁1秒来确认测试正在实时针对YubiHSM2进行。

注意:这些测试是破坏性的,不要在包含您关心密钥的YubiHSM2上运行。

cargo test --features=usb:通过USB测试YubiHSM2的实时连接

添加usb cargo功能会在HTTP连接器支持的基础上构建USB连接器支持,并且通过USB而不是使用yubihsm-connector进程来运行测试套件。

注意:这些测试是破坏性的,不要在包含您关心密钥的YubiHSM2上运行。

cargo test --features=mockhsm:对模拟HSM进行的模拟测试

当您无法访问物理YubiHSM2硬件时,例如在CI环境中,此模式很有用。

许可

yubihsm.rs同时根据MIT许可和Apache许可(版本2.0)的条款分发。

有关详细信息,请参阅LICENSE-APACHELICENSE-MIT

依赖项

~5–7.5MB
~148K SLoC