1 个稳定版本

使用旧的 Rust 2015

1.0.1 2018年7月5日

#1584 in 数据库接口

MIT/Apache

110KB
2.5K SLoC

Coverage Status

堡垒

记住一个密码,安全地管理其余的。堡垒非常安全,并且可以在设备间自动同步。

状态

堡垒正在积极开发中。我正在使用它。尽管如此,它还不完全准备好投入使用,并且存在许多可能会让用户受伤的锋利边缘。

项目目标

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

构建

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

开发

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

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

别忘了常规操作:cargo +nightly fmtcargo clippycargo test

数据库格式

在核心上,堡垒使用加密 JSON,因为 JSON 简单、便携且易于阅读。

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

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

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

唯一的注意事项是加密。没有好的、标准的加密格式。因此,Fortress不得不使用自己的格式,但同样非常简单。在命令行中,可以使用Fortress加密/解密负载,使用其加密格式,因此仍然可以轻松访问数据库中的JSON。

加密

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

Fortress服务器

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

重要提示

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

依赖项

~47MB
~1M SLoC