notvcto/vwh

GitHub: notvcto/vwh

一个原生 Rust CLI 工具,用于对 256 字节数字工件进行 Ed25519 签名与离线验证,将密码学签名有效性与归属信任分离开来。

Stars: 4 | Forks: 0

# VWH — Victor Was Here [![Crate](https://img.shields.io/crates/v/vwh.svg)](https://crates.io/crates/vwh) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) 一种密码学工件格式,用于证明特定的意图在特定的时间点由特定的密钥记录,而不仅仅是特定的个人。这一区别正是其核心意义所在。 **签名证明的是密钥所有权。注册表提供归属上下文。** 这是两个独立的声明,VWH 在设计上将它们保持分离。 ## 它是什么 你创建一个带有意图的工件(一个字符串。一项承诺、一个决定、一份声明)。你使用你的 Ed25519 签名密钥对其进行签名。你也可以选择使用独立的封印密钥对其进行封印,使其不可变。该工件大小为 256 字节。它支持离线验证。注册表仅起建议作用。 ``` Draft → Signed → Sealed ``` - **草稿 (Draft)**:已记录意图,已绑定密钥,尚无签名 - **已签名 (Signed)**:作者签名覆盖工件 + 备注哈希 - **已封印 (Sealed)**:来自独立封印密钥的第二个签名;该工件现已不可变 V2 工件包含一个 BLAKE3 备注哈希。备注本身存在于 `.vwh.note` sidecar 文件中。如果哈希不匹配,`vwh inspect` 会通知你。 ## 安装 ``` cargo install vwh ``` 或者从源码构建: ``` cargo build --release # 二进制文件位于 target/release/vwh ``` ## 用法 **检查工件:** ``` vwh inspect artifact.vwh ``` **读取附加备注:** ``` vwh note artifact.vwh ``` **离线(跳过注册表检查):** ``` vwh inspect artifact.vwh --offline ``` **自定义注册表:** ``` vwh inspect artifact.vwh --registry https://example.com/vwh-registry # 或者 export VWH_REGISTRY_URL=https://example.com/vwh-registry vwh inspect artifact.vwh ``` ## `vwh inspect` 检查什么 按顺序: 1. **工件解析** — 这是一个有效的 `.vwh` 文件吗? 2. **备注验证** — 如果是 V2,sidecar 哈希是否匹配? 3. **作者签名** — 对工件主体进行的 Ed25519 签名 4. **封印签名** — 如果已封印,对包含封印密钥的工件进行的 Ed25519 签名 5. **注册表提交签名** — 注册表的最新提交是否已进行 GPG 签名?如果没有,则回退到上一个已签名的提交 6. **密钥状态** — 签名密钥是活跃、已弃用还是已吊销?如果已弃用,该工件是否早于轮换时间? 7. **账本状态** — 该工件是否已被公开承认,或者已封印但未出现在账本中(可疑)? 带有未签名注册表提交的有效签名会被明确指出。由演示密钥产生的有效签名也会被明确指出。输出结果不会隐瞒任何事情。 ## 注册表 默认注册表:`https://notvc.to/vwh-registry` 该注册表由一个公开的 git 仓库(`github.com/notvcto/vwh-registry`)支持。在信任注册表数据之前,检查器会检查 HEAD 提交是否已进行 GPG 签名。如果没有(可能是由于篡改的推送、CI 密钥或错误),它会往回遍历最近的 20 次提交,找到最近一次已签名的提交,并获取该 SHA 下的 `keys.json` 和 `ledger.json`。 注册表数据始终是建议性的。签名验证始终在本地进行,并优先采用离线方式。 ## 🏴‍☠️ “陷害我”挑战 VWH 区分了从外部看完全相同的两件事:**有效的签名**和**可信的归属**。 为了证明这种差距确实存在,我已经发布了官方演示身份的两个私钥:签名密钥和封印密钥。使用它们,你可以生成一个完美的双重签名 V2 工件,从而通过 `vwh inspect` 运行的所有密码学检查。 **我挑战你来陷害我。** ### 演示凭据 | | | |---|---| | 签名密钥(已加密) | [`examples/demo-key/signing.key.enc`](examples/demo-key/signing.key.enc) | | 签名公钥 | `c043ce6b9a8f6d4c44bb4198b92261e1a6062e6d925fe3430f1bcdbcbd07dc1c` | | 封印密钥(已加密) | [`examples/demo-key/sealing.key.enc`](examples/demo-key/sealing.key.enc) | | 封印公钥 | `d7e15d78527d085a4061867f933a8be56f0daa9d8e9431f8127a0efcba0d702a` | | 密码(用于两个密钥) | `vwh-demo-mode` | 其中包含了一个使用这些确切密钥签名的真正已封印 V2 工件,以便你能在尝试击败它之前看到“完全有效”是什么样子: ``` vwh inspect examples/challenge.vwh vwh note examples/challenge.vwh ``` ### 如何参与 1. 使用 `vwh-core` 库和上面的密码解密密钥 2. 构建一个 `.vwh` 草稿,使用签名密钥对其进行签名,并使用封印密钥对其进行封印 3. 运行 `vwh inspect your-artifact.vwh` ### 你会得到什么 ``` [OK] Author signature valid [OK] Artifact integrity verified [OK] Seal signature valid [OK] DUAL-SIGNED (immutable) ``` 接下来: ``` [WARN] DEMO KEY — do not trust for attribution This key is intentionally public (Frame Me challenge). Valid signature ≠ Victor's presence. ``` 注册表将这些密钥标记为 `"is_demo": true`。这与状态无关。由我已经发布给全世界的密钥产生的有效签名,根本无法证明是谁在持有它。 **这个差距正是核心所在。** 密码学证明的是密钥所有权。归属则需要在密码学之上建立信任模型。VWH 让你分别看待这两者,而不是将它们混为一谈。 ## 架构 ``` vwh-core — format, parsing, signing, verification (library) vwh — public inspector CLI (this crate) ``` 私有的作者创作工具(`vwh-author`)未公开发布。它负责处理密钥生成、签名、封印、密钥轮换、吊销以及注册表发布。 ## 构建与测试 ``` cargo test --workspace cargo fmt --check cargo clippy --workspace -- -D warnings ``` ## 许可证 MIT — 见 [`LICENSE`](LICENSE)。
标签:CVE, Rust, 区块链/溯源, 可视化界面, 密码学, 手动系统调用, 数字签名, 数据验证, 网络安全研究, 网络流量审计, 通知系统