3个稳定版本
2.1.0 | 2022年10月29日 |
---|---|
2.0.0 | 2022年10月27日 |
1.0.1 | 2018年7月5日 |
在密码学类别中排名第1074
被fortress使用
120KB
2.5K SLoC
Fortress
记住一个密码,安全地管理其他密码。Fortress安全性极高,能够在设备之间自动同步。
状态
Fortress正在积极开发中。我自己在使用它。不过它还没有完全准备好投入使用,而且有很多尖锐的角落可能会让用户受伤。
项目目标
- 自动同步 - 在设备之间使用方便,易于备份。
- 强大的安全性 - 即使破解弱主密码也需要花费数百万美元。
- 使用Rust编写 - 错误更少,代码更干净。
- 简单设计 - 我选择简洁胜于性能;更容易审计代码和设计。
- 无需信任 - 代码是开源的。数据同步是端到端加密的。
构建
可以使用cargo tauri build
构建生产二进制文件。
开发
在开发过程中,可以使用cargo tauri dev -- -- --dir [SOMEPATH]
运行主要的fortress
程序。它包括热重载功能。
fortresscrypto
库实现了Fortress独有的所有加密功能。libfortress
实现了Fortress的大部分功能。fortress
是主要的二进制文件,主要实现UI。
别忘了常规操作:cargo +nightly fmt
,cargo clippy
,cargo 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