13个版本
0.1.12 | 2022年9月30日 |
---|---|
0.1.11 | 2022年9月7日 |
0.1.9 | 2022年8月27日 |
0.1.3 | 2022年7月25日 |
0.1.1 | 2022年6月26日 |
#784 in 网络编程
每月 34 次下载
170KB
3.5K SLoC
libmensago
一个用Rust编写的库,用于与Mensago平台上的密钥卡交互,在Mozilla Public License 2.0下发布。
描述
此库使开发人员能够创建、签名和验证密钥卡,这是一种专为平台需求设计的数字证书形式。
状态
libkeycard处于alpha阶段。API可能会有意外变化,直到1.0版本发布之前不应视为最终版本,因此使用此库的开发人员应知道,即使在当前的开发版本之间也可能会有破坏性的更改,因为semver将在1.0版本发布之前不使用。升级时请务必阅读变更日志。
构建
构建libkeycard需要Rust工具链。检出仓库并运行cargo build
。
lib.rs
:
Libkeycard是一个MPL2.0许可的库,用于与Mensago数字证书(称为密钥卡)交互。
尽管已经仔细编写,但此库不提供任何类型的保证。
为了有效使用此库,必须阅读Mensago 身份服务设计文档。
用法
与密钥卡交互的主要任务可以分为几个任务
- 验证密钥卡
- 检索加密或签名验证密钥
- 添加新条目
- 吊销密钥卡
验证密钥卡
与密钥卡交互最常见的情况是获取个人的最新加密或验证密钥。首先,您需要获取用户组织的完整密钥卡以及用户的完整密钥卡。
一旦您从组织的服务器获取了密钥卡的原始文本数据,验证组织的密钥卡就相对简单
用户的关键卡验证更为复杂。
- 获取、实例化并验证组织的密钥卡。
- 获取、实例化并验证用户的密钥卡。
- 使用
find()
方法在组织的密钥卡中找到用户的根密钥卡条目。 - 从用户的密钥卡中获取根条目,并使用它来在分支点条目上调用
verify_chain()
方法。
获取密钥
获取密钥就像获取密钥卡当前条目的当前条目,并使用 get_field()
获取适当的字段。获取后,可以直接传递给 from_string()
/from_strings()
用于加密或签名密钥/对或 CryptoString::from()
,具体取决于使用需求。
添加新的组织条目
创建全新的根组织条目是在组织的服务器设置过程中完成的。通过从组织密钥卡数据创建一个 Keycard
实例并调用 chain()
方法来添加新条目,该方法生成新条目、签名并返回新条目和新密钥集。从那里,新的条目通过客户端发送的 ORGCHAIN
命令上传到服务器。
添加新的用户条目
创建新的根用户条目是所有与密钥卡相关过程中最复杂的,因为服务器和用户之间不信任对方。
- 生成新的用户密钥集,包括用于联系请求的签名密钥对、用于联系请求的加密密钥对、用于通用用途的签名密钥对和用于通用用途的加密密钥对。
- 使用
new()
或new_from_str()
创建新的条目实例。 - 根据需要设置字段数据,包括条目有效期(过期时间)。将“生存时间”字段设置为推荐的14天,并且构造函数还会自动生成时间戳。
- 使用
is_data_compliant()
确认条目符合基本数据合规性。 - 开始签名过程,通过将条目数据提交给服务器以填充
Organization-Signature
认证字符串。 - 使用组织密钥卡的当前条目的
Hash
字段的值设置Previous-Hash
字段。 - 通过调用
hash()
并指定所需的哈希算法来生成所有当前条目数据的哈希。 - 使用联系请求签名对使用“用户签名”签名。
- 将条目上传到服务器
将新非根条目添加到密钥卡的过程相对简单。
- 创建一个用户密钥卡数据的 Keycard 实例。
- 调用密钥卡的
chain()
方法,使用当前条目的联系请求签名对来生成保管链签名,并返回新的条目和密钥集。 - 然后,客户端将新的条目上传到服务器进行签名。使用此库的服务器将调用
cross_sign()
方法来完成此操作。 - 通过调用
hash()
并指定所需的哈希算法来生成所有当前条目数据的哈希。 - 使用联系请求签名对使用“用户签名”签名。
- 将条目上传到服务器
撤销用户密钥卡
撤销用户密钥卡的过程并不复杂。
- 创建一个用户密钥卡数据的 Keycard 实例。
- 调用密钥卡的
revoke()
方法来创建一个新的根条目,并带有更新后的Index
字段和新的密钥集。 - 然后,客户端将新的条目上传到服务器进行签名。使用此库的服务器将调用
cross_sign()
方法来完成此操作。 - 使用组织密钥卡的当前条目的
Hash
字段的值设置Previous-Hash
字段。 - 通过调用
hash()
并指定所需的哈希算法来生成所有当前条目数据的哈希。 - 使用联系请求签名对使用“用户签名”签名。
- 使用
REVOKE
命令将条目上传到服务器
撤销组织密钥卡
从恢复时间来看,这是最坏的情况,但这个过程本身并不困难。
- 创建一个用户密钥卡数据的 Keycard 实例。
- 调用密钥卡的
revoke()
方法来创建一个新的根条目,并带有更新后的Index
字段和新的密钥集。 - 然后,客户端将新的条目上传到服务器进行签名。使用此库的服务器将调用
cross_sign()
方法来完成此操作。 - 使用组织密钥卡的当前条目的
Hash
字段的值设置Previous-Hash
字段。 - 通过调用
hash()
并指定所需的哈希算法来生成所有当前条目数据的哈希。 - 使用联系请求签名对使用“用户签名”签名。
- 使用
ORGREVOKE
命令将条目上传到服务器
通过发送 ORGREVOKE
命令,服务器将用新的密钥卡树替换组织的密钥卡树,并向所有用户发送撤销请求。
依赖关系
~26MB
~236K SLoC