mr-grj/ciphermoth

GitHub: mr-grj/ciphermoth

一款无需账号和云端的隐私优先型自托管密码管理器,所有数据加密存储在用户自有硬件上。

Stars: 18 | Forks: 1

# CipherMoth **让你的秘密隐匿于黑暗中。** 一个简单的、自托管的密码管理器,**没有账号、没有云端,也没有任何旁观者。** [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/mr-grj/ciphermoth/actions/workflows/ci.yml) [![Release](https://img.shields.io/github/v/release/mr-grj/ciphermoth?color=000000&label=release)](https://github.com/mr-grj/ciphermoth/releases/latest) [![License](https://img.shields.io/badge/license-MIT-000000.svg)](./LICENSE) [![Python](https://img.shields.io/badge/python-3.13-000000.svg)](https://www.python.org/) [![PostgreSQL](https://img.shields.io/badge/postgres-16-000000.svg)](https://www.postgresql.org/) [![Self-hosted](https://img.shields.io/badge/self--hosted-7dd3c0.svg?labelColor=000000)](#get-started)
## 这是什么? 我为自己构建了这个工具,因为我厌倦了每个密码管理器都想要我的邮箱地址、订阅费、一个能访问所有内容的浏览器扩展,最好还要我的命。大多数大型密码管理器默认依赖于托管账号、同步层或按月扣费。 我想要一个运行在我自己的机器上、没有遥测、不与任何第三方交互的工具,而且它不会在某天突然宣布被收购并迁移到某个新平台。没有 Google。没有 OAuth。没有向家里发送分析数据。什么都没有。 所以就有了 **CipherMoth**。它运行在你自己的硬件上,不与任何人通信,并且使用只有你知道的密钥来加密保存密码。一个主密码即可解锁一切。如果有人拿到了数据库,他们得到的只是加密的 blob,而不是你的密码。 ## 截图 | | | |---|---| | **首次运行:设置你的主密码** | **密码库** | | ![设置你的密码库](https://static.pigsec.cn/wp-content/uploads/repos/cas/1b/1b482ce6d1dd531255f082291ae8eb750427c0f36872de4886a8a3934e89284b.png) | ![密码库概览](https://static.pigsec.cn/wp-content/uploads/repos/cas/75/753a0e60f9d21d7c276d0626d293b2738585c887cefbfbdde10664755f526c7a.png) | | **添加密码并生成强密码** | **在你的设备上计算的密码库健康度** | | ![使用生成器添加密码](https://static.pigsec.cn/wp-content/uploads/repos/cas/50/50e5b2670fad9510555614e4722d9b481bda15bef75caa74b92594dffbe725b1.png) | ![密码库健康报告](https://static.pigsec.cn/wp-content/uploads/repos/cas/99/99d2c5722a764e7d01dcc0bd5c0178ef2fb14484cb0955b7b781f2919a550779.png) | ## 开始使用 CipherMoth 通过 [Docker](https://docs.docker.com/get-docker/) 运行在你自己的机器上。只需一条命令即可设置强数据库密码、拉取**已签名**的镜像并启动所有服务: ``` curl -fsSL https://raw.githubusercontent.com/mr-grj/ciphermoth/master/install.sh | sh ``` 打开 **[http://localhost:3001](http://localhost:3001)**,创建你的主密码,就可以开始使用了。密码库存在于持久的 Docker volume 中,因此可以在重启和更新后保留数据。 想在通过管道传输给 shell 之前先阅读脚本,还是想手动设置,在真实服务器上运行,或者调整配置?这些内容全都在 **[CONTRIBUTING.md](./CONTRIBUTING.md)** 中。 ## 功能特性 - 一个主密码即可解锁密码库,没有账号,没有邮箱,也不需要把恢复码发送到你三年前就换了的手机号上 - 所有静态密码均被加密;密钥由主密码派生,且绝不会接触服务器 - 在每个条目旁存储用户名、网站、标签、文件夹、双重验证(TOTP)密钥以及你自己的自定义字段,全部经过加密 - 内置双重验证:粘贴一个 2FA 密钥,CipherMoth 就会显示实时滚动的验证码,并在浏览器中计算 - 用于存放任意格式机密信息(恢复码、Wi-Fi、护照详细信息)的安全备忘录,其加密方式与密码相同 - 可为任何条目附加文件(恢复码 PDF、许可证密钥、密钥文件),每个文件最大 5 MB,并使用你的密码库密钥进行加密 - 搜索、收藏、文件夹、标签和密码历史记录,保持不断膨胀的密码库井然有序 - 提供回收站用于删除条目,你可以从中恢复,或者在确定后彻底清空 - 浅色和深色主题可在整个应用中切换,随着颜色褪去,一只飞蛾会振翅飞走(并且会记住你的选择) - 密码库健康检查,标记出弱密码、重复使用的密码和陈旧密码,完全在你的设备上进行 - 加密安全的密码生成器(不是 `Math.random()` 那种),在每个条目上都有强度指示器 - 通过 CSV 从 Chrome、Bitwarden、KeePass、Proton Pass 等导入,或恢复加密的 CipherMoth 备份 - 加密的备份导出,用于终端的 CLI(`ciphermoth`),以及自动锁定和清除剪贴板功能(为了那些值得关注的小细节 ^^) - 通知新版本发布并可自我更新,可选开启并经过签名验证(Sigstore / cosign) ## 适用人群(以及不适用的人群) 如果你符合以下情况,CipherMoth 可能很适合你: - 想要一个没有账号、没有遥测、没有第三方的自托管密码管理器 - 能够在你控制的机器上熟练运行 Docker - 喜欢小巧、可审计的软件,并乐于管理自己的备份 如果你需要浏览器自动填充、移动应用、家庭或团队共享、托管的云端同步,或者在忘记主密码时恢复密码库的方法,那么它(目前)可能不适合你。这完全可以理解,这些都是切实的需求,只不过不是这款工具想要实现的目标。 ## 安全性 直截了当地说,因为这是一个密码管理器,而且你理应了解真相:**CipherMoth 尚未经过独立审计。** 这是我自用的个人项目,构建过程非常小心,特意将加密部分保持得小巧且易读,但它没有经过正式的第三方安全审查。它专为在你信任的硬件上进行自托管的个人使用而设计,而不是作为存储他人机密的公共多租户服务。请据此权衡使用。 工作原理: - 你的主密码使用 **bcrypt** 进行哈希处理,从不以明文存储;新的密码库要求设置一个相当强(12 个字符以上,混合字符类型)的密码,并由服务器强制执行; - 每个存储的字段都使用 **Fernet**(AES-128-CBC + HMAC-SHA256)加密,密钥是通过 **Argon2id**(OWASP 2024 交互式配置)从你的主密码派生的,得益于随机盐,每个密码库的密钥都是唯一的; - 甚至连元数据(网站、2FA 密钥、标签、自定义字段、历史记录、附件)也是加密的;数据库永远不会知道你拥有哪些网站或你是如何组织它们的; - 派生出来的密钥仅存在于你浏览器的 `sessionStorage` 中,从不接触服务器,并在你关闭标签页的那一刻消失 - 密码生成器使用带有拒绝采样的 `crypto.getRandomValues`,不使用 `Math.random()`,没有捷径; **它可以防范**窃取数据库或磁盘的人(他们只能拿到密文和 bcrypt 哈希)、意外的服务器端泄露(服务器从不持久化主密码或派生密钥)以及对存储数据的随意检查。 **它无法防范**在你解锁设备上的恶意软件或键盘记录器、过于简单的主密码、在没有 `https` 的情况下将实例暴露在公共互联网上,或者忘记主密码(无法恢复)。请在你信任的机器和网络上运行它,使用强主密码,并做好备份。 如需报告漏洞,请参阅 [SECURITY.md](./SECURITY.md)。 ## 技术栈 | 层级 | 技术 | |---|---| | 后端 | Python 3.13, FastAPI, SQLAlchemy 2.0, asyncpg | | 数据库 | PostgreSQL 16 | | 前端 | React 19, Vite, MUI v9, easy-peasy | | 包管理器 | uv(后端),npm(前端) | | 基础设施 | Docker, Docker Compose v2 | ## 文档 - **[CONTRIBUTING.md](./CONTRIBUTING.md)** - 修改开发 CipherMoth、在服务器上自托管、配置和更新 - **[docs/CLI.md](./docs/CLI.md)** - `ciphermoth` 命令行参考 - **[SECURITY.md](./SECURITY.md)** - 报告漏洞 - Logo、徽标和网站图标位于 [`docs/brand/`](./docs/brand) ## 许可证 MIT:详见 [LICENSE](./LICENSE)。
标签:PostgreSQL, Python, 数据加密, 无后门, 版权保护, 网络安全, 自定义脚本, 自托管, 请求拦截, 隐私保护