OlympusLedgerOrg/Olympus

GitHub: OlympusLedgerOrg/Olympus

Olympus 是一个纯本地运行的可验证账本,利用 Sparse Merkle Tree 与零知识脱敏证明,让敏感文档的存在性、完整性和脱敏诚实性具备密码学可证明且离线可验证的能力。

Stars: 2 | Forks: 0

# Olympus 当一份文件被泄露、篡改或遭到否认时——通常没有办法证明它原本的内容是什么、它何时存在过,或者它是否被动过手脚。 Olympus 解决了这个问题。 它专为处理敏感记录的组织而设计——记者、律师、监督机构、人权调查员——他们需要证明一份文件是真实的、未经篡改的,并且在特定的时间点确实存在。不是因为某人这么说。而是因为数学这么说。 无需信任任何服务器。没有可被传唤的公司。事后也无法悄无声息地更改记录。你的文档永远不会离开你的电脑——发布的仅仅是一个加密证明,而且该证明无法被逆向工程还原出原始文档。如果你想更进一步,你可以运行自己的节点,成为让整个系统值得信任的网络的一部分。 你不必信任我们。你可以成为我们。 ## Olympus 的不同之处 还有其他工具可以解决这个问题的一部分。但没有一个能解决全部问题。 | 工具 | 功能 | 局限性 | |------|-------------|-------------------| | **SecureDrop** | 匿名接收泄露的文件 | 无法证明文件的真实性、时间节点或文件是否被篡改 | | **OpenTimestamps** | 通过 Bitcoin 证明文件在特定时间点存在 | 没有脱敏功能、没有包含证明、没有联邦机制、无法进行离线验证 | | **Sigstore / Rekor** | 用于软件的公共透明度日志 | 为代码而非文档设计;没有 ZK 脱敏;需要网络访问权限 | | **C2PA** | 在捕获照片和媒体时进行认证 | 需要在创建时进行签名;无法用于现有文档 | | **Arweave / Filecoin** | 在去中心化网络上存储文档 | 信任依赖于链;无法离线验证;不感知脱敏 | Olympus 完成了整个链条:证明文档存在过、证明它未被篡改过、证明任何被脱敏的内容都是如实脱敏的——并且所有这些都是离线完成的,无需信任任何单一组织,采用的格式能够在数年后由法院进行验证。 值得注意的是,Olympus 实际上使用了 OpenTimestamps 和 Sigstore Rekor 作为锚定层——因此,在更强大的证明系统内部,你获得了 Bitcoin 级别的时间戳和公共透明度日志,而不是用它们来替代该系统。 ## 适用人群 | 我是... | 从这里开始 | |-----------|-----------| | 记者或调查员 | [`docs/court-evidence.md`](docs/court-evidence.md) | | 律师或专家证人 | [`docs/court-evidence.md`](docs/court-evidence.md) → [`verifiers/`](verifiers/) | | 拨款审查员 / 外部评估员 | [`GRANTS.md`](GRANTS.md) → [`DEMO.md`](DEMO.md) | | 安全审计员 | [`docs/SECURITY_AUDIT_REPORT_V4.md`](docs/SECURITY_AUDIT_REPORT_V4.md) → [`docs/threat-model.md`](docs/threat-model.md) | | 开发者或贡献者 | [`docs/quickstart.md`](docs/quickstart.md) → [`CONTRIBUTING.md`](CONTRIBUTING.md) | | ZK / circuit 审查员 | [`proofs/circuits/`](proofs/circuits/) → [`src-tauri/src/zk/`](src-tauri/src/zk/) | ## 它是如何工作的(通俗语言) - **证明一份文档存在过** 在特定的时间点——同时锚定到 Bitcoin、公共透明度日志和认证时间戳 - **证明它未被篡改过** ——任何更改,无论多么微小,都会产生不同的加密证明 - **证明脱敏是诚实的** ——如果在共享前移除了敏感信息,Olympus 会证明被移除的内容是什么,而不会将其泄露 - **你的文档永远不会离开你的电脑** ——Olympus 仅发布加密证明。该证明确认文档存在过且未被更改。文档本身留在你这里。任何人——无论是 Olympus、服务器还是网络——都永远看不到它 - **在你的机器上运行** ——没有外部服务器,没有云依赖,没有可能会被施压或传唤的单一组织 - **离线工作** ——任何人、在任何地方都可以检查验证包,无需互联网连接 - **你可以成为信任网络的一部分** ——任何人都可以运行 Olympus 节点。存在的独立节点越多,任何单一政府、公司或恶意行为者对系统施加压力的难度就越大。你不必信任我们。你可以成为我们。 - **专为法庭打造** ——请参阅 [`docs/court-evidence.md`](docs/court-evidence.md) ## 当前状态 Olympus 正在积极开发 v0.10 版本。核心账本、加密证明和桌面应用程序均已上线。发布前剩余的里程碑是一个多贡献者参与的加密仪式,旨在消除最后一个单点信任。请参阅 [`ROADMAP.md`](ROADMAP.md)。 ## 信任与威胁模型 Olympus 对其保护的内容和不保护的内容非常坦诚。 它能防御:恶意记录篡改、时间戳被篡改以及无法完全信任的操作者。 它不保证:所有相关记录都已提交、提交的内容是保密的,或者如果操作者离线,系统仍能保持可用。 完整详情:[`docs/threat-model.md`](docs/threat-model.md) ## 许可协议 Apache 2.0。一切都是开源的——协议、加密 circuit、存储层、验证工具和桌面应用程序。请参阅 [`THIRD_PARTY_LICENSES.md`](THIRD_PARTY_LICENSES.md)。 *本行以下的所有内容均为面向开发者、审计员和贡献者的技术文档。* ## 技术架构 ### CD-HS-ST: 恒定深度分层稀疏树 Olympus 构建于 **CD-HS-ST** 之上——这是一个单一的全局 256 级 Sparse Merkle Tree,其中 shard 身份被直接编码到 leaf key 中,而不是作为独立的 per-shard 树进行维护。 ``` key = H(GLOBAL_KEY_PREFIX || shard_id || record_key) ``` 其中 `record_key = H(KEY_PREFIX || len(type) || type || len(id) || id || version)`。 在哈希之前,两个输入都进行了**长度前缀**处理,以防止字段边界碰撞。这取代了早期的双树模型(per-shard SMT + forest SMT),该模型存在 TOCTOU 和一致性隐患。 ### 服务架构 ``` +---------------------------------------------------+ | Tauri 2 Desktop App | | - React + TypeScript + Vite frontend | | - Native OS integration (file I/O, tray, etc.) | +-------------------+-------------------------------+ | Tauri commands / IPC v +---------------------------------------------------+ | Axum HTTP Server (src-tauri/src/) | | - Ingest, ledger, redaction, admin routes | | - Auth middleware (API key validation) | | - ZK proof generation (Baby Jubjub + Groth16) | +-------------------+-------------------------------+ | sqlx v +---------------------------------------------------+ | pg_embed (embedded PostgreSQL) | | - No external database process required | | - sqlx migrations (src-tauri/migrations/) | | - Global 256-level SMT in smt_nodes table | +---------------------------------------------------+ ``` ### Pipeline ``` Ingest -> Canonicalize -> Hash -> Commit -> Prove -> Verify ``` 所有阶段都是独立可验证的。规范化版本目前为 **`canonical_v2`**(参见 [`CHANGELOG.md`](CHANGELOG.md))。 ### 加密原语 | 原语 | 使用位置 | |-----------|-----------| | BLAKE3 (域分离) | 所有账本哈希、CD-HS-ST leaf/node 哈希、全局 key | | Ed25519 (ed25519-dalek) | Shard header 签名、checkpoint root | | Baby Jubjub + Poseidon (BN254) | ZK circuit commitment 和 EdDSA 签名 | | Groth16 (原生 Rust / arkworks 0.6) | ZK 证明:文档存在性、脱敏有效性、不存在性、统一的规范化-包含-root-签名 | | Tor (arti-client 0.31) | Federation 隐藏服务 + 对等节点 checkpoint gossip(可选的 `federation` feature) | | RFC 3161 | 每个 checkpoint 上的认证 TSA 回执(`anchoring/rfc3161.rs`) | | Sigstore Rekor | 每个 checkpoint 上的仅追加公共透明度日志条目(`anchoring/rekor.rs`) | | OpenTimestamps + Bitcoin | 锚定在 Bitcoin 上的回执,可从 pending 升级为完整的 block-header 路径(`anchoring/ots.rs`) | ## 技术栈 | 层级 | 技术 | |-------|-----------| | **桌面外壳** | Tauri 2 | | **后端 / API** | Axum (Rust), tokio async runtime | | **存储** | pg_embed (嵌入式 PostgreSQL), 带有编译时查询的 sqlx | | **加密** | `crates/olympus-crypto`: BLAKE3, Ed25519, Poseidon BN254, Baby Jubjub, Groth16 (arkworks 0.6) | | **ZK circuit** | Circom, circomlib (Poseidon); 原生 Rust Groth16 证明者 | | **前端** | React 18, TypeScript, Vite, Tailwind CSS, TanStack Query | | **质量工具** | `cargo test`, `cargo clippy`, `cargo fmt`; 前端 ESLint + TypeScript | ## 快速开始 跨平台 (Linux / macOS / WSL Ubuntu): ``` git clone https://github.com/OlympusLedgerOrg/Olympus.git cd Olympus pnpm install # frontend deps cargo tauri dev # starts embedded DB, Axum server, and Vite UI ``` 基础应用程序不需要安装外部 PostgreSQL、Python 或 Go。 关于进程内 ZK 证明者(`/zk/prove` 返回真实证明),请参阅下方的 [Groth16 trusted setup](#groth16-trusted-setup)。 ### 构建桌面应用 ``` cargo tauri build ``` ### 独立运行前端 ``` cd app/public-ui pnpm dev ``` ### 运行 Rust 测试 ``` cargo test --workspace cargo clippy --workspace -- -D warnings ``` ### Groth16 可信设置 两个脚本,共享相同的阶段 1 输入(`proofs/keys/powersOfTau28_hez_final_20.ptau`): - **`proofs/setup_circuits.sh`** — 适用于开发的快速一体化路径。每个 circuit 包含单个开发阶段 2 贡献 + 自动执行 `export_ark_zkey` 转换为运行时的 `.ark.zkey` 格式。非生产安全(单一贡献者)。 - **`proofs/phase2_ceremony.sh prepare | contribute | verify | finalize`** — 适用于 v1.0 版本发布的多贡献者阶段 2 仪式。每个贡献者在自己的机器上添加独立的熵;协调者验证链条并使用可选的公共随机信标完成最终确认。 Hermez 阶段 1 文件在每次运行时都会进行校验和验证(BLAKE2b `89a66eb5…`);你可以让脚本下载它,也可以预先将自己的副本放入 `proofs/keys/powersOfTau28_hez_final_20.ptau`。 在 `OLYMPUS_ENV=production` 环境下,如果任何 circuit 产物是 `PLACEHOLDER`(即设置尚未运行),二进制文件将拒绝启动。有关完整的 pipeline,请参阅 [`proofs/README.md`](proofs/README.md)。 ## 仓库布局 ``` src-tauri/ Tauri + Axum backend (Rust) src/ main.rs Tauri entry point, proofs_dir resolution, IPC commands bootstrap.rs Bootstrap admin API key + BJJ authority key db.rs pg_embed + connect_external (with migrations) server/ Axum router setup api/ HTTP route handlers ingest.rs, ledger.rs, redaction.rs, admin.rs, keys.rs user_auth.rs, credentials.rs zk.rs /zk/verify, /zk/prove (scope-gated) middleware/auth.rs API key + rate limit extractors routes/ Additional Axum routes public_stats.rs Public ledger statistics zk/ Native Rust Groth16 prover + verifier prove.rs, verify.rs, vkey.rs, zkey.rs, poseidon.rs witness/ Per-circuit witness assembly + BJJ EdDSA federation/ Tor hidden service, peer mgmt, checkpoint gossip api.rs, peer.rs, checkpoint.rs, equivocation.rs, gossip.rs anchoring/ RFC 3161 / Sigstore Rekor / OpenTimestamps rfc3161.rs, rekor.rs, ots.rs, store.rs, api.rs bin/export_ark_zkey.rs snarkjs .zkey → arkworks .ark.zkey converter state.rs AppState (pool, BJJ key, proofs_dir, anchoring …) build.rs Tauri build + ZK artifact placeholder shim tauri.conf.json Bundle config (resources include proofs/keys/*) migrations/ sqlx migration files (applied at startup) app/public-ui/ React + TypeScript + Vite frontend crates/ olympus-crypto/ Protocol-critical hash/key primitives (BLAKE3, Poseidon, SMT) light-poseidon/ Vendored Light Protocol Poseidon, ark-* 0.6 compatible proofs/ Circom circuits + Groth16 tooling circuits/ 4 circuits: document_existence, non_existence, redaction_validity, unified_canonicalization_inclusion_root_sign setup_circuits.sh Dev: PTAU → compile → Phase 2 → vkey → .ark.zkey phase2_ceremony.sh Production: multi-contributor Phase 2 orchestration keys/verification_keys/ Committed Groth16 vkey JSONs schemas/ JSON schema definitions verifiers/ Cross-language verifiers (Rust, JavaScript) test_vectors/ Golden test vectors for cross-language determinism docs/ Architecture, threat model, security audits, ADRs ``` ## 当前仓库状态 **当前阶段:** v0.10 — 包含嵌入式 Axum server 和 pg_embed 存储的 Tauri 2 桌面应用程序。该应用程序是自包含的——运行基础节点不需要外部服务。 **已上线功能:** - 包含 React 前端的 Tauri 2 桌面外壳 - Axum HTTP server (ingest、ledger、redaction、admin、auth、federation、ZK、anchoring 路由) - 通过 pg_embed 实现的嵌入式 PostgreSQL + sqlx 迁移(同时也会针对外部 `DATABASE_URL` 运行迁移) - BLAKE3 CD-HS-ST sparse Merkle tree - Ed25519 root 签名(持久化 authority key) - 原生 Rust Groth16 证明者 + 验证者 (arkworks 0.6, Baby Jubjub + Poseidon BN254) - `/zk/prove` 和 `/zk/verify` HTTP endpoint(通过 API key 进行权限控制) - Federation 功能(`--features federation`):Tor hidden service、对等信任管理、checkpoint gossip、等价性检测 - **外部锚定** (RFC 3161 / Sigstore Rekor / OpenTimestamps):每个 checkpoint 都可以由认证的 TSA 进行联签、在公共透明度日志中注册,并通过 OTS 提交到 Bitcoin——从而为外部各方(法院、审计员、记者)提供无需信任 Olympus federation 的验证路径。请参阅 [`docs/court-evidence.md`](docs/court-evidence.md)。 **外部依赖(一次性):** Groth16 trusted setup。两种途径: - **开发/单一贡献者** — `bash proofs/setup_circuits.sh`(在 v1.0 之前可接受,不适用于 v1.0) - **多贡献者仪式** — `bash proofs/phase2_ceremony.sh {prepare|contribute|verify|finalize}`(在标记 v1.0 版本前必须执行) 在 `OLYMPUS_ENV=production` 环境下,如果任何 circuit 产物是构建时的占位符,二进制文件将拒绝启动。 ## 核心开发者入口 | 内容 | 位置 | |------|-------| | Tauri 入口点 | `src-tauri/src/main.rs` | | Axum server / router | `src-tauri/src/server/mod.rs` | | ZK proof 生成 | `src-tauri/src/zk/` | | 共享 crypto crate | `crates/olympus-crypto/` | | 前端 API client | `app/public-ui/src/lib/api.ts` | | sqlx 迁移 | `src-tauri/migrations/` | | ZK circuit | `proofs/circuits/` | | 验证者 | `verifiers/` | | 安全审计 | [`docs/SECURITY_AUDIT_REPORT_V4.md`](docs/SECURITY_AUDIT_REPORT_V4.md)| 威胁模型 | [`docs/threat-model.md`](docs/threat-model.md) | | 架构决策 | [`docs/architecture.md`](docs/architecture.md) | ## 外部安全审查 Olympus 在设计上易于接受审计,并鼓励进行外部审查: - 安全策略和协调披露:[`SECURITY.md`](SECURITY.md) - 面向审计员和决策者的威胁模型:[`docs/threat-model.md`](docs/threat-model.md) - 最新安全审计报告(2026 年 6 月 - V4):[`docs/SECURITY_AUDIT_REPORT_V4.md`](docs/SECURITY_AUDIT_REPORT_V4.md) - 以往审计轮次(已归档):[`V1`](docs/audits/archive/SECURITY_AUDIT_REPORT.md)、[`V2`](docs/audits/archive/SECURITY_AUDIT_REPORT_V2.md)、[`V3`](docs/audits/archive/SECURITY_AUDIT_REPORT_V3.md) ## 社区与治理 Olympus 欢迎贡献者,并正在积极扩大其维护者团队。 | 主题 | 文档 | |-------|----------| | 如何贡献(DCO 签名) | [`CONTRIBUTING.md`](CONTRIBUTING.md) | | 期望的行为与执行 | [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md) | | 职责划分与贡献者阶梯 | [`MAINTAINERS.md`](MAINTAINERS.md) | | 决策、投票和发布方式 | [`docs/governance.md`](docs/governance.md) | | 提议重大变更 | [`docs/rfcs/README.md`](docs/rfcs/README.md) | | 项目未来规划 | [`ROADMAP.md`](ROADMAP.md) | | 报告漏洞 | [`SECURITY.md`](SECURITY.md) | 对维护者角色感兴趣吗?请参阅 [成为维护者](MAINTAINERS.md#becoming-a-maintainer)。
标签:Rust, Tauri, 区块链, 可视化界面, 密码学, 手动系统调用, 桌面应用, 测试用例, 网络流量审计, 通知系统, 防篡改账本, 零知识证明, 默克尔树