willpiam/even-better-privacy

GitHub: willpiam/even-better-privacy

EBP 是一个从零构建的后量子安全加密通信与身份管理系统,旨在替代传统 PGP,提供抗量子计算威胁的邮件加密、数字签名和去中心化身份管理能力。

Stars: 2 | Forks: 0

# EBP: Even Better Privacy ![logo](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/944dae49d3062537.png) EBP 是 PGP 自封的继任者,从零开始构建,旨在实现量子安全。 本仓库包含 EBP 的参考实现。其目的是展示系统的架构、协议和预期使用模型,而不是作为经生产强化的安全解决方案。 项目主页:[williamdoyle.ca/ebp](https://williamdoyle.ca/ebp) ## 安装 所有发布的程序文件都将带有来自 [ebpdk1m6l96sg6xpwcspl5yn9zph8j82x7ujsuuwl5gwqhctgmndjtvvjq5vwp99](https://ebp-cqyo.onrender.com/api/v1/identity/ebpdk1m6l96sg6xpwcspl5yn9zph8j82x7ujsuuwl5gwqhctgmndjtvvjq5vwp99) 的 EBP 签名。 ### 对于 Linux - 前往 [发布页面](https://github.com/willpiam/even-better-privacy/releases) - 找到最新的发布版本并点击“Assets”下拉菜单 - 选择 `.AppImage` 文件并下载 - 下载完成后,确保其具有作为程序运行的权限 - 双击下载的文件以启动 EBP 程序 ### 对于 Mac - 前往 [发布页面](https://github.com/willpiam/even-better-privacy/releases) - 找到最新的发布版本并点击“Assets”下拉菜单 - 选择 `.dmg` 文件并下载 - 运行该文件,将狐狸图标拖拽到应用程序图标中 - EBP 现已安装在您的 Mac 上,可以像任何其他应用程序一样运行 ### 对于 Windows - 前往 [发布页面](https://github.com/willpiam/even-better-privacy/releases) - 找到最新的发布版本并点击“Assets”下拉菜单 - 选择并下载 `.msi` 文件 - 运行 `.msi` 文件并按照向导在您的系统上安装 EBP - 像启动任何其他 Windows 程序一样启动 EBP。可以通过搜索“EBP”找到它 ### 从源码构建 (Linux, Windows, & Mac) 如果您熟悉 CLI,或者希望为此代码库做出贡献,您可能会希望从源码运行 EBP。即使没有使用 CLI 的经验,这应该也非常简单。这可能是在您的系统上启动并运行 EBP 最可靠的方法。 1. 安装 [Deno](https://deno.land/) 2. 克隆此仓库 3. 运行测试以验证一切正常:`deno task test:core` #### 快速开始 (GUI + 公共服务器) 1. 运行 `deno task gui` 2. 在浏览器中导航至 [http://localhost:8787](http://localhost:8787)(或终端指向的任何位置) 3. 点击设置 4. 将 *server url* 设置为 https://ebp-cqyo.onrender.com ### 本地构建 如果您希望创建自己的构建文件,这应该相当容易做到。 - 安装 Node + NPM、Rust + Cargo 和 Deno - 运行适用于您操作系统的 shell 脚本(`build_desktop_mac.sh`、`build_desktop_windows.sh` 或 `build_desktop_linux.sh`) 如果一切顺利,这将生成一个可执行文件……在 Linux 上是 EBP.AppImage,在 Mac 上是 __,或在 Windows 上是 __。 ## 原生电子邮件 EBP GUI 包含一个用于发送和接收电子邮件的内置界面。 它通过标准的 SMTP 和 IMAP 协议直接连接,使其与大多数电子邮件提供商兼容。EBP 还支持 Gmail 和 Outlook 的 OAuth,以提供更简便的体验。 ### 通过 OAuth 的原生电子邮件 要使用 OAuth 运行,您需要在 `.env` 文件中提供以下值。 ``` MAIL_OAUTH_GMAIL_CLIENT_ID="" MAIL_OAUTH_GMAIL_CLIENT_SECRET="" # only provided to key server (playing double duty by also handeling oauth) # MAIL_OAUTH_OUTLOOK_CLIENT_ID="" # 不再关注 Outlook,因为这个麻烦不值得花时间 # MAIL_OAUTH_OUTLOOK_CLIENT_SECRET="" # 仅提供给 key server,而不是用户机器 ``` 如果您正在使用测试用的 Gmail 客户端 OAuth 凭证,您可能会发现以下链接对于添加测试用户很有帮助。[console.cloud.google.com/auth/audience](https://console.cloud.google.com/auth/audience)。确保您处于正确的项目中。向下滚动到“Test users”并点击“add users”。 ### Proton 原生电子邮件 Proton 用户必须安装并运行 Proton Mail Bridge 才能使用 EBP 原生电子邮件。 ### 测试原生电子邮件 将两个测试电子邮件账户添加到 dotenv 文件中,以便在 e2e 测试套件中测试电子邮件功能。 ``` TEST_EMAIL_ONE="" TEST_EMAIL_ONE_PWORD="" TEST_EMAIL_ONE_SMTP_PORT="465" TEST_EMAIL_ONE_SMTP_HOST="" TEST_EMAIL_ONE_IMAP_PORT="993" TEST_EMAIL_ONE_IMAP_HOST="" TEST_EMAIL_TWO="" TEST_EMAIL_TWO_PWORD="" TEST_EMAIL_TWO_SMTP_PORT="465" TEST_EMAIL_TWO_SMTP_HOST="" TEST_EMAIL_TWO_IMAP_PORT="993" TEST_EMAIL_TWO_IMAP_HOST="" ``` ## 电子邮件 Chrome 扩展程序 EBP 包含一个 Chrome 扩展程序,使用本地 GUI 后端 API 在网页邮件中添加签名/加密和解密/验证控件。 受支持的电子邮件客户端 (网页): - Gmail - Outlook (Outlook 网页版) - Proton Mail ### 安装扩展程序 此扩展程序可在任何基于 Chromium 的浏览器上运行。 #### 从源码安装扩展程序 1. 打开 `chrome://extensions` 或 2. 启用开发者模式。 3. 点击 **加载已解压的扩展程序** 并选择此文件夹: `/even-better-privacy/email/chrome-extension` ~~请参阅 [`email/chrome-extension/README.md`](email/chrome-extension/README.md) 中的扩展程序指南~~ #### 从 Chrome 网上应用店安装扩展程序 我尚未将该扩展程序发布到网上应用店。我打算尽快完成此操作。 ## 环境配置 如果您打算运行自己的密钥服务器,则需要在项目根目录(与此 `ReadMe.md` 相同的文件夹)中创建一个 `.env` 文件。示例: ``` DB_TYPE=psql # options include sqlite | psql # postgres 数据库连接详情 PG_HOST=localhost PG_PORT=5432 PG_USER=postgres PG_PASSWORD=postgres PG_DATABASE=ebp PG_POOL_SIZE=5 SMTP_HOST=smtp.example.com SMTP_PORT=465 SMTP_USER= SMTP_PASS="sender email password here" SMTP_FROM= SMTP_SECURE=true PUBLIC_BASE_URL= ``` ## 支持的密码系统 EBP 使用 NIST 批准的量子安全方案。有关 NIST 后量子密码标准的更多信息可在[此处](https://csrc.nist.gov/projects/post-quantum-cryptography)找到。 ### 签名 #### 基于哈希 - SLH-DSA (SPHINCS+) #### 基于格 - ML-DSA (Dilithium) - FN-DSA (Falcon) (计划中) ### 加密 - ML-KEM (Kyber) | 名称 | 所用变体 | 公钥大小 | 用途 | | --------------------------|-------------------|-------------------|----------| | ML-KEM (Kyber) | ML-KEM-1024 | 1,568 bytes | KEM | | SLH-DSA (SPHINCS+) | SLH-DSA SHA2-256s | 64 bytes | Auth | | ML-DSA (Dilithium) | ml_dsa87 | 2,592 bytes | Auth | | FN-DSA (Falcon) (计划中) | NA | NA | Auth | ## 方案 与 RSA 或 ECC 不同,新的后量子方案仅支持加密或消息签名,而不能在同一方案中同时支持两者。因此,我们要求签名和加密(或者说是 KEM)密钥永远不要单独出现,而应成对出现;即一个签名密钥和一个加密密钥。生成的对象称为身份 (Identity)。身份的指纹是这两个密钥的哈希值。 ### 关于 KEM 的说明 目前,我们将 KEM 视为常规的非对称加密。当我们向某个身份发送加密消息时,我们总是会生成一个新的 AES 密钥并使用它来加密消息,然后使用接收者的 KEM 密钥封装该 AES 密钥,接着我们将封装的密钥连同密文一起发送给接收者。回复则使用新的 AES 密钥进行加密,而不是最初由第一个发送者提供的密钥。 我愿意在未来改变这一点。这种方法对我来说是最简单的,并且我不认为更改它是一个优先事项。它直接且通用,但我承认它的效率不如预期。 ## 工作原理 1. 生成一个身份(创建一个签名密钥 + 加密密钥对) 2. 与他人分享您的公开身份(指纹 + 公钥) 3. 导入联系人的公开身份 4. 签名消息 — 接收者使用您的公开签名密钥进行验证 5. 加密消息 — 接收者使用他们的私有加密密钥进行解密 ## 撤销系统 EBP 支持撤销特定详情和整个身份。所有撤销都需要来自被撤销身份的有效签名,以确保只有密钥持有者才能撤销自己的数据。 ### 撤销类型 #### 详情撤销 从身份中移除特定的详情(如电子邮件或姓名)。在以下情况下使用此功能: - 信息已更改(新的电子邮件地址) - 信息输入有误 - 您不再希望将该信息与您的身份关联 ``` # 本地撤销详情 ebp revoke-detail email --reason "Changed email address" # 撤销并推送到服务器 ebp revoke-detail email --reason "Changed email address" --push ``` #### 身份撤销 将整个身份标记为已泄露或无效。**这是不可逆的。** 在以下情况下使用此功能: - 您的私钥已泄露 - 您正在迁移到新身份 - 该身份不再受信任 ``` # 撤销 identity(需要 --force 确认) ebp revoke --reason "Key compromised" --force # 撤销并推送到服务器 ebp revoke --reason "Key compromised" --force --push ``` ### 紧急撤销证书 您可以在创建身份时预先生成紧急撤销证书。此证书可以安全存储(例如,打印出来并保存在保险箱中),并在您的私钥泄露时使用——即使您丢失了密钥本身。 ``` # 使用 emergency certificate 生成 identity ebp generate --revocation-cert --revocation-output emergency-revoke.json # 为现有 identity 生成 emergency certificate ebp generate-revocation-cert --output emergency-revoke.json ``` **重要提示**:请安全地存储紧急证书。任何拥有此证书的人都可以撤销您的身份。 ### 撤销如何工作 1. **已签名的证书**:每次撤销都会生成一个包含以下内容的签名证书: - 类型(详情或身份) - 身份指纹 - 单调递增的 nonce(防止重放攻击) - 时间戳 - 可选的原因 - 目标路径(用于详情撤销) - 密码学签名 2. **验证**:任何人都可以使用该身份的公开签名密钥验证撤销证书。服务器在接受撤销之前会验证签名。 3. **Nonce 保护**:撤销 nonce 必须严格递增,防止攻击者重放旧的撤销证书。紧急证书使用 nonce 0 且只能使用一次。 4. **服务器集成**:推送到服务器时,撤销将与身份查询一起存储并返回。客户端在导入联系人时应检查撤销状态。 ### 检查撤销状态 从服务器获取身份时,响应包含: - `revoked`:指示身份是否被撤销的布尔值 - `revocationCertificate`:如果被撤销,则为十六进制编码的证书 - `revokedDetails`:已被撤销的详情路径数组 应用程序在处理已撤销的身份或详情时应警告用户。 ## 测试 运行以下每一项以确保一切正常 核心测试 ``` deno task test:core ``` CLI 测试 ``` deno task test:cli-utils ``` *更多的 CLI 测试可能会有用* 服务器测试 ``` deno task test:server ``` GUI 后端测试 ``` deno task test:gui-backend ``` E2E GUI 测试 (Playwright) ``` npm install npx playwright install --with-deps ``` 在您的 `.env` 文件中设置 ``` DB_TYPE=sqlite ``` 然后运行测试(这将自动启动 GUI 本地后端): ``` deno task test:e2e ``` 要运行使用 Postgres 作为数据库的端到端测试 ``` DB_TYPE=psql ``` 然后运行 ``` deno task test:e2e:psql ``` ## 指纹 (Merkle Root + Bech32) EBP 指纹使用: - 两个公钥的 merkle root(签名叶节点 + 加密叶节点) - 带有特定于签名方案的 HRP 的 Bech32 编码 我们使用这两个密钥的 merkle 树作为指纹,因为它允许在没有这两个密钥的情况下验证指纹。这在数据成本高且不需要这两个密钥的情况下非常有用。 当前前缀: - `ebpdk1...` 用于 Dilithium + Kyber 身份 - `ebpsk1...` 用于 SPHINCS+ + Kyber 身份 ## CLI **注意:** 当本节讨论名为 `ebp` 的程序时,您将改为使用 `deno task cli` `ebp` CLI 管理后量子身份和安全消息传递。您可以生成多个身份(存储在 `~/.ebp/.identity.json` 中)、在它们之间切换、检查指纹和详细信息、与联系人交换签名/加密消息,以及加密/解密完整的文件负载。 - 创建和切换身份(`ebp generate [name]`、`ebp identities`、`ebp use `) - 查看身份信息和附加的详细信息(`ebp info`、`ebp details`) - 导出公开身份以供分享(`ebp export-public`) - 导入联系人并列出他们(`ebp import`、`ebp contacts`) - 签名消息(`ebp sign`)和验证(`ebp verify`) - 为对等方加密和解密(`ebp encrypt`、`ebp decrypt`) - 加密和解密文件(`ebp encrypt-file`、`ebp decrypt-file`) - 将身份发布到服务器并获取联系人(`ebp server `、`ebp publish`、`ebp fetch `) - 添加详细信息时将其推送到服务器(`ebp detail --push`) ## GUI - CLI 的所有功能,但以图形格式呈现 - 与相同的文件系统进行交互 — GUI 和 CLI 是访问相同数据的两个接口 ### 如何运行 GUI 1. 运行本地后端:`deno task gui:local-backend` 2. 导航至 [localhost:8787](http://localhost:8787/) ## 支持开发 如果您觉得 EBP 有用,请考虑支持该项目: | 网络 | 地址/Handle | 链接 | | --- | --- | --- | | Ethereum (& more) | `williamdoyle.eth` | https://app.ens.domains/williamdoyle.eth | | Bitcoin | `bc1q6crw4wy7jecs05f4ytz68n6evuzlu7k3cnu7zy` https://blockchair.com/bitcoin/address/bc1q6crw4wy7jecs05f4ytz68n6evuzlu7k3cnu7zy | | Cardano | `$wildoy` | https://handle.me/wildoy | | QRL | `Q02070028dc6ca5f722f9646171cee25eff5d178907d0e05a7c343eeba77ef138fcc0da9a0074db` | https://explorer.theqrl.org/a/Q02070028dc6ca5f722f9646171cee25eff5d178907d0e05a7c343eeba77ef138fcc0da9a0074db | ## 隐私 有关项目的隐私政策,请参阅 [PRIVACY.md](PRIVACY.md)。 ## 许可证 MIT — 详见 [LICENSE](LICENSE)。 ## 即将推出的功能 - ENS 支持 - 增加对 ENS 中 EBP 指纹的支持。这意味着向 ENS 项目贡献少量代码。我已经尝试与 QRL 合作,但我的 Pull Request 从未被合并。https://github.com/ensdomains/address-encoder/pull/386 。此步骤并非使系统良好运行于 ENS 所必需,但这会让用户的体验更好一些。事实上,这可以作为最后一步。 - 增加对搜索 EBP 指纹的 ENS 名称的支持。然后在 EBP 服务器上查找该指纹 - 增加一项规定,允许用户将 ENS 名称作为详情添加到其 EBP 身份中,但服务器必须验证该用户的指纹是否已添加到该 ENS 名称中 - 更好的 db 接口层 - 在 EBP 操作上进行抽象而不是在 db 连接上 - 这将允许我们在 sqlite 和 psql 实现中使用不同的 SQL。这也将使我们能够轻松实现非 SQL 连接。 - 电子邮件插件的端到端测试 - 电子邮件:当用户直接回复电子邮件时启用 EBP 界面 - 电子邮件:选择多个收件人。使用相同的 AES 密钥加密。发送带有一条加密消息的 JSON 对象,以及将收件人指纹映射到仅为该收件人封装的 AES 密钥副本的对象。 ``` { "encapsulated_key_map": { "": "" }, "ciphertext":"" } ``` - 支持身份的有效期 - 将其他 EBP 身份认可为您自己的身份(双向绑定) - 插件:增加意外发送未加密电子邮件的难度 - 插件:隐藏密码输入框 - 哈希详情 - 哈希电子邮件认可 - 获取您的电子邮件地址的哈希值 - 签名哈希 - 将哈希值、电子邮件地址和签名发送到公钥服务器 - 服务器代您发送电子邮件以确认您的电子邮件 - 服务器从不公开未哈希的电子邮件。甚至可能在用户确认后删除原始电子邮件地址。 - 收到您签名电子邮件的用户仍然可以确认该电子邮件地址与提供的 EBP 身份相关联。 - 减少您受到的垃圾邮件骚扰 - 支持身份层级 - 父级可以撤销关系 - 一种模式可能如下所示: ``` graph TD M[Master Identity] -->|endorses| C[Cold Identity] C -->|endorses| H[Hot Key] ``` - 当向身份添加详细信息时,我希望将详细信息路径的输入设为一个下拉菜单,其第一个选项为“custom”,以便用户可以提供他们自己的详细信息路径 - 完善 `core` - 完善 `gui/local-backend` - 创建完整的清单和强化计划 - 移动应用程序 - 与 GUI 完全的功能对等 - 高级电子邮件功能 - 搜索收件箱 - 编写和保存草稿(使用相同的 PIN/密码加密) - 渲染电子邮件:图像、布局、字体、一切 - 通常使用什么?HTML?Markdown? - 定时发送 - 更传统的“电子邮件收件箱”电子邮件页面布局 -
标签:AppImage, CVE, dmg, DNS解析, meg, MITM代理, msi, PGP替代, Web应用防火墙, 信息安全, 公钥基础设施, 去中心化身份, 可视化界面, 后量子密码, 安全通信, 密码学, 开源安全工具, 开源项目, 手动系统调用, 抗量子密码学, 数字签名, 数据加密, 测试用例, 特征检测, 电子邮件安全, 端到端加密, 网络安全, 网络安全, 自动化攻击, 身份管理, 逆向工程平台, 隐私, 隐私保护, 隐私保护