#message #validation #hash #secure-scuttlebutt #ssb #parallel #value

ssb-validate

验证Secure Scuttlebutt (SSB)哈希链(并行处理)

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

Download history 1/week @ 2024-03-17 20/week @ 2024-03-31 1/week @ 2024-04-07 1/week @ 2024-04-21

每月下载量:59次

LGPL-3.0

2.5MB
1.5K SLoC

ssb-validate

Build Status Version badge Documentation badge

验证Secure Scuttlebutt (SSB)消息和消息值,可以是单个或作为哈希链(支持并行批量验证)。

目标是与ssb-validate的JavaScript实现使用的完整验证标准尽可能接近。

已添加对顺序验证(常规和并行)和多作者顺序验证(常规和并行)的支持。

用法

访问ssb-validate2-rsjs-node仓库(特别是该仓库中src/lib.rs文件)以查看此crate的示例。验证功能与ssb-verify-signatures配合使用,以执行SSB消息的完整验证。代码中还包含了一种在并行验证时返回无效消息的技术。

此仓库中src/message.rssrc/message_value.rs的测试中还可以看到更多示例。

验证标准

Secure Scuttlebutt "订阅"是由一个作者发布的消息序列。为了有效,消息必须满足一系列标准。确切的标准取决于消息的上下文。重要的是要注意,此crate不执行签名验证。有关此功能,请参阅ssb-verify-signatures仓库。

如果消息是订阅中的第一条消息

  • previous字段的值必须是null
  • sequence字段的值必须是1

如果消息不是订阅中的第一条消息

  • previous字段的值必须是上一条消息的哈希值
  • sequence字段的值必须比上一条消息的sequence大1

所有消息都必须满足的其他标准(除非它们正在按顺序验证)

  • hash字段的值必须是sha256
  • 与上一条消息相比,author 必须保持不变
  • 如果消息包含一个 key,它必须是消息的 value 的哈希值
  • 消息 value 字段必须按以下顺序排列:previousauthorsequenceauthorsequencetimestamphashcontentsignature
  • 消息 value 不应包含额外的(意外的)字段
  • 消息 content 字段的值必须使用规范化的 base64 编码,并且如果是字符串(加密的私密消息),则必须包含 .box
  • 序列化消息 value 的长度不得超过 8192 个 UTF-16 代码单元

上述所有标准都由本库(直接或通过依赖项)进行验证。

您可以逐个检查消息,或者批量处理一组消息(内部使用 rayon

除了使用上述所有标准验证消息外,还可以通过满足这些标准的子集来验证乱序消息。此 crate 提供了执行此类乱序消息批量验证的函数。

乱序消息验证可以用于单作者或多作者用例(存在针对每种情况的单独函数)。

在验证单个作者的乱序消息时,消息必须由单个密钥对创建。但是,不要求消息的序列号比上一条消息的序列号大 1,也不要求上一条消息的哈希值与消息中给出的上一条消息的哈希值匹配。

相比之下,多作者验证不执行对 previous 消息的任何检查。事实上,可以说这种验证方法没有上一条消息的概念(除了 previous 字段必须按正确顺序出现在消息中)。

有用文档

此 crate 和所有依赖项的文档注释可以通过克隆存储库并运行 cargo doc --open 在本地构建和提供。有关 cargo doc 的更多信息,请参阅 此处

许可证

LGPL-3.0

依赖项

~9.5MB
~174K SLoC