79个版本 (41个不兼容的)
0.42.1 | 2023年8月15日 |
---|---|
0.42.0 | 2023年4月27日 |
0.42.0-pre.0 | 2023年3月14日 |
0.41.0 | 2022年8月2日 |
0.7.2 | 2018年3月31日 |
#1653 in 密码学
19,527 每月下载次数
用于 8 个crate (4个直接使用)
455KB
10K SLoC
yubihsm.rs
纯Rust客户端,用于YubiHSM 2设备,由Yubico提供。
关于
这是一个纯Rust客户端库,用于YubiHSM 2设备,实现了Yubico的YubiHSM SDK中的libyubihsm C库的大部分功能。它提供了两个后端与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-APACHE和LICENSE-MIT。
依赖项
~5–7.5MB
~148K SLoC