jahlives/openssl_encrypt
GitHub: jahlives/openssl_encrypt
一款采用后量子混合加密和链式KDF纵深防御架构的Python文件加密工具,支持ML-KEM、Kyber等NIST标准化后量子算法,提供CLI命令行和Flutter跨平台GUI界面。
Stars: 2 | Forks: 0
# OpenSSL 加密
一个基于 Python 的文件加密工具,采用现代密码算法、后量子算法和纵深防御密钥派生技术。
## 历史
该项目历史上被命名为 `openssl-encrypt`,因为它曾经是一个围绕 OpenSSL 的 Python 脚本封装。这种方法在较新的 Python 版本中不再有效,因此我使用现代密码和哈希算法在纯 Python 中进行了完全重写。项目名称是对其起源的一种“致敬”。
## 安装
要安装,请遵循[指南](https://github.com/jahlives/openssl_encrypt/wiki/INSTALLATION)
## 道德承诺与使用限制
本项目致力于保护人权和防止大规模监控。为了反映这些价值观,它采用 **Hippocratic License 2.1** 授权。
虽然源代码是公开的,但使用受到严格的道德条件限制。我们将人权置于传统的“中立”开源定义之上。
### 禁止的使用案例
使用本软件即表示您同意**不会**将其用于:
* **侵犯人权:** 任何破坏[联合国世界人权宣言](https://github.com/jahlives/openssl_encrypt/blob/main/LICENSE#L51)的实体的使用均被严格禁止(参见 [许可证第 2.1 节](https://github.com/jahlives/openssl_encrypt/blob/main/LICENSE#L51))。
* **大规模监控:** 本软件不得用于批量、无授权的监控或数据收集(参见 [许可证第 2.2.a 节](https://github.com/jahlives/openssl_encrypt/blob/main/LICENSE#L58))。
* **政府情报机构:** 不允许情报机构(如 NSA、GCHQ 等)或其承包商根据本许可证使用本软件进行进攻性网络行动或国内间谍活动。
* **军事与武器:** 国防工业或为其使用,特别是用于开发致命武器、瞄准系统或军用级监控设备(参见 [许可证第 2.2 节](https://github.com/jahlives/openssl_encrypt/blob/main/LICENSE#L58))。
### 为什么选择此许可证?
技术工具并非中立。我们相信加密应该赋能个人,而不是压迫性系统。**Hippocratic License** 建立了一道法律屏障,防止此代码被集成到用于监控和伤害的软件栈中。
## 文档与安全架构
要深入了解本项目的密码学设计和安全策略,请参阅 `docs/` 文件夹中的专门文档:
* **[技术架构](openssl_encrypt/docs/architecture.md)**:详细解释了混合 PQC 流程、加固的 KDF 链(Argon2id + RandomX)以及 AEAD 元数据绑定。
* **[安全策略](openssl_encrypt/docs/security.md)**:有关我们的“纵深防御”策略、反预言机策略以及如何负责任地披露漏洞的信息。
### 关键安全特性一览:
* **后量子就绪**:使用 NIST 标准化的 KEM(HQC, CROSS, MAYO)进行混合加密。
* **确定性 AEAD**:支持 AES-SIV,最大程度防止 nonce 误用。
* **元数据完整性**:密码学绑定标头以防止篡改(在支持 AEAD 的密码上)。
* **抗硬件 KDF**:顺序 Argon2id 和 RandomX 哈希,以中和 ASIC/GPU 暴力破解集群。
## 🚀 v1.4.0 稳定版发布
**当前版本:** v1.4.0 | **状态:** Stable | **测试:** 1636+ 通过
**v1.4.0 中的新增内容:**
- **安全加固的密钥重置**:`rekey_file()` 不再将明文写入临时磁盘文件 —— 明文在重加密期间完全保留在内存中
- **内存加密 API**:`encrypt_file()` 现在接受 `bytes`/`bytearray` 输入和 `output_file=None` 以实现完全内存加密,与 `decrypt_file()` 镜像对应
- **全面的安全加固**:解决了 14 个 Dependabot 安全公告,涵盖 CSPRNG、路径遍历、沙箱绕过、CORS 加固、凭证处理等
- **依赖更新**:升级依赖项以解决 8 个额外的 Dependabot 警报
**发布历史:**
- **v1.4.0**(当前)- 具有内存加密和安全加固密钥重置的稳定版本
- **v1.4.0rc2** - 放宽内置插件的 SAST 规则
- **v1.4.0rc1** - 首个候选版本:安全加固和依赖项更新
- **v1.4.0b10** - 格式版本 11:独立 XOR 与并行处理
- **v1.4.0b9** - 测试基础设施改进,支持 Threefish 密码,跨版本兼容性修复
- **v1.4.0b8** - 关键安全修复:具有安全链式盐派生的格式版本 9
- 参见 [version.py.template](openssl_encrypt/version.py.template) 获取完整发布历史
### 🚨 关键安全修复 - 格式版本 9 (Beta)
**安全公告 2026-01** - v1.4.0 beta 系列包含针对多轮 KDF 配置的关键安全修复(在 v1.4.0b8 中实现,在 v1.4.0b9 中验证)。
**漏洞**:格式版本 ≤8 使用可预测的盐派生,允许攻击者从明文元数据预计算所有轮次的盐,从而能够针对多轮 KDF 配置进行优化的彩虹表攻击(CVSSv3 评分:8.1 - 高)。
**修复**:格式版本 9 实现了安全的链式盐派生,其中每一轮使用上一轮的输出作为盐,强制顺序计算并防止预计算攻击。
**所需操作**:
- ✅ **新加密自动使用 v9**(安全)
- ⚠️ **重新加密所有使用格式版本 < v9 或代码版本 < 1.4.0 加密的文件**
- ✅ **向后兼容** - v8 及以下文件仍可解密
**受影响者**:所有使用元数据格式版本 v3-v8 或 openssl_encrypt 版本 < 1.4.0 加密的文件,特别是具有多轮 KDF(rounds > 1)或弱/中等密码的文件。
有关完整详细信息,请参见 [docs/security.md](openssl_encrypt/docs/security.md) 和 [docs/metadata-formats.md](openssl_encrypt/docs/metadata-formats.md)。
### 格式版本 9:安全链式盐派生
**关键安全修复**,解决了多轮 KDF 实现中的 CVE-2026-01 漏洞。
- **安全影响**:防止针对多轮 KDF 配置的预计算攻击
- **实现**:使用上一轮的输出作为下一轮盐的链式盐派生
- **向后兼容**:v8 及以下文件可通过自动格式检测正确解密
- **受影响组件**:所有多轮 KDF/哈希函数(Argon2, PBKDF2, Scrypt, Balloon, HKDF, BLAKE3, BLAKE2b, SHAKE-256)
- **缓解措施**:新加密自动升级;**建议重新加密所有格式版本 < v9 或使用代码版本 < 1.4.0 加密的文件**
- **格式版本 v3-v8**:立即弃用(保持只读支持)
**技术细节**:
```
# 易受攻击 (v8):可预测的 salt derivation
round_salt = SHA256(base_salt + str(round_num)).digest()[:16]
# 安全 (v9):链式 salt derivation
round_salt = previous_round_output[:16]
```
**参考**:
- 安全公告:[docs/security.md](openssl_encrypt/docs/security.md#advisory-2026-01)
- 技术规范:[docs/metadata-formats.md](openssl_encrypt/docs/metadata-formats.md#version-9-specification)
- 测试覆盖:`openssl_encrypt/unittests/test_salt_derivation_versions.py`
### Beta 测试与反馈
v1.4.0 目前处于 Beta 测试阶段。我们欢迎反馈和错误报告:
- **测试套件:** 1535 个测试通过,0 个失败
- **安全审计:** 格式版本 9 在所有 KDF 算法(PBKDF2, Argon2, Scrypt, Balloon)中得到验证
- **向后兼容性:** 完全兼容 v1.3.x 加密文件
- **向前兼容性:** v1.3.5 文件兼容 v1.4.x
**报告问题:**
- GitLab: https://gitlab.rm-rf.ch/world/openssl_encrypt/-/issues
- GitHub: https://github.com/jahlives/openssl_encrypt/issues
### 级联加密(多层防御)
使用多个密码算法和链式 HKDF 密钥派生进行顺序加密。
- 攻击者必须破解所有密码才能解密数据
- 至少需要 2 个密码,支持无限级联深度
- 每一层向下一层的密钥派生增加熵
- CLI 支持:`--cascade "aes-256-gcm,chacha20-poly1305,xcha-poly1305"`
- 自动密码多样性验证
- 新的元数据格式 V8
**示例:**
```
python -m openssl_encrypt.crypt encrypt -i file.txt \
--cascade "aes-256-gcm,chacha20-poly1305,xcha-poly1305"
```
### Threefish 后量子密码
基于 Rust 的 Threefish AEAD 密码实现,具有抗量子攻击的内存困难构造。
- Threefish-512:256 位后量子安全级别
- Threefish-1024:512 位后量子安全级别
- 具有嵌入式 nonce 的原生 AEAD 模式
- 基于 Maturin 的 Rust/Python 集成
### 后量子密钥服务器
基于 FastAPI 的密钥服务器,用于公钥分发,带有 PostgreSQL 后端。
- 对上传的密钥进行 ML-DSA 签名验证
- 公钥上传、搜索和撤销端点
- Bearer token 认证、速率限制、CORS 保护
- 使用 liboqs 0.12.0 的 Docker 部署
- 可用地址:https://keyserver.rm-rf.ch
### 隐私保护遥测
选择性的匿名遥测基础设施,具有用户同意和数据最小化功能。
- 匿名客户端标识符
- 可配置的数据收集范围
- 具有 FastAPI REST API 的 PostgreSQL 后端
- 具有自动迁移的 Docker 部署
- 可用地址:https://telemetry.rm-rf.ch
### Pepper 存储插件
用于安全 pepper 存储的客户端插件,具有密码加固和 mTLS 认证功能。
- 客户端加密的 pepper 存储(服务器永远不会看到明文)
- TOTP 2FA,带有用于破坏性操作的 QR 码生成
- 具有可配置签到间隔和宽限期的死人开关
- 用于紧急 pepper 删除的恐慌擦除(全部或单个 pepper)
- 具有自签名 CA 的 mTLS 认证(需要客户端证书)
- 带有访问跟踪的配置文件管理
- 默认为 OPT-IN(默认禁用,直到显式启用)
- 配置:`~/.openssl_encrypt/plugins/pepper.json`
### 完整性验证插件
用于加密文件元数据哈希验证的客户端插件,带有 mTLS 认证。
- 在远程服务器上存储加密文件元数据的 SHA-256 哈希
- 解密前验证文件完整性(检测篡改)
- 批量验证支持(每个请求最多 100 个文件)
- 篡改检测,带有全面的审计日志
- 具有自签名 CA 的 mTLS 认证(需要客户端证书)
- 配置文件管理和验证统计
- 默认为 OPT-IN(默认禁用,直到显式启用)
- 配置:`~/.openssl_encrypt/plugins/integrity.json`
### 基于身份的非对称加密
增强的非对称密钥处理,具有改进的格式和 HSM 集成。
- 更新的非对称加密格式(格式 V7)
- 使用 ML-KEM 进行基于 KEM 的密码封装,以实现后量子安全
- 用于基于接收者加密的身份管理系统
- 与受 HSM 保护的身分无缝集成
- 在非 TTY 环境中跳过交互式提示
### 算法注册系统
集中式密码算法注册和验证框架。
- 密码注册表:12+ 种对称加密算法
- 哈希注册表:15+ 种密码哈希函数
- KDF 注册表:8 种密钥派生函数
- KEM 注册表:9 种密钥封装机制(Kyber, ML-KEM, HQC)
- 签名注册表:15 种后量子签名算法
- CLI 命令:`crypt list-algorithms`
- 安全级别指示器和验证
### HSM 集成改进
- 用于受 HSM 保护的身分创建的 CLI 参数:`--hsm`, `--hsm-slot`, `--hsm-pin`
- HSM_ONLY 身份在加密/解密期间跳过密码提示
- 使用 `--with-key` 自动检测 HSM 身份
- 无需密码即可保存/加载 HSM 身份
### 安全增强
- 所有密码注册表(KDF, Cipher, Signature, KEM)中的 SecureBytes 实现
- 使用后自动清零敏感数据
- 线程安全的安全内存操作
- SECURITY.md 策略已添加到所有 20 个分支,包含漏洞报告指南
- PGP 密钥:C8E4 C58E 83AB B314 74C0 E108 0271 3C63 792B 8986
- 对安全问题承诺 48 小时内初步响应
### 性能与测试
- 具有特定领域组织的模块化测试套件
- 带有高 CPU runner 标签的并行测试执行
- 针对更快 CI/CD 优化的 KDF 参数
- 测试诊断
### 基础设施
- 通过 Maturin 构建系统集成 Rust 扩展
- 使用 liboqs 0.12.0 的 Docker 多阶段构建
- 增强的 Flatpak 构建,处理 Threefish wheel
- CI/CD 流水线改进
### 统一服务器架构
模块化 FastAPI 服务器,具有双重认证系统,支持公共和私有模块。
**公共模块(JWT 认证):**
- 密钥服务器:后量子公钥分发
- 遥测:隐私保护的使用统计
**私有模块(具有自签名 CA 的 mTLS 认证):**
- **Pepper 模块**:用于密码加固的安全 pepper 存储
- 客户端加密的 pepper 存储(20 个端点)
- TOTP 2FA,带有 QR 码生成
- 具有可配置签到间隔的死人参开关
- 用于紧急 pepper 删除的恐慌擦除
- 首次 mTLS 连接时自动注册
- 数据库:5 个表(clients, peppers, deadman, panic log, TOTP backup codes)
- **完整性模块**:加密文件元数据哈希验证
- 加密文件元数据的 SHA-256 哈希存储(12 个端点)
- 完整性违规检测,带有审计日志
- 批量验证支持(每个请求最多 100 个文件)
- 统计跟踪(成功率、验证次数)
- 首次 mTLS 连接时自动注册
- 数据库:3 个表(clients, hashes, verification log)
**安全特性:**
- 要求自签名 CA(拒绝公共 CA)
- 证书指纹认证(SHA-256)
- 受信任的代理 IP 验证
- 全面的审计日志
- 自动化证书管理脚本
**部署:**
- 带有 PostgreSQL 后端的 Docker Compose
- Nginx 反向代理支持(推荐)
- 可用直接 mTLS 模式
- 辅助脚本:`setup_ca.sh`, `create_client_cert.sh`
- 完整文档:`openssl_encrypt_server/docs/MTLS_SETUP.md`
### Flutter GUI 增强
桌面 GUI 的全面改进,具有高级密码学功能和改进的用户体验。
**级联加密 UI:**
- 具有多样性验证的多密码选择界面
- 算法类别的子分组组织
- 显示加密层的可视化链预览
- 集成到文件加密、文本加密和批量操作选项卡中
**非对称加密 UI:**
- 具有创建/导入/导出功能的身份管理屏幕
- 用于多接收者加密的接收者选择
- HSM 集成(YubiKey 挑战-响应,FIDO2/WebAuthn)
- 实时 YubiKey 触摸提示显示
- ML-KEM/ML-DSA 密钥对生成和管理
**网络插件配置:**
- 具有 mTLS 证书管理的远程 Pepper 插件设置
- 具有验证选项的完整性插件配置
- 具有 Bearer token 认证的密钥服务器插件设置
- 插件状态和连接性的视觉反馈
**算法增强:**
- 具有分组显示的增强算法选择器(经典对称、后量子、AEAD)
- PQC 算法显示在信息选项卡中
- 支持 Threefish-512 和 Threefish-1024 密码
- 元数据查看器中支持格式版本 7 和 8
**用户体验:**
- 加密选项卡中的隐写术配置面板
- 用于工作流自动化的强制密码选项
- 默认输入类型设置为文件模式
- 改进的状态消息和错误处理
- 长时间运行操作的进度指示器
**Flatpak 分发:**
- 具有自动构建的完整 CI/CD 流水线
- 用于更快编译的增量缓存
- OSTree 仓库集成
- 可在 Flathub 上获取(待批准)
### 向后兼容性
- 兼容 v3, v4, v5, v6, v7 和 v8 加密文件
- 自动格式检测和迁移
- V3-V8 元数据格式因安全漏洞而弃用(保持只读支持)
- V9 元数据格式(当前),具有安全的链式盐派生
- **强烈建议重新加密所有格式版本 < v9 或使用代码版本 < 1.4.0 加密的文件**
## 已知问题
### v1.2.x 中的 HQC 支持
**注意:** 由于某些 AMD64 系统上 liboqs 的分叉安全问题,HQC (Hamming Quasi-Cyclic) 后量子密码在 v1.2.x 版本中无法正常工作。在这些版本中,使用 HQC 算法(hqc-128, hqc-192, hqc-256)加密的文件无法可靠地解密。
- ✅ **其他 PQC 算法工作正常**:Kyber/ML-KEM, Dilithium, Falcon, SPHINCS+ 和所有其他受支持的后量子算法在 v1.2.x 中按预期运行
- ✅ **HQC 在 v1.3.0+ 中完全受支持**:该问题已通过改进的多处理在 1.3.0 及更高版本中解决
**建议:** 如果您需要使用 HQC 算法加密或解密文件,请升级到 1.3.0 或更高版本。
**对于 v1.2.x 用户:** 如果您有使用 HQC 加密的文件,您可以:
1. 升级到 v1.3.0+ 以解密它们
2. 使用不存在分 fork 安全问题的不同系统
3. 改用 Kyber/ML-KEM 重新加密重要文件(推荐用于长期兼容性)
### 不完整的 AEAD 元数据绑定(版本 < 1.3.0)
**问题**:在 1.3.0 之前的版本中,AEAD 算法(AES-GCM, ChaCha20-Poly1305, AES-GCM-SIV, AES-SIV, AES-OCB3, XChaCha20-Poly1305 和所有 PQC 混合变体)为附加认证数据 (AAD) 参数传递 `None`,尽管文档指出元数据在密码学上绑定到密文。
**安全影响**:低 - 加密本身仍然是安全的。元数据已经通过密钥派生链在密码学上绑定,这意味着任何篡改都会导致解密失败。然而,如果没有 AAD,篡改检测会延迟到 KDF 操作和解密尝试完成之后。
**攻击场景**:
- 对加密文件具有写访问权限的攻击者可以篡改元数据
- 修改后的元数据将导致解密失败,但仅在处理之后
- 不可能发生数据机密性泄露
- 潜在的 DoS 向量:修改 `rounds` 参数会在检测到故障之前强制执行昂贵的 KDF 操作
**建议**:升级到 1.3.0 或更高版本,该版本实现了正确的 AAD 绑定以便更早检测篡改。请注意,AAD 并不能消除 DoS 风险,因为元数据解析和 KDF 执行发生在 AAD 验证之前。
## **变通方法**:数据安全不需要变通方法。为了减轻 DoS 风险,请确保文件权限防止对加密文件的未授权写访问。
## 安全架构
### 链式密钥派生
此工具使用链式哈希/KDF 架构,其中每一轮的输出决定下一轮的盐:
```
Password + Salt₀ → KDF₁ → Result₁ → Salt₁ = f(Result₁) → KDF₂ → Result₂ → ... → Final Key
```
**设计属性:**
- **顺序依赖性**:每一轮都需要上一轮的结果
- **动态加盐**:盐从以前的输出派生,不可预先预测
- **内存困难函数**:Argon2 和 Balloon 哈希每次尝试都需要大量内存
### 抗攻击能力
链式架构提供了多种安全属性:
|攻击向量 |缓解措施 |
|-------------------|--------------------------------------------|
|GPU/ASIC 并行化 |顺序依赖性强制单线程计算 |
|彩虹表 |动态每轮盐防止预计算 |
|时间-内存权衡 |无法在尝试之间缓存中间结果 |
|量子密钥恢复 |混合 PQC 模式(ML-KEM, HQC)用于密钥封装 |
### 计算成本估算
|密码熵 |KDF 配置 |每次尝试耗时|暴力破解估算* |
|------------------|---------|------------|-----------------|
|50 位(8 个随机字符)|Balloon ×5|~40s |~10²² 年 |
|60 位(10 个随机字符)|Balloon ×5|~40s |~10²⁵ 年 |
|80 位(13 个随机字符)|Balloon ×5|~40s |~10³¹ 年 |
*估算假设:95 字符集,均匀随机密码,单线程攻击,无实现缺陷。实际安全性取决于密码质量和操作安全性。
### 安全注意事项
- 强密码(12+ 个随机字符)使暴力破解在计算上不可行
- 顺序链接防止密钥派生的并行化
- 后量子算法提供对量子密钥恢复攻击的抵抗力
- **局限性**:实现错误、侧信道攻击、弱密码或受损系统仍然是潜在风险。没有任何密码系统能提供绝对保证。
### 安全审查
v1.3.0 代码库收到了独立的安全审查:
- **评分**:8.8/10
- **严重/高危发现**:0
- **中危发现**:3(纵深防御改进,非阻断性)
- **依赖项**:pip-audit 干净,零已知漏洞
## 参见 获取完整报告。
## 功能特性
### 对称加密
现代 AEAD(带关联数据的认证加密)密码:
|算法 |状态 |备注 |
|------------------|--------------|--------------------------------------|
|AES-GCM |✅ 推荐 |NIST 标准,硬件加速 |
|AES-GCM-SIV |✅ 推荐 |抗 nonce 误用 |
|ChaCha20-Poly1305 |✅ 推荐 |软件优化,常量时间 |
|XChaCha20-Poly1305|✅ 推荐 |扩展 nonce(192 位) |
|AES-SIV |✅ 支持 |确定性加密 |
|Fernet |✅ 默认 |AES-128-CBC + HMAC,简单 API |
|AES-OCB3 |⚠ 仅解密 |在 v1.2.0 中弃用 |
|Camellia |⚠ 仅解密 |在 v1.2.0 中弃用 |
### 后量子密码
结合经典对称密码与后量子 KEM 的混合加密:
**NIST 标准化:**
- **ML-KEM** (FIPS 203):ML-KEM-512, ML-KEM-768, ML-KEM-1024
- **Kyber**:Kyber-512, Kyber-768, Kyber-1024(原始实现)
**NIST 精选(2025):**
- **HQC**:HQC-128, HQC-192, HQC-256
**签名方案(用于认证加密):**
- **MAYO**:MAYO-1, MAYO-2, MAYO-3, MAYO-5
- **CROSS**:CROSS-R-SDPG-1, CROSS-R-SDPG-3, CROSS-R-SDPG-5
### 密钥派生函数
|KDF |类型 |状态 |用例 |
|--------|------------------|------------|------------------------|
|Argon2id|内存困难 |✅ 推荐 |密码哈希的默认选择 |
|Balloon |内存困难 |✅ 推荐 |Argon2 的替代方案 |
|Scrypt |内存困难 |✅ 支持 |抗 GPU |
|HKDF |提取并扩展 |✅ 支持 |密钥扩展 |
|RandomX |CPU 困难 |✅ 支持 |抗 ASIC(源自 Monero) |
|PBKDF2 |迭代 |⚠ 仅解密 |在 v1.2.0 中弃用 |
### 哈希函数
用于密钥派生链接:
- **SHA-2 家族** (FIPS 180-4):SHA-512, SHA-384, SHA-256, SHA-224
- **SHA-3 家族** (FIPS 202):SHA3-512, SHA3-384, SHA3-256, SHA3-224
- **BLAKE 家族**:BLAKE2b, BLAKE3
- **SHAKE** (XOF):SHAKE-256, SHAKE-128
- **遗留**:Whirlpool(v1.2.0+ 仅解密)
### 额外的安全特性
**内存保护:**
- 使用 mlock/VirtualLock 进行安全内存分配
- 多遍内存擦除(random, 0xFF, 0xAA, 0x55, 0x00)
- 常量时间操作以抵抗计时攻击
**文件操作:**
- 多遍安全删除(可配置遍数)
- 原子文件操作
- 符号链接攻击保护(D-Bus 服务中的 O_NOFOLLOW)
**密钥管理:**
- 用于 PQC 密钥加密密钥库
- 密钥轮换支持
- 双重加密(密码 + 密钥库)
**操作:**
- 密码策略强制执行
- 常见密码字典检查
- 审计日志
## 安装
### Flatpak(推荐)
包含所有依赖项(Python, liboqs, liboqs-python, Flutter GUI)的最简单安装方式:
```
# 添加 repository
flatpak remote-add --if-not-exists openssl-encrypt https://flatpak.rm-rf.ch/openssl-encrypt.flatpakrepo
# 安装最新稳定版本
flatpak install openssl-encrypt com.opensslencrypt.OpenSSLEncrypt
# 运行应用程序
flatpak run com.opensslencrypt.OpenSSLEncrypt --help
```
**优点:**
- 预安装所有依赖项(包括 liboqs 和 Python 绑定)
- 包含 Flutter 桌面 GUI
- 沙箱环境
- 自动更新
- 适用于任何 Linux 发行版
**本地构建 Flatpak(作为使用仓库的替代方案):**
```
# 克隆 repository
git clone https://github.com/jahlives/openssl_encrypt.git
cd openssl_encrypt/flatpak
# 本地构建并安装(包含 Flutter GUI)
./build-flatpak.sh --build-flutter --local-install
# 或安装为开发分支(推荐用于测试,与稳定版并行运行)
./build-flatpak.sh --build-flutter --dev-install
# 运行本地安装的 flatpak
flatpak run com.opensslencrypt.OpenSSLEncrypt
```
**构建选项:**
- `--build-flutter` - 打包前构建 Flutter 桌面 GUI
- `--local-install` - 安装为稳定分支(覆盖生产环境)
- `--dev-install` - 安装为开发分支(与生产环境并行,推荐)
- `-f, --force` - 强制清除构建缓存
详细构建说明请参见 `flatpak/README.md`。
### PyPI / 源码安装
**要求:**
- Python 3.11+(推荐 3.12 或 3.13)
**核心依赖:**
```
cryptography>=44.0.1
argon2-cffi>=23.1.0
PyYAML>=6.0.2
blake3>=1.0.0
```
**可选依赖:**
```
liboqs-python # Extended PQC support (HQC, ML-DSA, etc.)
# Requires liboqs (https://github.com/open-quantum-safe/liboqs)
tkinter # GUI (usually included with Python)
```
**安装:**
```
# 从 PyPI(当可用时)
pip install openssl-encrypt
# 从源码
git clone https://github.com/jahlives/openssl_encrypt.git
cd openssl_encrypt
pip install -e .
```
## **注意:** 要获得完整的后量子支持(HQC, ML-DSA),您需要手动安装 liboqs 和 liboqs-python。Flatpak 版本默认包含这些。
## 用法
### 命令行界面
```
# 基础加密(Fernet,默认设置)
python -m openssl_encrypt.crypt encrypt -i file.txt -o file.txt.enc
# AES-GCM 与 Argon2
python -m openssl_encrypt.crypt encrypt -i file.txt -o file.txt.enc \
--algorithm aes-gcm \
--enable-argon2 --argon2-rounds 3
# 后量子混合加密
python -m openssl_encrypt.crypt encrypt -i file.txt -o file.txt.enc \
--algorithm ml-kem-768-hybrid
# 使用安全模板
python -m openssl_encrypt.crypt encrypt -i file.txt --quick # Fast, good security
python -m openssl_encrypt.crypt encrypt -i file.txt --standard # Balanced (default)
python -m openssl_encrypt.crypt encrypt -i file.txt --paranoid # Maximum security
# 解密(算法从 metadata 自动检测)
python -m openssl_encrypt.crypt decrypt -i file.txt.enc -o file.txt
# 安全文件删除
python -m openssl_encrypt.crypt shred -i sensitive.txt --passes 3
# 生成随机密码
python -m openssl_encrypt.crypt generate --length 20
```
### 图形用户界面
```
python -m openssl_encrypt.crypt_gui
# 或
python -m openssl_encrypt.cli --gui
```
### Flutter 桌面 GUI
适用于 Linux, macOS 和 Windows 的跨平台 GUI。请参阅[用户指南](openssl_encrypt/docs/user-guide.md#flutter-desktop-gui-installation)进行安装。
### 密钥库操作
```
# 创建 keystore
python -m openssl_encrypt.keystore_cli_main create --keystore-path keys.pqc
# 生成 PQC keypair
python -m openssl_encrypt.keystore_cli_main generate --keystore-path keys.pqc \
--algorithm ml-kem-768
# 使用 keystore 加密
python -m openssl_encrypt.crypt encrypt -i file.txt \
--keystore keys.pqc --key-id my-key
```
## 配置模板
`templates/` 中的预配置安全配置文件:
|模板 |用例 |KDF |轮数|耗时 |
|---------------|--------------------------|-----------------------|----|-----|
|`quick.json` |快速加密,安全性良好 |Argon2 |1 |~1s |
|`standard.json`|平衡(默认) |Argon2 + SHA3 |3 |~5s |
|`paranoid.json`|最高安全性 |Argon2 + Balloon + SHA3|10+ |~60s+|
## 项目结构
```
openssl_encrypt/
├── crypt.py # CLI entry point
├── crypt_gui.py # Tkinter GUI
├── modules/
│ ├── crypt_core.py # Core encryption/decryption
│ ├── crypt_cli.py # CLI implementation
│ ├── crypt_utils.py # Utilities (shred, password gen)
│ ├── crypt_errors.py # Exception classes
│ ├── secure_memory.py # Memory protection
│ ├── secure_ops.py # Constant-time operations
│ ├── balloon.py # Balloon hashing
│ ├── randomx.py # RandomX KDF
│ ├── pqc.py # Post-quantum crypto
│ ├── pqc_adapter.py # PQC algorithm adapter
│ ├── keystore_cli.py # Keystore management
│ ├── password_policy.py # Password validation
│ ├── dbus_service.py # D-Bus integration (Linux)
│ └── plugin_system/ # Plugin sandbox
├── unittests/
│ ├── unittests.py # Main test suite (950+ tests)
│ └── testfiles/ # Test vectors (password: 1234)
├── templates/ # Security profiles
└── docs/ # Documentation
```
## 文档
|文档 |描述 |
|------------------------------------------------------------------|----------------------------------------------|
|[用户指南](openssl_encrypt/docs/user-guide.md) |安装、用法、示例、故障排除|
|[密钥库指南](openssl_encrypt/docs/keystore-guide.md) |PQC 密钥管理、双重加密 |
|[安全文档](openssl_encrypt/docs/security.md) |架构、威胁模型、最佳实践 |
|[算法参考](openssl_encrypt/docs/algorithm-reference.md)|密码和 KDF 规范 |
|[元数据格式](openssl_encrypt/docs/metadata-formats.md) |文件格式规范 (v3, v4, v5) |
|[开发设置](openssl_encrypt/docs/development-setup.md) |贡献、CI/CD、测试 |
## 测试
```
# 运行所有测试
pytest openssl_encrypt/unittests/
# 运行 with coverage
pytest --cov=openssl_encrypt openssl_encrypt/unittests/
# 运行特定测试类
pytest openssl_encrypt/unittests/unittests.py::TestCryptCore
```
`unittests/testfiles/` 中的测试文件使用密码 `1234` 加密。
## 支持
- **问题**:[GitHub Issues](https://github.com/jahlives/openssl_encrypt/issues)
- **电子邮件**:issue+world-openssl-encrypt-2-issue-@gitlab.rm-rf.ch
- **安全漏洞**:仅限电子邮件(非公开问题)
## 许可证
参见 文件。
*OpenSSL Encrypt – 采用现代密码、后量子算法和纵深防御密钥派生技术的文件加密工具。*
标签:Argon2, Balloon哈希, DNS 反向解析, HTTP工具, KDF, Kyber, ML-KEM, OpenSSL替代, Python, RandomX, 反监控, 可视化界面, 后量子密码学, 图形界面, 密钥派生函数, 开源加密软件, 文件加密, 无后门, 测试用例, 混合加密, 现代密码算法, 纵深防御, 网络安全, 蓝队防御, 请求拦截, 逆向工具, 隐私保护