CarlosBarbaHerrador/securevault
GitHub: CarlosBarbaHerrador/securevault
一款基于 Python 的本地优先 AES 加密命令行密码管理器,通过 PBKDF2 密钥派生保护凭据安全。
Stars: 0 | Forks: 0
# SecureVault



一款使用 Python 编写的本地优先、加密型 CLI 密码管理器。每个凭据在静态存储时均使用由您的主密码派生的密钥进行加密——主密码本身从不存储,且明文密钥绝不写入磁盘。
## 安全设计
| 关注点 | 处理方式 |
|---|---|
| 密钥派生 | **PBKDF2-HMAC-SHA256**,每个 vault 使用随机的 16 字节 salt 以及 **480,000 次迭代**(符合当前的 OWASP 建议),使得离线暴力破解主密码的计算成本极高。 |
| 加密 | **Fernet**(AES-128-CBC + HMAC-SHA256),同时提供机密性和篡改检测——被修改的 vault 文件将解密失败,而不是默默地返回损坏的数据。 |
| 密码输入 | 主密码始终通过 `getpass`(隐藏输入)读取,绝不作为 CLI 参数接收,因此不会泄漏到 shell 历史记录或 `ps` 输出中。 |
| 随机密码 | 使用 `secrets` 模块(CSPRNG)生成,绝不使用 `random`,因为后者对于安全敏感的数值是不安全的。 |
| 存储格式 | vault 文件仅包含 salt、迭代次数和加密 blob——使用文本编辑器检查它不会泄露有关您凭据的任何信息。 |
有关完整的实现,请参阅 [`securevault/crypto.py`](securevault/crypto.py)。
## 安装说明
```
git clone https://github.com/CarlosBarbaHerrador/securevault.git
cd securevault
pip install -r requirements.txt
```
## 使用方法
```
# 创建新 vault(提示并确认 master password)
python -m securevault.cli init
# 添加 credential(提示输入条目的 password,隐藏输入)
python -m securevault.cli add github.com --username carli
# 添加带有自动生成的强 password 的 credential
python -m securevault.cli add gitlab.com --username carli --generate
# 检索 credential
python -m securevault.cli get github.com
# 列出所有已存储的条目名称(从不打印 secrets)
python -m securevault.cli list
# 移除 credential
python -m securevault.cli remove gitlab.com
# 生成强 password 且不存储到任何位置
python -m securevault.cli generate --length 24
```
每个涉及 vault 的命令(`add`、`get`、`list`、`remove`)都会以交互方式提示输入主密码,并在内存中重新派生加密密钥——没有任何内容会被缓存到磁盘。
默认情况下,vault 位于 `./vault.json`;传入 `--file path/to/vault.json` 可使用其他位置,例如为工作和个人帐户保留独立的 vault。
## 运行测试
```
pip install -r requirements.txt
pytest -v
```
测试套件验证了(除其他事项外)**原始 vault 文件绝不包含明文的用户名或密码**(`tests/test_vault.py::test_vault_file_never_contains_plaintext_secrets`)。
## 项目结构
```
securevault/
├── securevault/
│ ├── cli.py # argparse CLI (init / add / get / list / remove / generate)
│ ├── crypto.py # PBKDF2 key derivation + Fernet encrypt/decrypt
│ ├── generator.py # secrets-based password generator
│ └── vault.py # vault load/unlock/save + entry management
├── tests/ # pytest unit tests
└── .github/workflows/ci.yml
```
## 威胁模型与局限性
这是一个作品集/教育项目,旨在演示安全的凭据存储模式,并非生产级的密码管理器。已知的局限性:
- Python 字符串是不可变的,因此主密码和派生密钥在内存中停留的时间可能会比具有显式内存清零的语言更长。
- 无法防御已遭受入侵且被主动监控的机器(如键盘记录器、内存抓取器)的攻击者。
- 没有内置同步、剪贴板自动清除或生物识别解锁功能。
对于实际应用,请优先选择经过审计的工具,例如 Bitwarden、1Password 或 KeePassXC。
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
标签:AES, Python, 凭据管理, 安全规则引擎, 密码管理器, 数据加密, 无后门, 逆向工具