H8rsh100/VaultCipher

GitHub: H8rsh100/VaultCipher

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

Stars: 0 | Forks: 0

# 🔐 VaultCipher ![Made with Python](https://img.shields.io/badge/Python-3.8+-3776AB?style=flat&logo=python&logoColor=white) ![Crypto](https://img.shields.io/badge/Crypto-AES--256--GCM%20%7C%20RSA--2048%20%7C%20SHA-00f5c4?style=flat) ![License](https://img.shields.io/badge/License-MIT-green?style=flat) ![Status](https://img.shields.io/badge/Status-Active-brightgreen?style=flat) ## 📌 什么是 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, 前端组件, 加密解密, 区块链存证, 后端开发, 密码学工具, 数据可视化, 无后门, 物联网认证