4个稳定版本
1.4.2 | 2021年8月18日 |
---|---|
1.4.1 | 2021年8月16日 |
1.4.0 | 2021年6月25日 |
1.0.1 | 2020年10月15日 |
在密码学中排名#767
每月下载量:59次
2.5MB
1.5K SLoC
ssb-validate
验证Secure Scuttlebutt (SSB)消息和消息值,可以是单个或作为哈希链(支持并行批量验证)。
目标是与ssb-validate的JavaScript实现使用的完整验证标准尽可能接近。
已添加对顺序验证(常规和并行)和多作者顺序验证(常规和并行)的支持。
用法
访问ssb-validate2-rsjs-node仓库(特别是该仓库中src/lib.rs
文件)以查看此crate的示例。验证功能与ssb-verify-signatures配合使用,以执行SSB消息的完整验证。代码中还包含了一种在并行验证时返回无效消息的技术。
此仓库中src/message.rs
和src/message_value.rs
的测试中还可以看到更多示例。
验证标准
Secure Scuttlebutt "订阅"是由一个作者发布的消息序列。为了有效,消息必须满足一系列标准。确切的标准取决于消息的上下文。重要的是要注意,此crate不执行签名验证。有关此功能,请参阅ssb-verify-signatures仓库。
如果消息是订阅中的第一条消息
- 则
previous
字段的值必须是null
- 则
sequence
字段的值必须是1
如果消息不是订阅中的第一条消息
- 则
previous
字段的值必须是上一条消息的哈希值 - 则
sequence
字段的值必须比上一条消息的sequence
大1
所有消息都必须满足的其他标准(除非它们正在按顺序验证)
- 则
hash
字段的值必须是sha256
- 与上一条消息相比,
author
必须保持不变 - 如果消息包含一个
key
,它必须是消息的value
的哈希值 - 消息
value
字段必须按以下顺序排列:previous
、author
或sequence
、author
或sequence
、timestamp
、hash
、content
、signature
- 消息
value
不应包含额外的(意外的)字段 - 消息
content
字段的值必须使用规范化的 base64 编码,并且如果是字符串(加密的私密消息),则必须包含.box
- 序列化消息
value
的长度不得超过 8192 个 UTF-16 代码单元
上述所有标准都由本库(直接或通过依赖项)进行验证。
您可以逐个检查消息,或者批量处理一组消息(内部使用 rayon)
除了使用上述所有标准验证消息外,还可以通过满足这些标准的子集来验证乱序消息。此 crate 提供了执行此类乱序消息批量验证的函数。
乱序消息验证可以用于单作者或多作者用例(存在针对每种情况的单独函数)。
在验证单个作者的乱序消息时,消息必须由单个密钥对创建。但是,不要求消息的序列号比上一条消息的序列号大 1,也不要求上一条消息的哈希值与消息中给出的上一条消息的哈希值匹配。
相比之下,多作者验证不执行对 previous
消息的任何检查。事实上,可以说这种验证方法没有上一条消息的概念(除了 previous
字段必须按正确顺序出现在消息中)。
有用文档
- Sunrise Choir crate 用户指南:对应用程序开发者应有所帮助
- 数据类型、数据模型、源和消息规范:为在协议级别工作的开发者提供详细信息
- Scuttlebutt 协议指南:SSB 协议的优秀概述(必读)
此 crate 和所有依赖项的文档注释可以通过克隆存储库并运行 cargo doc --open
在本地构建和提供。有关 cargo doc
的更多信息,请参阅 此处。
许可证
LGPL-3.0
依赖项
~9.5MB
~174K SLoC