Tanmay-Bhatnagar22/Aesora
GitHub: Tanmay-Bhatnagar22/Aesora
一款基于 AES-256-GCM 的跨平台命令行文件加密工具,通过认证加密和高强度密钥派生实现单文件的安全保护与完整性校验。
Stars: 1 | Forks: 0
# Aesora - 安全的文件加密工具
## 概述
**Aesora** 是一个使用 C++ 构建的命令行文件加密工具,通过认证加密提供军规级的文件保护。
### 主要特性
- **AES-256-GCM 加密**:提供机密性和完整性的认证加密
- **PBKDF2-HMAC-SHA256 密钥派生**:310,000 次迭代抵御暴力破解攻击
- **二进制安全**:可加密任何文件类型(图像、压缩包、PDF 等)
- **安全密码处理**:密码绝不会在进程列表或 shell 历史记录中暴露
- **完整性验证**:GCM 认证标签可检测篡改行为
- **跨平台**:支持 Windows、macOS 和 Linux
## 快速开始
### 安装说明
**前置条件:**
- C++17 编译器 (GCC, Clang, MSVC)
- OpenSSL 开发库 (libssl-dev)
- CMake 3.12+
**构建:**
```
cd Aesora
mkdir build && cd build
cmake ..
make
```
**可执行文件:** `./aesora` (在 Windows 上为 `aesora.exe`)
### 使用方法
**加密文件:**
```
./aesora encrypt document.pdf document.pdf.aesora
```
将交互式提示输入密码。
**解密文件:**
```
./aesora decrypt document.pdf.aesora document.pdf
```
输入加密时使用的相同密码。
## 技术架构
### 模块化设计
```
include/
├── crypto_utils.h # Cryptographic operations (PBKDF2, AES-256-GCM)
├── file_utils.h # File I/O (binary-safe reading/writing)
├── encrypt.h # File encryption orchestration
└── decrypt.h # File decryption orchestration
src/
├── main.cpp # CLI interface and password handling
├── encrypt.cpp # Encryption implementation
├── decrypt.cpp # Decryption implementation
├── crypto_utils.cpp # OpenSSL wrapper functions
└── file_utils.cpp # File operations
tests/
└── test_aesora.cpp # Comprehensive test suite
```
### 文件格式
Aesora 加密文件具有特定的二进制格式:
```
[8 bytes: Magic Header "AESORA\0\0"]
[16 bytes: Random Salt]
[12 bytes: Random IV]
[Variable: Encrypted Plaintext]
[16 bytes: GCM Authentication Tag]
```
**最小加密文件大小:** 52 字节(空明文)
## 安全设计
### 密码学原语
| 组件 | 算法 | 理由 |
|-----------|-----------|---------------|
| 加密 | AES-256-GCM | NIST 批准的,单次处理认证加密 |
| 密钥派生 | PBKDF2-HMAC-SHA256 | NIST 批准的,310,000 次迭代(约 300ms/次猜测) |
| 随机生成 | OpenSSL RAND_bytes | 密码学安全的操作系统熵池 |
| 认证 | GCM 标签 (16 字节) | 检测任何篡改,防止填充预言攻击 |
### 威胁缓解
| 威胁 | 缓解措施 |
|--------|-----------|
| **暴力破解密码攻击** | 使用 310,000 次迭代的 PBKDF2(每次尝试约 300ms) |
| **彩虹表攻击** | 每个密码使用随机的 16 字节 Salt |
| **重放/可预测的 IV** | 每次加密使用随机的 12 字节 IV |
| **数据篡改** | 在解密期间验证 GCM 认证标签 |
| **密码泄露** | 交互式终端提示(非 CLI 参数) |
| **内存中的密钥** | 通过 volatile 写入清除敏感数据 |
| **弱密码** | PBKDF2 可部分缓解弱密码(攻击者仍需破解) |
### 安全注意事项
1. **密码强度:** Aesora 无法保护弱密码。用户应使用:
- 至少 12 个字符
- 包含大写字母、小写字母、数字和特殊字符的混合
- 每个文件/用例使用唯一的密码
2. **物理安全:** 无法防御:
- 冷启动攻击(RAM 数据恢复)
- 侧信道攻击(时序、功耗分析)
- 具有 OS 级访问权限的恶意软件
- 量子计算机(未来对 RSA/ECC 的威胁,与 AES/PBKDF2 无关)
3. **文件元数据:** Aesora 不会加密:
- 文件名
- 文件时间戳
- 文件权限
- 目录结构
## 使用示例
### 示例 1:加密 PDF 文档
```
$ ./aesora encrypt financial_report.pdf financial_report.pdf.aesora
Enter password for encryption: [password hidden]
Encryption successful!
Input file: financial_report.pdf
Output file: financial_report.pdf.aesora
Original size: 2457600 bytes
Encrypted size: 2457652 bytes
Overhead: 52 bytes
```
### 示例 2:解密并验证
```
$ ./aesora decrypt financial_report.pdf.aesora financial_report.pdf
Enter password for decryption: [password hidden]
Decryption successful!
Encrypted file: financial_report.pdf.aesora
Decrypted file: financial_report.pdf
Plaintext size: 2457600 bytes
Encryption overhead: 52 bytes
```
### 示例 3:使用错误密码尝试解密
```
$ ./aesora decrypt financial_report.pdf.aesora output.pdf
Enter password for decryption: [wrong password]
ERROR: Decryption failed: Authentication tag verification failed.
Possible causes: wrong password or file was corrupted/modified.
```
## 构建与测试
### 从源代码构建
```
# 克隆并进入目录
cd Aesora
mkdir build && cd build
# 使用 CMake 配置
cmake ..
# 构建
make
# 运行测试(如果已编译)
ctest --verbose
```
### 运行测试
```
./test_aesora
```
测试涵盖:
- 基本的加密/解密往返测试
- 错误密码检测
- 二进制文件支持
- 空文件
- 大文件(10MB 以上)
- 文件损坏检测
- 密码中的特殊字符
- 密钥派生一致性
## 性能
在现代 CPU 上的典型性能(支持 AES-NI 加速):
| 操作 | 耗时 | 备注 |
|-----------|------|-------|
| 密钥派生 (PBKDF2) | 300-500ms | 取决于密码长度 |
| 加密 (AES-256-GCM) | 100-200 MB/秒 | 在现代系统上受限于磁盘 I/O |
| 解密 (AES-256-GCM) | 100-200 MB/秒 | 包含认证验证 |
**示例:** 100MB 文件加密 = 约 300ms (PBKDF2) + 约 500ms (加密) = 总计约 800ms
## OpenSSL 配置
### Windows
如果在 CMake 配置期间未找到 OpenSSL:
1. 下载:https://slproweb.com/products/Win32OpenSSL.html
2. 安装到 `C:\Program Files\OpenSSL-Win64`
3. 设置环境变量:`OPENSSL_ROOT_DIR=C:\Program Files\OpenSSL-Win64`
或者,使用 vcpkg:
```
vcpkg install openssl:x64-windows
```
### Linux
```
# Ubuntu/Debian
sudo apt-get install libssl-dev
# Fedora/RHEL
sudo dnf install openssl-devel
# Alpine
apk add openssl-dev
```
### macOS
```
brew install openssl
```
## 安全审计清单
- [x] 使用 NIST 批准的密码学算法 (AES-256, PBKDF2-HMAC-SHA256)
- [x] 认证加密 (AES-256-GCM) 防止篡改
- [x] 高迭代次数的 PBKDF2 抵御暴力破解
- [x] 随机 Salt 防止彩虹表攻击
- [x] 随机 IV 防止出现模式
- [x] 密码不被存储或记录
- [x] 内存中的敏感数据被清除
- [x] 无硬编码的密钥或常量
- [x] 适当的错误处理且无信息泄露
- [x] 正确支持二进制文件
- [x] 文件格式验证防止处理非 Aesora 文件
## 限制与未来工作
### 当前限制
1. **整个文件载入内存:** 不支持大文件(大于可用 RAM)
2. **不支持密钥文件:** 仅支持基于密码的加密
3. **无元数据加密:** 文件名、时间戳可见
4. **无多文件归档:** 一次只能处理单个文件
### 潜在的改进方向
1. **流式加密:** 处理大于 RAM 的文件
2. **密钥文件:** 支持 .pem 私钥以提供额外的安全性
3. **批量加密:** 使用一个命令加密多个文件
4. **受密码保护的归档:** 创建加密的 .tar.gz 文件
5. **CLI 进度指示器:** 显示大文件的加密进度
6. **元数据加密:** 可选的文件名/时间戳混淆
## 许可证
详情请参阅 LICENSE 文件。
## 安全报告
如果您发现安全漏洞,请勿公开提 issue。相反,请执行以下操作:
1. 记录该漏洞
2. 私下报告给维护者
3. 在公开披露之前留出修复时间
## 参考文献
- NIST SP 800-132: PBKDF2 规范
- NIST SP 800-38D: GCM 模式规范
- RFC 5116: 密码学算法接口和用法
- OpenSSL 文档:https://www.openssl.org/docs/
## 常见问题
**问:我可以将 Aesora 用于合规性(HIPAA、PCI-DSS 等)吗?**
答:Aesora 使用的 NIST 批准算法适用于受监管环境。但是,请审计加密使用情况并查阅合规性要求。
**问:该工具是开源的吗?**
答:是的,请参阅 LICENSE 文件。
**问:我可以将 Aesora 集成到我的应用程序中吗?**
答:可以,模块化设计允许链接加密库。请参阅 `include/encrypt.h` 和 `include/decrypt.h`。
**问:如果我忘记了我的密码怎么办?**
答:没有密码恢复功能。丢失密码 = 丢失数据(出于安全设计的考虑)。请使用密码管理器。
**问:我该如何验证文件完整性?**
答:Aesora 使用 GCM 认证标签在解密期间验证密文。如果解密成功,则文件是真实的。
**最后更新:** 2026 年 5 月 5 日
**版本:** 1.0 正式版
标签:AES-256-GCM, Bash脚本, C++, CMake, DNS 反向解析, OpenSSL, PBKDF2, ProjectDiscovery, Zenmap, 二进制安全, 加密工具, 安全测试工具, 密码学, 手动系统调用, 数据保密性, 数据保护, 数据完整性, 数据擦除, 文件加密, 文件解密, 网络安全, 防篡改, 隐私保护