H8rsh100/VaultCipher
GitHub: H8rsh100/VaultCipher
VaultCipher 是一个集对称加密、非对称加密、数字签名、哈希及 IoT 设备认证与防篡改传感器链于一体的密码学工具包。
Stars: 0 | Forks: 0
# 🔐 VaultCipher




## 📌 什么是 VaultCipher?
VaultCipher 是一个功能全面的加密工具包,可让你使用经过实战检验的算法进行**加密、解密、哈希、签名和验证**:
- **AES-256-GCM** — 政府和银行使用的对称认证加密
- **RSA-2048/4096** — 支持 HTTPS、SSH 和安全通信的非对称加密
- **RSA-PSS** — 用于消息认证和不可否认性的数字签名
- **SHA-256/384/512** — 用于完整性校验的密码学哈希
- **密码强度分析** — 基于熵的密码评分与模式检测
- **IoT 设备认证** — 使用 RSA 密钥注册唯一的设备 ID,并通过密码学方式将解密的 payload 限制在目标设备上
- **IoT 传感器完整性链** — 按时间顺序、防篡改的哈希链传感器日志,通过 RSA-PSS 签名以防止遥测数据注入或修改
它提供了两种界面:
- 用于基于终端的加密操作的 **Python CLI**
- **完全离线的浏览器 UI** — 打开 `index.html` 即可直接运行,无需网络
## 📁 项目结构
```
VaultCipher/
├── index.html # Web UI (open in any browser)
├── forge.min.js # Crypto library for browser (offline)
├── vaultcipher_cli.py # Python CLI tool
├── requirements.txt # Python dependencies
├── SECURITY.md # Security policy & best practices
├── keys/ # Generated RSA key pairs (gitignored)
│ ├── private_key.pem
│ └── public_key.pem
└── README.md
```
## 🚀 快速开始
### 前置条件
- Python 3.8+
- pip
### 安装依赖
```
pip install -r requirements.txt
```
## 💻 CLI 用法
### AES-256-GCM — 对称加密
**加密消息:**
```
python vaultcipher_cli.py aes-encrypt --text "your secret message" --password "yourpassword"
```
**解密消息:**
```
python vaultcipher_cli.py aes-decrypt --payload "BASE64_CIPHERTEXT_HERE" --password "yourpassword"
```
### RSA-2048 — 非对称加密
**生成密钥对:**
```
python vaultcipher_cli.py rsa-keygen --bits 2048 --output ./keys
```
**使用公钥加密:**
```
python vaultcipher_cli.py rsa-encrypt --text "hello" --pubkey ./keys/public_key.pem
```
**使用私钥解密:**
```
python vaultcipher_cli.py rsa-decrypt --payload "BASE64_CIPHERTEXT_HERE" --privkey ./keys/private_key.pem
```
### ✍️ RSA-PSS — 数字签名
**签名消息:**
```
python vaultcipher_cli.py rsa-sign --message "I approve this transaction" --privkey ./keys/private_key.pem
```
**验证签名:**
```
python vaultcipher_cli.py rsa-verify --message "I approve this transaction" --signature "BASE64_SIG" --pubkey ./keys/public_key.pem
```
### 🔑 SHA 哈希
**文本哈希(默认使用 SHA-256):**
```
python vaultcipher_cli.py hash-text --text "hello world"
```
**使用其他算法哈希:**
```
python vaultcipher_cli.py hash-text --text "hello world" --algorithm sha512
```
**文件哈希(流式处理,内存高效):**
```
python vaultcipher_cli.py hash-file --file ./README.md --algorithm sha256
```
### 🔒 密码强度分析
```
python vaultcipher_cli.py password-strength --password "MyS3cur3P@ssw0rd!"
```
输出内容包括:
- 得分(0–100)及可视化进度条
- 评级(CRITICAL / WEAK / FAIR / GOOD / STRONG)
- 以比特为单位的熵估算
- 关于如何改进的可操作性反馈
### 📡 IoT 设备认证与传感器数据完整性链
使用设备关联的密钥对、混合认证加密和防篡改的区块链式哈希链,在本地保护传感器读数。
#### 1. 设备身份注册
注册一个虚拟 IoT 设备(在 `devices//` 目录下创建专用的 RSA 密钥对和本地签名的 JSON 证书):
```
python vaultcipher_cli.py device-register --device-id "sensor-42"
```
#### 2. 设备绑定的加密与解密
专门为 `sensor-42` 加密数据。如果尝试使用任何其他设备 ID 解密将会失败(强制执行访问控制):
```
# 加密锁定到特定 device ID 的数据
python vaultcipher_cli.py device-encrypt --text "temp=22.5,humidity=60" --device-id "sensor-42"
# 使用授权的 device ID 解密(成功情况)
python vaultcipher_cli.py device-decrypt --payload "ENCRYPTED_PAYLOAD" --device-id "sensor-42"
# 使用未授权的 device ID 解密(立即失败并提示 ACCESS DENIED)
python vaultcipher_cli.py device-decrypt --payload "ENCRYPTED_PAYLOAD" --device-id "hacker-99"
```
#### 3. 防篡改传感器链
为传感器遥测数据构建一个连续的、哈希链接的加密签名账本。对历史区块的任何更改都会立即破坏链验证。
```
# 初始化链(生成 Block 0 Genesis)
python vaultcipher_cli.py sensor-init --device-id "sensor-42"
# 将新读数推送到链(自动通过 RSA-PSS 签名并链接到 prev_hash)
python vaultcipher_cli.py sensor-push --device-id "sensor-42" --reading "temp=22.5"
python vaultcipher_cli.py sensor-push --device-id "sensor-42" --reading "temp=22.8"
# 验证链完整性(验证所有哈希、prev_hash 链接、索引和签名)
python vaultcipher_cli.py sensor-verify --device-id "sensor-42"
```
## 🌐 Web UI 用法
1. 确保 `index.html` 和 `forge.min.js` 位于**同一文件夹**中
2. 双击 `index.html` 在浏览器中打开
3. 无需互联网连接 — 所有操作均在本地运行
| 标签页 | 功能 |
|-----|----------|
| **AES** | 使用密码加密/解密 + 实时强度计 |
| **RSA** | 生成密钥、加密/解密、签名/验证消息 |
| **HASHING** | SHA-256/384/512/SHA-1 摘要计算 |
| **HOW IT WORKS** | 密码学概念解释 |
## 🔬 工作原理 — 密码学
### AES-256-GCM(对称)
GCM(Galois/Counter Mode)模式下的 AES(Advanced Encryption Standard)是对称加密的黄金标准。使用相同的密钥进行加密和解密。
| 参数 | 值 |
|-----------|-------|
| 密钥大小 | 256 位 |
| 模式 | GCM(认证加密) |
| KDF | PBKDF2-SHA256 |
| 迭代次数 | 480,000 |
| Salt | 16 字节(每次操作随机生成) |
| Nonce | 12 字节(每次操作随机生成) |
**分步加密流程:**
1. 生成随机的 16 字节 **salt**
2. 使用 **PBKDF2-SHA256**(48 万次迭代)从你的密码中推导出 256 位密钥
3. 生成随机的 12 字节 **nonce**
4. 使用 **AES-GCM** 加密消息 → 生成密文和 16 字节认证标签
5. 输出:`base64(salt + nonce + ciphertext + tag)`
**为什么使用 PBKDF2?** 原始密码是弱密钥。PBKDF2 将你的密码扩展为标准的 256 位密钥,并使暴力破解在计算上变得昂贵。
**为什么使用 GCM?** GCM 提供*认证加密* — 如果任何人篡改了密文,解密就会失败。你可以同时获得**机密性**和**完整性**。
### 使用 OAEP 的 RSA-2048(非对称)
RSA 使用数学上关联的密钥对。公钥加密的内容,只有私钥才能解密 — 反之亦然。
| 参数 | 值 |
|-----------|-------|
| 密钥大小 | 2048 / 4096 位 |
| 填充 | OAEP-SHA256 |
| 公钥指数 | 65537 |
| 格式 | PEM (PKCS#1) |
| 最大消息大小 | ~190 字节(2048 位密钥) |
**RSA 背后的数学原理:** 安全性依赖于这样一个事实:将两个大素数相乘很容易,但在这种规模下将乘积分解回这些素数在计算上是不可行的。
**为什么使用 OAEP?** 原始/教科书式的 RSA 存在已知的漏洞。OAEP(Optimal Asymmetric Encryption Padding)增加了随机性和结构,从而抵御了这些攻击。
**现实世界的模式(混合加密):** 单靠 RSA 只能加密较小的 payload。在生产系统中,AES 用于加密实际数据,而 RSA 用于加密 AES 密钥。HTTPS 就是这么工作的。
### RSA-PSS(数字签名)
RSA-PSS(Probabilistic Signature Scheme)提供**认证**和**不可否认性**:
| 参数 | 值 |
|-----------|-------|
| 方案 | PSS(Probabilistic Signature Scheme) |
| 哈希 | SHA-256 |
| Salt 长度 | 最大值 |
| 用例 | 消息认证、代码签名 |
**工作原理:**
1. 使用 SHA-256 对消息进行哈希处理
2. 使用私钥和 PSS 填充对哈希进行签名
3. 任何拥有公钥的人都可以验证签名
4. 如果消息被篡改,验证将失败
### 密码学哈希 (SHA)
| 算法 | 摘要大小 | 状态 |
|-----------|-------------|--------|
| SHA-256 | 256 位(64 个十六进制字符) | ✅ 推荐 |
| SHA-384 | 384 位(96 个十六进制字符) | ✅ 安全 |
| SHA-512 | 512 位(128 个十六进制字符) | ✅ 安全 |
| SHA-1 | 160 位(40 个十六进制字符) | ⚠️ 遗留 |
| MD5 | 128 位(32 个十六进制字符) | ❌ 已破解 |
### 📡 设备绑定的混合加密 (IoT)
结合非对称 (RSA-OAEP) 和对称 (AES-GCM) 加密技术,将 payload 锁定到特定设备。
- **身份网关**:目标设备 ID 被打包进带有长度前缀的 header 中。接收后,网关会将此 ID 与本地设备 ID 进行比较。如果不匹配,程序会在密钥解密前中止。
- **目的地验证**:设备 ID 还作为 Additional Authenticated Data (AAD) 传递给 AES-GCM 引擎。这保证了攻击者无法在不导致 GCM 标签验证失败的情况下篡改目标设备 ID 的 header 字段。
### ⛓️ IoT 传感器完整性链(区块链式账本)
用于记录传感器读数的连续的、防篡改的账本。
- **顺序哈希**:每个读数区块都存储前一个区块的哈希值(`prev_hash`)。区块自身的哈希值是通过按字母顺序序列化 JSON 键来计算的,明确排除了 `hash` 和 `signature` 字段,以防止循环依赖错误。
- **密码学签名**:设备通过 RSA-PSS 填充使用其私有的 RSA 密钥对区块哈希进行签名。在验证期间,链验证器会重新计算所有哈希值,并根据设备的公钥检查所有签名,立即标记出任何历史修改。
## 🛡️ 涵盖的安全概念
| 概念 | 描述 |
|---------|-------------|
| **Salt** | 哈希前添加到密码中的随机数据 — 抵御彩虹表攻击 |
| **Nonce** | 每次加密仅使用一次 — 确保相同的消息每次加密结果不同 |
| **PBKDF2** | 刻意减慢的密钥推导 — 使暴力破解攻击代价高昂 |
| **认证加密** | GCM 的认证标签可检测对密文的任何篡改 |
| **公钥/私钥对** | 所有现代安全通信的基础 |
| **数字签名** | RSA-PSS 证明消息的真实性并检测篡改 |
| **PEM 格式** | 用于存储和共享 RSA 密钥的标准文本格式 |
| **OAEP 填充** | 增强 RSA 以抵御已知攻击的安全填充方案 |
| **PSS 填充** | 概率签名填充 — 比 PKCS#1 v1.5 更安全 |
| **Entropy** | 衡量密码或密钥随机性/不可预测性的指标 |
## 📦 依赖项
| 工具 | 用途 |
|------|---------|
| `cryptography` (Python) | 为 CLI 提供 AES-GCM、RSA、PBKDF2、PSS 签名支持 |
| `forge.min.js` (浏览器) | 为离线 Web UI 提供完整的加密库支持 |
## ⚠️ 重要提示
- **切勿将你的 `keys/` 文件夹提交到 GitHub** — 你的私钥必须保密
- 使用 2048 位密钥时,RSA 每次加密限制为 ~190 字节 — 对于大型数据请使用 AES
- 本项目仅供**教育使用** — 对于生产系统,请使用成熟的库并遵循安全审计规范
- 所有加密操作均在**本地**运行 — 不会向外部发送任何数据
- 有关详细的安全最佳实践,请参阅 [SECURITY.md](SECURITY.md)
## 👤 作者
由 **[H8RSH100](https://github.com/H8rsh100)** 构建 — CS/IT 工程学生
网络安全作品集系列的一部分。
## 📄 许可证
MIT 许可证 — 可免费使用、修改和学习。
标签:Python, 前端组件, 加密解密, 区块链存证, 后端开发, 密码学工具, 数据可视化, 无后门, 物联网认证