toxicbishop/Crypt-Vault
GitHub: toxicbishop/Crypt-Vault
一款零依赖的 AES-256 文件加密工具,结合自建区块链审计链与 P2P 网络,提供防篡改的操作追踪与多用户合规审计能力。
Stars: 3 | Forks: 0
# CryptVault — 安全加密文件共享系统
[](https://github.com/toxicbishop/Crypt-Vault/actions/workflows/build.yml)





一款混合了 **C++ + x64 汇编** 的加密工具,具备**由区块链支撑的防篡改审计追踪**和 **P2P 多用户网络**。完全从零构建,零外部依赖。

## 为什么选择 CryptVault?
| | VeraCrypt | GPG | 7-Zip | **CryptVault** |
| ---------------------- | --------- | --- | ----- | -------------- |
| AES-256 加密 | ✅ | ✅ | ✅ | ✅ |
| 硬件 ASM (AES-NI) | ❌ | ❌ | ❌ | ✅ |
| CPUID 自动检测 | ❌ | ❌ | ❌ | ✅ |
| 区块链审计追踪 | ❌ | ❌ | ❌ | ✅ |
| HMAC 篡改检测 | ❌ | ❌ | ❌ | ✅ |
| P2P 多用户网络 | ❌ | ❌ | ❌ | ✅ |
| 零依赖 | ❌ | ❌ | ✅ | ✅ |
| 完整的 CLI 脚本支持 | ❌ | ✅ | ✅ | ✅ |
## 团队
| Name | USN | Role |
| ------------ | ---------- | --------------------------------------------------------------------------------------- |
| **Pranav** | 1KG23CB038 | 密码学工程师 — AES-256-CBC 引擎,PKCS7 填充,x64 ASM AES 块操作 |
| **Rohith R** | 1KG23CB044 | 项目负责人及架构师 — 系统结构,类层次结构,应用流程 |
| **Syed** | 1KG23CB052 | 安全与密钥管理 — SHA-256,PBKDF2,HMAC,x64 ASM secure_memzero |
| **Supreeth** | 1KG23CB051 | 工具与测试 — 批处理,文件操作,SHA-256 哈希 |
## 功能
### 加密引擎
- **AES-256-CBC** — 工业标准的 256 位对称加密
- **x64 汇编路径** — 在可用时使用 Intel AES-NI 硬件指令
- **CPUID 自动检测** — 在不支持的硬件上自动回退到 C++
- **PBKDF2-SHA256** — 包含随机盐的 100,000 次迭代(抗暴力破解)
- **HMAC-SHA256** — 先加密后认证模式可在解密前检测篡改
- **随机 IV + Salt** — 每次加密都会产生唯一的密文
### 安全性
- **安全密码输入** — 掩码输入防止偷窥
- **密码确认** — 二次输入防止因拼写错误导致的灾难
- **常数时间 HMAC 比较** — 防止时序攻击
- **安全内存擦除** — 使用后密钥将从内存中清零 (ASM)
### 文件操作
- **文件加密/解密** — 支持任何文件类型:文本、图像、二进制文件
- **文本加密** — 快速内联加密/解密并输出十六进制
- **批处理** — 一次加密或解密多个文件
- **SHA-256 文件哈希** — 验证文件完整性
### 区块链审计追踪
- **防篡改操作日志** — 每次加密/解密/删除都会记录在链上
- **SHA-256 哈希链接** — 修改任何块都会使后续所有块失效
- **工作量证明挖矿** — 使事后篡改在计算上代价极高
- **数字签名** — 每个块都使用节点的私钥进行签名
- **HTML 报告导出** — 生成合规性审计报告(HIPAA、法律、金融)
### P2P 多用户网络
- **跨平台** — 同一代码库支持 Windows (winsock2) 和 Linux (POSIX sockets)
- **最长链共识** — 与 Bitcoin 相同的规则:最长有效链获胜
- **区块广播** — 新区块自动广播到所有已连接的节点
- **自动链同步** — 新节点在连接时同步最新链
- **节点发现** — 简单的 `peers.txt` 配置
## 构建
### Windows
```
g++ -std=c++17 -O2 -o crypt-vault.exe \
src/Crypt-Vault.cpp src/blockchain_audit.cpp src/p2p_node.cpp src/eth_logger.cpp -lws2_32 -lssl -lcrypto
```
### Linux
```
g++ -std=c++17 -O2 -o crypt-vault \
src/Crypt-Vault.cpp src/blockchain_audit.cpp src/p2p_node.cpp src/eth_logger.cpp -lpthread -lssl -lcrypto
```
### 平台支持
| Platform | Status | Notes |
| -------- | ----------- | ------------------------- |
| Windows | ✅ 完整支持 | 原生 winsock2 |
| Linux | ✅ 完整支持 | POSIX sockets + pthreads |
| macOS | ⚠️ 未测试 | 理论上可行,但未经验证 |
### 依赖项
- **Windows**: `ws2_32.lib` (Windows 自带) 和 **OpenSSL** (通过 MSYS2 或 vcpkg 安装)
- **Linux**: `pthread` (Linux 自带) 和 **OpenSSL** (`sudo apt install libssl-dev`)
- 注意:安全的 P2P TLS 以及与 Ethereum RPC 通信需要 OpenSSL。
## 使用方法
```
./crypt-vault # Linux
.\crypt-vault.exe # Windows
```
### 菜单
| # | 功能 |
| --- | ---------------------------- |
| 1 | 🔒 加密文件 |
| 2 | 🔓 解密文件 |
| 3 | 🔤 加密文本 (快速) |
| 4 | 🔤 解密文本 (快速) |
| 5 | 📂 批量加密文件 |
| 6 | 📂 批量解密文件 |
| 7 | 👁️ 查看文件内容 |
| 8 | 📈 文件统计信息 |
| 9 | #️⃣ SHA-256 文件哈希 |
| 10 | ⛓️ 查看区块链审计日志 |
| 11 | 🔍 验证链完整性 |
| 12 | 📡 P2P 网络状态 |
| 13 | 📚 关于 |
| 14 | 🚪 退出 |
## 加密工作原理
1. 输入**密码**(用 `*` 掩码显示)并确认
2. 生成**随机 16 字节 salt**
3. **PBKDF2-SHA256** 派生出 64 字节密钥(100,000 次迭代)
- 前 32 字节 → AES-256 加密密钥
- 后 32 字节 → HMAC 认证密钥
4. 生成**随机 16 字节 IV**
5. 数据进行 **PKCS7 填充**并使用 **AES-256-CBC** 加密
6. 对 `salt + IV + ciphertext` 计算 **HMAC-SHA256**
7. 输出:`[salt][IV][ciphertext][HMAC]` 并保存为 `.enc`
## 区块链工作原理
每次操作(加密、解密、删除、密钥交换)都会创建一个新区块:
```
Block #N
├── index
├── timestamp
├── operation (ENCRYPT / DECRYPT / DELETE / KEY_EXCHANGE)
├── filename
├── file SHA-256 hash
├── HMAC verified?
├── signer public key
├── digital signature
├── previous block hash ← links to Block #N-1
└── block hash ← SHA-256 of all above
```
更改任何区块中的任何字段都会破坏其后所有的哈希值 —— **立即检测到篡改**。
## Ethereum 审计日志记录器
CryptVault 可以通过智能合约将其本地区块链哈希永久锚定到 Ethereum Mainnet(或 Sepolia Testnet)。这为审计日志在特定时间的存在提供了数学上无可辩驳的证明。
要启用 Ethereum 日志记录器,请设置以下环境变量:
- `CRYPTVAULT_ETH_RPC`: 你的 Infura 或 Alchemy RPC URL(例如,`https://sepolia.infura.io/v3/YOUR-PROJECT-ID`)
- `CRYPTVAULT_ETH_KEY`: 你的 Ethereum 钱包的 64 字符十六进制私钥(不带 `0x` 前缀)
- `CRYPTVAULT_ETH_CONTRACT`: 40 字符十六进制合约地址(不带 `0x` 前缀)
如果存在这些变量,CryptVault 将每 10 个区块自动发送一笔交易,将最新的区块哈希锚定到区块链上。要禁用 Ethereum 日志记录,只需移除这些变量。
## P2P 多用户设置
### 1. 在你的可执行文件旁边创建 `peers.txt`
```
# peers.txt — 每行一个 IP:PORT,# 用于注释
192.168.1.10:8333 # Team Member 1 (Windows)
192.168.1.11:8333 # Team Member 2 (Windows)
192.168.1.12:8333 # Team Member 3 (Linux)
192.168.1.13:8333 # Team Member 4 (Linux)
```
### 2. 在每台机器上运行
```
.\crypt-vault.exe # Each team member runs their own node
```
### 3. 自动执行的操作
- 每个节点在首次运行时都会获得一个唯一身份 (`identity.key`)
- 节点连接到对等方,同步最新的链
- 每次加密操作都会被签名并广播给所有对等方
- 所有节点独立验证每个区块
- 篡改一个节点的链 —— 其他三个节点将拒绝它
### 本地主机测试(同一台机器,两个终端)
```
# Terminal 1
./test_p2p node_a 8333
# Terminal 2
./test_p2p node_b 8334
```
## 安全说明
- **AES-256** 有 2²⁵⁶ 种可能的密钥 —— 在计算上是不可能被暴力破解的
- **PBKDF2(10 万次迭代)** 使密码猜测极其缓慢
- **HMAC 验证**在解密之前进行 —— 被篡改的文件会被立即拒绝
- **常数时间比较**可防止针对 HMAC 验证的时序攻击
- **CBC 模式**确保相同的明文块产生不同的密文
- **随机 salt + IV** 意味着同一个文件加密两次会产生完全不同的输出
- **安全性取决于密码强度** —— 请使用长而复杂的密码短语
## 领域
**网络安全 / 信息安全** — 应用密码学与安全通信
## 许可证
[GPL-3.0](LICENSE)
标签:AES-256, C++, P2P网络, 加密工具, 区块链审计, 安全测试工具, 数据擦除, 漏洞评估