jku/keylet
GitHub: jku/keylet
Tillitis TKey 硬件签名令牌的 Python 客户端库,提供 ML-DSA 和 Ed25519 签名与验证功能。
Stars: 1 | Forks: 0
# keylet -- Tillitis TKey 的客户端库
[](https://github.com/jku/keylet) [](https://pypi.org/project/keylet/) [](https://jku.github.io/keylet/)
Keylet 是一个用于 [Tillitis TKey](https://www.tillitis.se/products/tkey/) 安全令牌的 Python 客户端库和 CLI 工具,并为 TKey 实现了 ML-DSA / Ed25519 签名器应用。
TKey 的独特之处在于它没有长期存储:签名密钥_始终_是在 runtime 从 seed 生成的。该 seed 是通过组合 Unique Device Secret、Device Application hash 和可选的 User Supplied Secret 构建而成的。Device Application 和 User Supplied Secret 都是在 runtime 由 `keylet` 提供的。
这种独特的设计导致了一些 API 的特殊性:
* User Supplied Secret(passphrase)不会直接由 keylet 验证:“错误”的 passphrase 只会导致使用不同的签名密钥。在实践中,调用方应用应该检查 `TKeySign.get_pubkey()`:如果密钥与预期不符,则可能使用了错误的 passphrase。
* 在长期使用中(预期在一段时间内使用相同的签名密钥),调用方应用负责始终选择相同的 Device Application:`keylet` 为此提供了一种机制,请参见示例。
* 在初始化之后,更改设备应用或 passphrase 的唯一方法是拔下设备并重新开始。
* 签名器初始化有一种优化措施:如果 TKey 已经使用匹配的设备应用名称和版本进行了初始化,则初始化将会成功。遗憾的是,`keylet` 无法确认确切的设备二进制文件是否为预期的那个,或者 passphrase 是否仍然是同一个(但同样地,调用方应用可以将 `TKeySign.get_pubkey()` 与预期的密钥进行比较)
## 安装
```
pip install keylet
```
## CLI 用法
该软件包安装了一个用于签名和验证的 `keylet` 命令行工具。这主要是该库的一个测试/演示应用。
```
# 无密码短语签名,然后验证
$ keylet sign README.md
$ keylet verify README.md
# 获取公钥,使用密码短语签名,并使用保存的公钥进行验证
$ keylet --passphrase hunter2 pubkey --output pub.key
$ keylet --passphrase hunter2 sign README.md
$ keylet verify --pubkey pub.key README.md
# 长期使用 keylet 时,请记住指定 device app digest(keylet 的默认
# app 版本可能会改变,但您将需要一个特定的应用程序才能继续使用相同的
# key)
$ keylet --passphrase hunter2 --digest 186bcf6 sign README.md
```
## 库用法
```
from keylet import TKeySign, SignApp
# 加载默认的嵌入式 ML-DSA signer
app = SignApp.load_mldsa()
digest = app.digest
# 使用密码短语初始化 signer
with TKeySign(app=app, secret="hunter2") as signer:
# Sign a payload
signature = signer.sign(b"my payload")
```
在长期使用中,应使用设备应用摘要来确保同一个应用
始终用于特定密钥:
```
# 加载之前存储了 digest 的应用程序
app = SignApp.load_mldsa(digest=digest)
# 使用密码短语初始化 signer
with TKeySign(app=app, secret="hunter2") as signer:
# Sign a payload
signature = signer.sign(b"my payload")
```
有关更多详细信息,请参阅 [API 参考](https://jku.github.io/keylet/api/)。
## 开发
[uv](https://docs.astral.sh/uv/) 是必需的开发工具。
```
# 运行 linters 和 type checker
make lint
# 修复格式和 lint 问题
make fix
# 运行测试
make test
# 运行测试,包括 on-device 测试
make test-device
```
标签:CVE, Python, 客户端库, 抗量子密码, 数字签名, 文档结构分析, 无后门, 硬件安全密钥, 逆向工具