2个稳定版本

2.0.0 2022年10月27日
1.0.1 2018年7月5日

#2239 in 加密学


2个crate中使用(通过libfortress

MIT/Apache

33KB
634

Coverage Status

Fortress

记住一个密码,安全地管理其他密码。Fortress安全性极高,可以在设备之间自动同步。

状态

Fortress正在积极开发中。我自己在使用它。不过它还不完全准备好投入生产,存在许多可能会让用户受伤的锋利边缘。

项目目标

  • 自动同步 - 跨设备使用方便,易于备份。
  • 强大安全 - 破解即使是弱主密码也需要花费数百万美元。
  • 用Rust编写 - 错误更少,代码更干净。
  • 简单设计 - 我选择了简洁性而非性能;更容易审计代码和设计。
  • 无需信任 - 代码是开源的。数据同步是端到端加密的。

构建

可以使用cargo tauri build构建生产二进制文件。

开发

在开发过程中,可以使用cargo tauri dev -- -- --dir [SOMEPATH]运行主fortress程序。它包括热重载。

fortresscrypto crate实现了Fortress特有的所有加密功能。libfortress实现了Fortress的大部分功能。fortress是主二进制文件,主要实现用户界面。

不要忘记常规操作:cargo +nightly fmtcargo clippycargo test

数据库格式

在核心上,Fortress使用加密JSON,因为JSON简单、可移植且可读。

Fortress数据库由一组对象组成,每个对象要么是目录,要么是条目。目录只是其他对象的列表,这构成了目录树。条目基本上就是一个HashMap,使得数据库易于适应未来的新功能。

Fortress数据库中的每个对象都存储了一个带时间戳的历史记录,以便用户可以回滚到之前的密码并撤销错误。所有对象的实现都采用追加方式,以确保用户数据永远不会丢失。

使用标准的格式如JSON意味着Fortress数据库可以使用现有的工具进行操作;甚至在Linux命令行上。虽然这不会很常见,但如果有人想要编写与Fortress数据库兼容的第三方工具,或者用户想要迁移到不同的密码管理器,这将很有用。

唯一的缺点是加密。没有好的标准加密格式。因此,Fortress必须使用自己的格式,但同样非常简单。在命令行上,Fortress可以使用其加密格式对有效负载进行加密/解密,因此仍然可以轻松访问数据库中的JSON。

加密

Fortress使用scrypt从用户的用户名和密码中派生出加密密钥,然后使用ChaCha20和HMAC-SHA-512的组合来加密和验证磁盘上的用户数据和同步时的用户数据。有关详细信息,请参阅ENCRYPTION.md

Fortress服务器

后端“Fortress服务器”方便设备之间的同步。它实现在一个单独的仓库中,fortress-server

重要提示

如果用户在极少数情况下希望拥有多个不同的Fortress数据库,他们必须为每个数据库使用不同的用户名。(不要与在多个设备之间同步的单个数据库的常见用法混淆。)Fortress和Fortress服务器没有“数据库ID”或类似的东西。因此,区分不同数据库的唯一方法就是使用不同的用户名。

依赖项

~1.6–2.4MB
~48K SLoC