跳转到内容

验证、规范化和签名

Signed Document 处理是一个有序的语义管道。内部功能边界可能不同,但验收和诊断分类必须保留规范的阶段顺序。

在六个阶段中,强制执行通用 JSON 和时间戳配置文件 (MWP-FND-004),保留时间戳词汇文本 (MWP-FND-005),需要规范的 base64url、哈希值和安全整数(MWP-FND-007),并启用每个规范模式格式断言(MWP-FND-009)。相同的规范线路规则适用于所有内容派生的哈希值和签名 (MWP-EVT-012)。

控制序列为MWP-SDV-015:

  1. 严格解析恰好一个 UTF-8 JSON 值;拒绝字节顺序标记、尾随数据、无效 UTF-8 和重复的解码成员名称;
  2. 依据规范 Schema 验证完整文档;
  3. 验证签名信封、受保护时间、预期签名者规则和严格的 Ed25519 签名编码;
  4. 验证完整的 Organization 范围 Registry 证据,解析密钥和 Principal,并根据保留的密钥历史检查受保护签名时间;
  5. 仅省略顶层 signature 成员并生成 RFC 8785 JCS 字节;
  6. 验证这些确切字节上的纯 Ed25519 签名。

验证者在第一个失败阶段停止,并且不会在所有六个阶段完成之前授权参与者、附加 Event 或执行状态转换。

JCS 输入仅限于 RFC 8785 和 I-JSON 数据模型。数字是用所需的最短往返形式序列化的有限 IEEE 754 二进制 64 值;在发出规范字节之前,该域之外的未配对的 Unicode 代理和值会失败 (MWP-FND-006)。

不要将传入线路 JSON 规范化来代替解析或架构验证。规范化是第 5 阶段,在控制阶段分类的所有早期语义检查之后对接收到的值进行操作。

提供商导入成功不是接受规则。验证者:

  • 规范地解码 Renc,需要素数阶子组成员资格,接受仅 0 <= S < L,并且不会减少超出范围的标量 (MWP-SDV-003);
  • 强制执行不可变的密钥 ID 到 Principal、算法和公钥绑定 Organization范围的无重用和无别名不变量(MWP-SDV-004);
  • 严格将 32 字节公钥解码为规范的、非身份的,素数阶 Edwards25519 点 (MWP-SDV-005);和
  • 检查精确的 stage-5 字节上的 pure-Ed25519 验证方程(MWP-SDV-006)。

Registry 保留足以证明绑定唯一性和不存在声明的索引和历史记录 (MWP-SDV-007)。

每个 Signed Document 架构映射到一个受保护的签名时间字段和一个预期签名者。确切的签名者在 MWP-SDV-001 下选择。受保护时间和 signature.createdAt 使用大写 Z,必须逐字节相同,并且在比较之前无法修复或标准化 (MWP-SDV-002)。

第 4 阶段比选定键查找更宽:

  • 证据的范围恰好是一个 Organization 和一个相干的权威Registry修订;
  • Organization范围内不可重用所需的每个绑定和保留的历史记录项,在选择之前验证无别名和完整性声明(MWP-SDV-008);
  • 部署适配器建立修订的适用性、完整性和历史报道或报告不能(MWP-SDV-010);和
  • 根据半开 validFrom、validUntil 检查受保护时间,以及 revokedAt 边界为瞬时 (MWP-SDV-014)。

不可用的证据、不完整的覆盖范围、权威的未知密钥、无效的不相关绑定和无效的选定密钥都在第 4 阶段失败关闭。Evidence 可能来自完整快照或权威索引和查询,但部分缓存不能代替 Organization 范围的证明(MWP-SDV-009)。仅在建立完整性后,未知密钥才具有权威性 (MWP-SDV-011)。

有效性历史记录是仅附加的或显式版本化的;保留其最早有效的 validUntil 和 revokedAt 边界以供历史验证(MWP-SDV-012)。所选密钥的绑定 Principal 必须等于确切的预期签名者 (MWP-SDV-013)。

签名者构造的受保护值与验证者将重建的保护值相同:

  1. 构造所有非签名字段,包括文档类型要求的受保护签名时间字段。
  2. 选择受保护时间和预期签名密钥,保留也将成为 signature.createdAt 的大写 Z 时间戳拼写。
  3. 从不含顶层 signature 成员的完整对象生成 RFC 8785 JCS 签名字节。
  4. 对这些确切字节计算签名哈希和纯 Ed25519 签名,并将签名编码为规范的无填充 base64url。
  5. 附加完整签名信封,其中包含 Ed25519、所选密钥 ID、逐字节相同的受保护时间和编码后的签名值。
  6. 发布前,依据完整的规范 Schema 和同一个六阶段验证器验证最终 Signed Document。

签名哈希独立于准入状态,并具有 MWP-SDV-017 定义的确切形式。阶段编号是语义分类,而不是所需的功能边界,如 MWP-SDV-016 所阐明的那样。

在将准入分层到六阶段结果之上之前,针对本地密码学一致性捆绑包运行每个实现。