3个稳定版本

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

密码学类别中排名第1074


fortress使用

MIT/Apache

120KB
2.5K SLoC

Coverage Status

Fortress

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

状态

Fortress正在积极开发中。我自己在使用它。不过它还没有完全准备好投入使用,而且有很多尖锐的角落可能会让用户受伤。

项目目标

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

构建

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

开发

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

fortresscrypto库实现了Fortress独有的所有加密功能。libfortress实现了Fortress的大部分功能。fortress是主要的二进制文件,主要实现UI。

别忘了常规操作: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”或类似的东西。因此,区分不同数据库的唯一方法就是使用不同的用户名。

依赖项

~7–21MB
~333K SLoC