LynPass 是一款军工级本地密码管理器,采用 Argon2id 密钥派生 + AES‑256‑GCM 数据加密 + HMAC 完整性保护的多层安全架构,将所有密码安全存储于单个加密文件(vault.pass)中。程序完全离线运行,无需网络连接,无服务端,数据永远掌握在你手中。
主要应用场景:安全存储网站/应用的用户名与密码,生成高强度随机密码,防止密码重用和弱密码带来的安全风险。
| 特性 | 说明 |
|---|---|
| 🔐 强加密体系 | Argon2id (256 MiB 内存) 密钥派生 + AES‑256‑GCM 认证加密 + HMAC‑SHA256 完整性校验 |
| 🧹 内存安全 | 主密码存储于 bytearray,使用后立即安全擦除(多次置零);支持 mlock / VirtualLock 锁定物理内存防交换 |
| 🛡 防暴力破解 | 连续输错指定次数(默认 5 次)可触发锁定或自毁机制(多遍覆写后删除保险库文件) |
| 👁 防窥屏 | Windows 下自动启用防截屏保护 (SetWindowDisplayAffinity) |
| ⌨ 虚拟安全键盘 | 可选屏幕虚拟键盘输入主密码,防止硬件键盘记录器 |
| 📜 加密审计日志 | 所有关键操作(解锁、添加、删除、修改主密码等)记录至独立加密的 audit.log.enc,审计密钥与主密码解耦,支持链式 HMAC 完整性校验 |
| 🔒 自动锁定 | 无操作 60 秒后自动锁定,回到登录界面 |
| 🔑 强密码生成器 | 可调节长度(8‑64)、包含符号、排除易混淆字符(l/1/O/0),基于 secrets 模块的真随机数生成 |
| 📦 单文件存储 | 所有密码存储于一个加密文件,可轻松备份至 U 盘或云盘 |
| 🚫 防并发 | 文件锁机制防止同时运行多个实例导致数据损坏 |
| 🖼 自定义图标 | 支持 icon.ico 图标文件,打造专属外观 |
| 📋 剪贴板保护 | 复制密码 8 秒后自动清除(覆盖全部文本格式),退出/锁定时立即清除 |
| 🔐 主密码修改 | 支持修改主密码,原密码验证通过后重新加密全部数据 |
- Python 3.8+
tkinter(Python 自带)cryptography(AES‑GCM / Argon2id)pyperclip(剪贴板操作)pywin32(可选,增强 Windows 剪贴板清除)
安装:
pip install cryptography pyperclippython LynPass.py首次运行自动进入创建保险库界面。
- 设置主密码(至少 8 位,推荐 12 位以上混合大小写/数字/符号)。
- 确认主密码后,自动生成加密保险库文件
vault.pass。
| 操作 | 说明 |
|---|---|
| 解锁 | 启动后输入主密码解锁 |
| 添加密码 | 点击 + 添加,填写网站、用户名、密码(可用内置生成器生成强密码) |
| 查看密码 | 右键 →「显示密码 (5秒)」临时显示密码,5 秒后自动隐藏 |
| 复制密码 | 右键 →「复制密码」复制到剪贴板(8 秒自动清除) |
| 搜索 | 在搜索框输入关键词,快速过滤条目 |
| 编辑/删除 | 选中条目后点击 ✎ 编辑 或 ✕ 删除 |
| 锁定 | 点击 锁定 按钮或等待 60 秒无操作自动锁定 |
| 修改主密码 | 菜单 →「修改主密码」,需验证原密码 |
pip install pyinstaller
pyinstaller --onefile --windowed --icon=icon.ico LynPass.py打包完成后,在 dist 目录生成 LynPass.exe,可直接运行。
主密码 + 随机盐(16B)
│
▼
Argon2id (256 MiB, 4通道, 3轮迭代)
│ (若不可用则回退至 scrypt 128 MiB)
▼
64 字节密钥材料
├── 前 32 字节 → AES-256-GCM 加密密钥 (Enc Key)
└── 后 32 字节 → HMAC-SHA256 完整性密钥 (Mac Key)
[4 字节魔数 "LYNX"]
[1 字节版本号]
[16 字节随机盐]
[12 字节 Nonce]
[AES-256-GCM 密文 (含 16 字节认证标签)]
[32 字节 HMAC-SHA256]
HMAC 覆盖:版本号 + 盐 + Nonce + 密文。任何篡改都会导致解密失败并触发安全锁定。
- 锁文件 (
.vault.lock) 由静态派生密钥加密存储失败尝试次数,同时包含 HMAC 完整性校验,解锁后自动验证是否被篡改 - 缺失或损坏的锁文件自动触发 24 小时安全锁定,防止攻击者通过删除锁文件绕过限制
- 连续错误达到上限(默认 5 次,可配置 1‑20)可选择锁定指定分钟或永久销毁保险库(7 遍覆写后永久删除)
- 安全设置(最大尝试次数、超限动作)加密存储于保险库内,锁文件丢失时不会静默重置
- 审计日志
audit.log.enc使用独立随机审计密钥(256 位)加密 - 每条记录包含链式 HMAC(前一条密文的哈希),形成完整性链条,防止删除/重排/篡改
- 审计密钥在创建保险库时随机生成,v1.1.2+ 直接存储于保险库内(消除双重 KDF 开销)
- 修改主密码时审计日志不丢失,可实现完整的操作追溯
- 主密码以
bytearray存储,锁定/退出时多遍置零 (secure_wipe) - 尝试调用
mlock(Unix) /VirtualLock(Windows) 锁定物理内存页面,防止被交换至磁盘 - 编码后的密码字符串立即置空引用,StringVar 随即清空,减少残留时间
- 调用
SetWindowDisplayAffinity(WDA_MONITOR)使窗口内容无法被截屏工具捕获 - 在窗口显示前同步调用,消除延迟窗口期
- 复制密码后 8 秒自动清除
- 清除流程:3 轮随机数据覆盖 → tkinter 清空 → 3 轮 Win32 原生覆盖(CF_UNICODETEXT + CF_TEXT + CF_OEMTEXT)→ 最终 EmptyClipboard
- 锁定/退出程序时立即清除,不依赖定时器
- 自动尝试关闭 Windows 剪贴板历史记录(注册表
EnableClipboardHistory=0)
LynPass.py # 主程序
LynPass.exe # Windows 预编译可执行文件(PyInstaller)
icon.ico # 程序图标
vault.pass # 加密保险库文件(运行后生成)
.vault.lock # 安全锁文件(防暴力破解)
audit.log.enc # 加密审计日志(链式 HMAC 保护)
vault.pass.running # 运行锁文件(自动清理)
- 主密码丢失不可恢复,请妥善保管
- 建议关闭 Windows 剪贴板历史记录(
Win+V→ 设置 → 关闭"剪贴板历史记录") - 备份
vault.pass文件时注意介质安全,文件本身已加密,但仍建议存储于可信位置 - 内存锁定在非管理员权限下可能不可用,建议配合全盘加密(BitLocker / FileVault / LUKS)使用以获得最佳安全性
.vault.lock和vault.pass.running为运行时文件,删除.vault.lock会导致 24 小时强制锁定
v1.1.2 — 安全增强版
- 修复锁文件循环依赖导致的 24 小时误锁
- 审计密钥直接存储,消除双重 KDF 性能开销(兼容旧格式)
- 审计日志添加链式 HMAC 完整性保护
- 安全设置防止锁文件缺失时静默重置
- 增强剪贴板清除(多格式覆盖 + 历史记录禁用 + 退出即时清除)
- 增强内存清除(密码字符串使用后立即置空)
- 自毁增强至 7 次覆写 + 截断
- 截图保护同步调用
- 修复 chmod 竞态条件