QREcrypt - 安全文件加密工具

Keywords: #技术 #Golang #Fyne #密码学 #加密
Table of Contents

QREcrypt 是一个基于 Go 语言开发的文件加密和管理工具,提供了安全可靠的文件加密和管理功能。本工具采用现代加密算法,结合双重认证机制,为用户提供了一个安全的文件加密解决方案。

banner2.png

主要特性

  • 支持多种高强度加密算法(QChaCha 20、XChaCha 20、ChaCha 20、AES-256 等)
  • 集成双重认证(2 FA)机制,提供额外的安全保障
  • 直观的图形用户界面,支持列表和网格两种文件视图模式
  • 文件完整性验证,确保加密和解密过程的可靠性
  • 支持文件搜索功能,方便管理大量加密文件
  • 自动生成强密钥功能,帮助用户创建高强度密码

安装说明

  1. 点击下载最新版本
  2. 解压下载的文件
  3. 运行 QREcrypt.exe 可执行文件

使用指南

用户注册

image-20241122000320788

  1. 启动程序,点击注册用户按钮
  2. 填写以下信息:
    • 用户名:设置您的账户名称
    • 主密钥:用于登录系统的主要密码
    • 副密钥:用于加密/解密文件的密码
  3. 点击生成强密钥可自动生成安全的随机密码
  4. 点击绑定认证码,使用 Google Authenticator 等 2 FA 应用扫描显示的二维码
  5. 输入 2 FA 应用显示的 6 位验证码
  6. 点击注册用户完成注册

用户登录

image-20241122000256884

  1. 输入用户名和主密钥
  2. 输入 2 FA 应用当前显示的 6 位验证码
  3. 点击登录用户

加密设置

image-20241122000402857

  1. 点击工具栏的加密设置按钮
  2. 选择不同的文件加密算法
  3. 选择不同的密钥派生算法
  4. 点击保存按钮

文件加密

image-20241122000415508

  1. 点击工具栏的加密文件按钮
  2. 输入副密钥进行验证
  3. 选择需要加密的文件
  4. 等待加密完成

文件解密

image-20241122000429122

  1. 在文件列表中选择要解密的文件
  2. 点击工具栏的解密文件按钮
  3. 输入副密钥进行验证
  4. 选择解密文件的保存位置
  5. 等待解密完成

其他功能

image-20241122000500951

  • 帮助:打开在线帮助文档
  • 网格视图:以网格形式显示文件
  • 列表视图:以树形列表显示文件
  • 删除:删除选中的加密文件
  • 导出:导出用户的所有数据,用于迁移数据到新设备
  • 导入:导入用户的所有数据,用于从旧设备迁移数据
  • 锁定:临时锁定界面,需要输入 2 FA 码解锁
  • 注销:退出当前用户

安全建议

  • 请妥善保管主密钥副密钥,这些密码无法找回
  • 定期备份加密的文件
  • 不要在不安全的设备上使用本软件
  • 建议使用自动生成的强密钥

软件原理

底层数据结构

QREcrypt 使用一个主文件夹 (.QREcrypt) 来存储用户的所有数据,并为每个用户维护一个用户主文件夹 (.QREcrypt/用户名)。

.QREcrypt
├── 用户名
│   ├── .用户名_config.enc
│   ├── 加密文件1.enc
│   ├── 加密文件2.enc
│   └── ...
└── ...

每一个用户都拥有一个用户配置文件 (.QREcrypt/用户名/.用户名_config.enc),其中存放用户的所有数据信息,使用 json 格式。其中主密钥副密钥使用 Bcrypt 哈希,Google Authenticator 私钥使用 AES-256 加密,密钥为软件信息+用户信息使用 Argon 2 算法进行密钥派生,文件名称文件内容使用 SHA-256 进行哈希。整个用户配置文件再次使用 XChaCha 20 算法进行加密,密钥为用户主密钥使用 Argon 2 算法进行密钥派生。

- 用户名
- 主密钥(Bcrypt)
- 副密钥(Bcrypt)
- Google Authenticator私钥(AES-256加密)
- 文件信息
  - 文件名称
  - 文件大小
  - 原始文件路径
  - 加密文件路径
  - 文件加密时间
  - 文件名称哈希(SHA-256)
  - 文件内容哈希(SHA-256)
  - 文件加密算法
  - 文件加密密钥派生算法

用户所有加密的文件是根据用户选择的文件加密算法进行加密,加密密钥使用用户副密钥通过用户选择的密钥派生算法产生。

  • 支持的加密算法:
    • QChaCha 20 (推荐)
    • XChaCha 20
    • ChaCha 20
    • AES-256
    • QChaCha 12
    • QChaCha 8

QChaCha 8/12/20 使用 32 字节密钥,12 字节随机数,分别采用 64/96/160 字节量子随机数迭代 8/12/20 轮

XChaCha 20 使用 32 字节密钥,24 字节随机数,迭代 20 轮

ChaCha 20 使用 32 字节密钥,12 字节随机数,迭代 20 轮

AES-256 使用 32 字节密钥,16 字节随机数,迭代 14 轮

  • 支持的密钥派生算法:
    • Argon 2 (推荐)
    • Scrypt
    • PBKDF 2

Argon 2 使用 16 字节盐值,迭代 10 次,内存占用 64 MB,线程数 4

Scrypt 使用 16 字节盐值,CPU 内存成本 32768,块大小 8 (1024 字节) ,线程数 4

PBKDF 2 使用 16 字节盐值,SHA 3-256 作为伪随机函数,迭代 100000 次

  • 密钥存储算法: Bcrypt

Bcrypt 迭代 12 轮自动生成盐值并验证

运行流程

注册流程:首先,当用户第一次运行软件时,软件会检查主文件夹是否存在,如果不存在,则创建主文件夹。接着用户进入注册流程,输入用户名和主密钥副密钥 (可使用软件自动生成强密钥),然后需绑定 2 FA 认证码,软件随机生成一个 Google Authenticator 私钥和二维码,用户使用 2 FA 应用扫描二维码并输入 2 FA 应用显示的 6 位验证码,完成绑定。软件将用户信息进行适当加密写入用户配置文件,并再次加密保存。

登录流程:用户输入用户名和主密钥,然后输入 2 FA 应用当前显示的 6 位验证码,点击登录用户按钮,软件验证用户名和主密钥,解密并验证 2 FA 验证码,验证成功后,软件显示用户界面。

加密设置流程:用户点击加密设置按钮,软件弹出加密设置窗口,用户选择加密算法和密钥派生算法,点击保存按钮,软件后续的加密文件行为都将使用这种加密方式。如果用户没有设置加密算法,软件默认使用 QChaCha 20 与 Argon 2 的算法组合,此算法组合拥有理论上最高的加密强度,但需要牺牲一定的加密速度。

文件加密流程:用户选择需要加密的文件,输入副密钥进行验证,软件根据用户选择的加密算法和密钥派生算法,使用副密钥生成加密密钥,加密文件,同时将加密后的文件移动到用户配置文件中记录的加密文件路径,将所有文件信息写入用户配置文件。

文件解密流程:用户选择需要解密的文件,输入副密钥进行验证,软件根据用户配置文件中记录的加密算法和密钥派生算法,使用副密钥生成解密密钥,解密文件,这时软件并不会删除该加密文件,用户依然可以重复解密该文件,如果用户想要删除该加密文件,应当手动选择文件列表点击删除按钮,才能将该加密文件删除。

用户数据导出流程:用户点击导出数据按钮,软件会将用户主文件夹下的所有文件,即用户配置文件和加密后的文件,全部打包成一个 zip 文件,用户可以自行选择保存位置。该功能用于用户更换设备时,将之前的数据导出到新设备中。

用户数据导入流程:用户点击导入数据按钮,软件会弹出文件选择窗口,用户选择之前导出的 zip 文件,软件会解压文件到主文件夹下的用户名文件夹中,完成导入。该功能默认会覆盖原有的配置和文件,需要主要保存所需文件,以免造成数据丢失。该功能用于用户更换设备时,将之前的数据导入到新设备中。

云端同步流程:用户可以选择使用软件提供的云端同步功能,将数据同步到云端,用户需要自行准备云端存储服务 (如对象存储,服务器,WebDav 等等),用户需要先在软件中设置好存储服务,然后点击同步按钮,软件会将用户主文件夹下的所有文件同步到云端,当用户切换新设备时,可以使用云端同步无缝将配置信息同步过来。该功能目前处于测试阶段,可能存在兼容性问题。

image-20241122000531128

安全性说明

  1. 软件中所有的加密算法密钥派生算法都使用了完全随机的随机数盐值,所有加密都使用了密钥派生算法,保证加密的安全性。
  2. 软件中所有文件的加密都遵循一次一密的原则,使用副秘钥+盐值利用密钥派生算法生成完全不同的文件加密密钥。
  3. 软件中的配置信息,尤其是关键的主密钥副密钥都使用了 Bcrypt 哈希,2FA 私钥使用了 AES-256 加密,保证密钥的安全性。整个配置信息使用 XChaCha 20 加密,保证数据的安全性。
  4. 软件中使用了 Google Authenticator 的双重认证机制,保证账户的安全性。
  5. 软件中所有数据都存储在用户主文件夹中,软件根据用户名自行选择保存位置,软件可以完全离线运行,可以不将数据上传到任何服务器,也不会在软件中存储用户数据。
  6. 软件使用 GO 语言 -ldflags "-s -w" 选项编译,去除符号表和调试信息,减少潜在的信息泄漏。使用混淆工具对程序进行混淆,增加逆向的难度,使用 UPX 进行压缩加壳,减小程序体积,并增加反调试的难度,防止内存攻击
  7. 软件运行时在内存中存储的敏感数据,只有在需要使用时才解密。在处理完敏感信息后,立即使用零填充或其他方法清理内存中的数据,使用 runtime.GC() 强制垃圾回收机制回收内存。软件尽量将敏感数据封装在局部作用域中。避免硬编码直接写在程序中。

常见问题

  1. 忘记密码怎么办?

    • 由于安全原因,密码无法找回。请务必保管好您的密码。
  2. 如何备份加密文件?

    • 可以使用工具栏中的导出用户数据功能。
    • 也可以手动备份 .QREcrypt 文件夹中的所有内容。
    • 如果配置了云端环境,也可以使用软件的云端同步功能。
  3. 为什么需要两个密码?

    • 主密钥用于系统登录,副密钥用于文件加密,这种分离设计提供了更好的安全性。
  4. 支持加密文件夹吗?

    • 目前版本仅支持单个文件加密,不支持直接加密文件夹。如果您需要加密文件夹,可以将其打包成 zip 文件后加密。
  5. 支持批量加解密文件吗?

    • 目前版本仅支持单个文件加解密,不支持批量加解密文件。

许可证

本项目采用 MIT 许可证

联系方式

如有问题或建议,请通过以下方式联系: