Skip to content

Latest commit

 

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LynPass — 军工级本地密码管理器

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 pyperclip

使用方法

启动程序

python LynPass.py

创建保险库

首次运行自动进入创建保险库界面。

  1. 设置主密码(至少 8 位,推荐 12 位以上混合大小写/数字/符号)。
  2. 确认主密码后,自动生成加密保险库文件 vault.pass

日常使用

操作 说明
解锁 启动后输入主密码解锁
添加密码 点击 + 添加,填写网站、用户名、密码(可用内置生成器生成强密码)
查看密码 右键 →「显示密码 (5秒)」临时显示密码,5 秒后自动隐藏
复制密码 右键 →「复制密码」复制到剪贴板(8 秒自动清除)
搜索 在搜索框输入关键词,快速过滤条目
编辑/删除 选中条目后点击 ✎ 编辑✕ 删除
锁定 点击 锁定 按钮或等待 60 秒无操作自动锁定
修改主密码 菜单 →「修改主密码」,需验证原密码

打包为 EXE

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 随即清空,减少残留时间

防窥屏 (Windows)

  • 调用 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.lockvault.pass.running 为运行时文件,删除 .vault.lock 会导致 24 小时强制锁定

版本历史

v1.1.2 — 安全增强版

  • 修复锁文件循环依赖导致的 24 小时误锁
  • 审计密钥直接存储,消除双重 KDF 性能开销(兼容旧格式)
  • 审计日志添加链式 HMAC 完整性保护
  • 安全设置防止锁文件缺失时静默重置
  • 增强剪贴板清除(多格式覆盖 + 历史记录禁用 + 退出即时清除)
  • 增强内存清除(密码字符串使用后立即置空)
  • 自毁增强至 7 次覆写 + 截断
  • 截图保护同步调用
  • 修复 chmod 竞态条件

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages