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, 区块链, 可视化界面, 密码学, 手动系统调用, 桌面应用, 测试用例, 网络流量审计, 通知系统, 防篡改账本, 零知识证明, 默克尔树