franzjeger/PMMVP

GitHub: franzjeger/PMMVP

Arca 是一款基于 Rust 核心与 Tauri 2 的跨平台本地优先密码管理器,提供端到端加密凭据存储、浏览器自动填充、passkey 认证及 Google Drive 加密同步。

Stars: 0 | Forks: 0

# Arca 一款跨平台密码管理器,在 **macOS、Windows 和 Linux** 上拥有完全一致的 UI。所有安全关键逻辑都位于一个小巧的 Rust 核心中,该核心仅使用经过严格审查的 crates 构建;桌面应用是覆盖在其上的 [Tauri 2](https://v2.tauri.app/) 外壳,浏览器扩展则通过本地桥接与该应用通信。 当前版本:**0.2.0** ## 功能说明 **密码库** - 登录信息、passkey、SSH 密钥、Wi-Fi 网络(附带加入二维码)和安全笔记 - 实时 TOTP 验证码(带倒计时),支持从 Base32 密钥或 `otpauth://` URI 生成 - 强大的密码生成器;弱密码/重复密码审计;通过 k-匿名性针对 HaveIBeenPwned 进行泄露检查(设备仅会发送 5 个字符的哈希前缀) - 查找并合并重复项;支持软删除,可通过回收站恢复 - 更改主密码时无需重新加密每一项 **解锁** - 主密码(Argon2id),或通过受 Touch ID / Windows Hello 保护的 OS keychain 进行快速解锁 - 空闲时和窗口失焦时自动锁定;剪贴板自动清除 **浏览器中**(Chrome、Brave、Edge、Firefox) - 自动填充匹配的登录信息;仅当密码库已解锁,且来源匹配时,才会释放密码 - 在提交表单时提示保存新的或更改后的登录信息 - Passkey:Arca 作为用户实际发起的认证流程的认证器。详见 [`docs/PASSKEYS.md`](./docs/PASSKEYS.md)。 **同步与安全** - 通过您专属的 Google Drive 应用文件夹进行端到端加密同步:Google 仅持有密文。详见 [`docs/SYNC.md`](./docs/SYNC.md)。 - 每次保存前自动创建本地快照,提供脱离设备的加密备份与恢复功能。详见 [`docs/BACKUP.md`](./docs/BACKUP.md)。 - 支持 CSV 导入(Safari/Apple Passwords、Chrome、Brave、Edge、Firefox 及通用格式)以及受生物识别保护的 CSV 导出 **其他功能** - 内置 ssh-agent:密码库中的 SSH 密钥通过 Unix socket(macOS/Linux)或 OpenSSH named pipe(Windows)为 `ssh` 和 `git` 提供服务,签名在进程内完成,因此私钥永远不会触及磁盘 ## 平台状态 | 平台 | 状态 | | --- | --- | | **macOS** | 日常主力平台。支持签名 + 可公证的发布版本,详见 [`docs/RELEASING.md`](./docs/RELEASING.md)。 | | **Windows** | 运行正常,包含 ssh-agent named pipe。通过 CI 构建。 | | **Linux** | 可成功构建并通过 CI(包含 X11/Wayland 剪贴板冒烟测试),但**从未由人类实际运行过**。请视为未经测试。 | | **iOS** | 已在 `apps/ios/` 中建立基础框架。包含只读查看器 + AutoFill provider,支持 Face ID 快速解锁。同步功能基于 C ABI (v5),但**目前 Swift 尚未对其进行任何调用**,因此密码库仍需手动导入。已由 CI 编译,**从未在设备上运行过**。详见 [`docs/IOS.md`](./docs/IOS.md)。 | | **Android** | 未构建。 | | **系统级 macOS AutoFill** | 已搁置。技术上可行,但每次填充都需要 Touch ID 验证,且需与 Apple 自带的密码菜单竞争,导致体验不如浏览器扩展。源代码保留在 `apps/macos/` 中。 | 自动更新功能已准备就绪,但**尚未接入**:签名密钥已存在,但插件和发布 manifest 尚未就绪。目前升级到新版本仍需手动替换应用([`docs/RELEASING.md`](./docs/RELEASING.md))。 ## 架构 ``` crates/ ├── vault-core/ Pure Rust, no I/O. Crypto, data model, TOTP, passkeys, │ password generation, merge, dedupe, breach hashing. ├── vault-store/ Atomic single-file persistence, rotating snapshots, │ OS-keychain quick unlock. ├── vault-ffi/ C ABI over the core, for native platform integrations │ (Swift). ABI v5, including the sync surface. ├── vault-secmem/ mlock'd buffers for key material. ├── vault-appgroup/ macOS App Group container resolution (one isolated │ Objective-C call, so the app crate stays unsafe-free). └── vault-sync/ End-to-end encrypted sync: the Google Drive client, the OAuth token calls, and the pull→merge→push engine, over traits so each platform supplies its own storage and UI. apps/ ├── desktop/ Tauri 2 app │ ├── src-tauri/ Rust shell: commands, state, sync glue, bridge, │ │ ssh-agent. │ └── src/ React + TypeScript + Tailwind three-pane UI. ├── apple-shared/ VaultBridge.swift — the Swift side of vault-ffi, shared │ verbatim by the macOS and iOS targets. ├── macos/ Shelved AutoFill credential provider (host + extension). └── ios/ SwiftUI app + AutoFill extension. Scaffold, never built. extension/ ├── chromium/ Manifest V3 (Chrome/Brave/Edge) + a Firefox manifest. └── native-host/ Rust native-messaging bridge to the desktop app. ``` **密钥层级:** 主密码 ──Argon2id──▶ 主密钥 ──XChaCha20-Poly1305(解包)──▶ 随机的 256 位 *密码库密钥* ──按项 AEAD──▶ 每一项。主密码从不存储;仅持久化*封装*的密钥,这就是更改主密码无需重新加密数据的原因,也是忘记主密码后无法恢复的原因。 ## 前置条件 - **Rust** ≥ 1.80(`rustup`)。核心、存储和 native host 仅通过 `cargo` 即可构建。 - **Node.js** ≥ 18 + npm,用于桌面端前端。 - **Tauri 2 的平台工具链:** - **macOS:** Xcode Command Line Tools (`xcode-select --install`)。 - **Windows:** WebView2 runtime(Win 11 已预装)+ MSVC Build Tools。 - **Linux (Debian/Ubuntu):** sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file \ libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev \ libdbus-1-dev (快速解锁 keychain 需要 `libdbus-1-dev`/Secret Service。) ## 构建与测试 ``` cargo test # all Rust crates cargo clippy --workspace --all-targets -- -D warnings cd apps/desktop && npm ci && npm test # frontend component tests ``` 包含约 173 个 Rust 测试和 9 个前端测试。`vault-core` 没有 I/O 操作,属于安全关键层面:其测试涵盖加解密往返、错误密码失败、AEAD 篡改检测、KDF 确定性、TOTP RFC 6238 向量、磁盘上的项目编解码、同步合并以及快速解锁密钥偏移。 需要真实 OS secret store 的测试被标记为 `#[ignore]`(它们可能会弹出提示): ``` cargo test -p vault-store -- --ignored ``` ### 冒烟测试门控 ``` scripts/smoke-test.sh # Rust tests, frontend build, component tests scripts/smoke-test.sh --full # + OS keychain tests + a live bridge round-trip ``` `scripts/install-app-macos.sh` **若未通过此测试则拒绝安装**。设立此门控的原因是,曾经发布过虽然通过了部分检查,但实际用户操作流程却已损坏的构建版本。 ## 运行桌面应用 ``` cd apps/desktop npm install npm run tauri dev # hot-reload, any OS ``` 在 macOS 上,使用 `scripts/install-app-macos.sh` 安装本地签名构建版本。如需构建可供其他机器运行的版本,请参阅 [`docs/RELEASING.md`](./docs/RELEASING.md)。 密码库位于按用户划分的应用数据目录中,文件名为 `default.vault`,例如 macOS 上的 `~/Library/Application Support/no.sybr.vault/`,其快照文件并存于旁边的 `snapshots/` 目录中。 ## 浏览器扩展 加载已解压的 `extension/chromium/`,然后安装 native-messaging host,以便扩展能够连接到应用。各浏览器的具体说明请参见 [`extension/README.md`](./extension/README.md)。应用必须处于**已解锁**状态,自动填充功能才能返回数据。 ## 持续集成 [`.github/workflows/ci.yml`](./.github/workflows/ci.yml) 会在 push 和 PR 时运行: - 在 Linux、Windows 和 macOS 上进行 **`test`**:前端类型检查 + 打包、前端组件测试、`cargo fmt --check`、`cargo clippy -D warnings` 以及 `cargo test --workspace`。 - **`linux-smoke`**:包含被标记为 `#[ignore]` 的真实 OS 测试,以确保 `arboard` 剪贴板路径能真正在 **X11**(Xvfb)上执行,并尽最大努力在 **Wayland**(headless `sway`)上运行,外加针对 gnome-keyring 尽力而为的 keychain 测试。 CI 无法执行跨应用程序的交互式粘贴。在向 Linux 用户发布之前,这仍需在真实的 X11 *和* Wayland 环境下进行手动验收测试。 ## 安全性 零知识、本地优先、无遥测。除您选择同步的密文以及运行泄露检查时发送的 5 个字符的密码哈希前缀外,不会向任何地方发送任何信息。 [`SECURITY.md`](./SECURITY.md) 和 [`THREAT_MODEL.md`](./THREAT_MODEL.md) 明确指出,**在投入实际使用前必须进行独立的第三方审计**,并列出了已知的残余风险。 ## 许可证 根据您的选择,采用 [MIT](./LICENSE-MIT) 或 [Apache-2.0](./LICENSE-APACHE) 双重许可。
标签:Passkey, Rust, SSH Agent, Tauri, 可视化界面, 密码管理器, 桌面应用, 浏览器扩展, 端到端加密, 网络流量审计, 通知系统