10个版本
0.1.9 | 2024年4月12日 |
---|---|
0.1.8 | 2024年4月12日 |
#2285 in 密码学
330 每月下载量
用于 tangy
29KB
556 行
Tangy Lib
描述
Tangy-lib是Tang服务器的一个库实现,用Rust编写。
Tang协议允许客户端存储只有在访问Tang服务器时才能恢复的秘密。例如,Clevis工具允许当加密设备连接到Tang可访问的本地网络时自动解密LUKS分区。
有关完整描述,请参阅原始Tang项目:https://github.com/latchset/tang
Fraser Tweedale于2020年在澳大利亚Linux会议上的关于“Clevis和Tang:保护您的静态秘密”的演讲是一个很好的资源
安装
通过cargo安装
cargo add tangy-lib
或直接在Cargo.toml的依赖项部分使用
[dependencies]
tangy-lib = "0.1"
用法
Tangy-lib有一个初始化方法,可以接受本地目录或JWK字符串向量的输入
use tangy_lib::{KeySource, TangyLib};
let mut tangy = TangyLib::init(KeySource::LocalDir(&dir_path)).unwrap();
// or
let mut tangy = TangyLib::init(KeySource::Vector(&vec_of_keys)).unwrap();
如果LocalDir
不包含密钥集,则会生成一个新的密钥集并将其保存到该文件夹。
本地目录和向量加载方法将处理密钥,并在无法加载JWK或某些密钥缺少std::io::Error
时返回错误,其kind设置为std::io::ErrorKind::Unsupported
或std::io::ErrorKind::NotFound
。
如果init
返回Ok
,则其他所有内容都应该正常工作。
Tang使用advertise
和recovery
阶段,以生成对抗响应然后恢复响应
use tangy_lib::{KeySource, TangyLib};
let mut tangy = TangyLib::init(KeySource::LocalDir(&dir_path));
let adv = tangy.adv(None).unwrap();
let rec = tangy.rec(&kid, &data).unwrap();
传递给 adv
的参数是用于签名的密钥指纹,通常设置为 None,表示使用所有签名密钥。如果设置了签名密钥但未找到,adv
将返回带有 ErrorKind 设置为 std::io::ErrorKind::NotFound 的 Err(std::io::Error)
。
用于恢复的椭圆曲线消息恢复(ECMR)密钥指纹,以及数据是客户端以 JWK 格式生成的公钥。
提供了一种密钥创建机制
let keys : Vec<String> = tangy_lib::create_new_key_set();
它创建 ES512 和 ECMR 密钥。
致谢
Tang 的原始作者是 Latchset。Tang 基于Nathaniel McCallum和Robert Relyea描述的协议(https://marc.info/?m=144173814525805)。
许可证
Apache-2.0 或 MIT - 由你决定!
如何贡献
除非你明确声明,否则任何有意提交以包含在你的作品中的贡献,根据 Apache-2.0 许可证定义,将双重许可(Apache-2.0 和 MIT),不附加任何额外的条款或条件。
依赖项
约 4.5MB
约 92K SLoC