29个版本 (9个稳定版)
1.3.2 | 2023年11月11日 |
---|---|
1.3.0 | 2023年6月15日 |
1.2.1 | 2023年3月10日 |
0.7.0 | 2022年10月18日 |
0.5.3 | 2021年11月28日 |
#197 in 密码学
每月74次下载
1MB
6.5K SLoC
SafeCloset 将您的秘密保存在受密码保护的文件中。 SafeCloset 被设计为方便且避免常见的弱点,如外部编辑或磁盘上写入的临时文件。
警告
SafeCloset 未经过独立审计,并且没有任何保证。如果您在 SafeCloset 中丢失了秘密,我将无法为您提供任何帮助。
概述
衣柜存储在一个您可以备份、随身携带在U盘上的文件中。
衣柜包含抽屉,每个抽屉都有自己的密码来找到和打开。
抽屉包含一个(键,值)的列表。值是文本,您可以存储代码、密码、注释、诗歌、一些数据等。
抽屉也可以包含更深层次的加密抽屉。
功能
- 衣柜包含多个抽屉,其中一些自动创建,密码未知,这样没有人可以确定您能打开哪些抽屉,甚至有多少个
- 每个抽屉都使用 AES-GCM-SIV 独立加密,使用一次性的随机数和您选择的密码/密钥。这为测试解密算法提供了内在的长期性(但您仍然应该为您的抽屉使用长的密码)
- 您可以有一个或多个包含真实内容的抽屉。即使被强迫在枪口下打开抽屉,您仍然可以保持其他抽屉的秘密,没有任何痕迹,无论是在顶级还是更深层次的抽屉中
- 当您使用密码打开一个抽屉时,您可以阅读它、搜索它、编辑它、关闭它
- 在打开的抽屉中,您可以创建新的抽屉,或者如果您知道它们的密码,可以打开更深层次的抽屉
- SafeCloset 在不活动时自动退出
- 抽屉内容的尺寸不可观测
- 从未创建任何清晰的文件,编辑直接在TUI(外部编辑器通常是弱点)中完成
- 从未向任何外部库、小部件等提供任何清晰的数据
- 所有数据都在TUI应用程序中查看和编辑
- 您可以自己编译 SafeCloset。其代码量小且可审计
- 代码是 100% Rust。今天,我不会信任其他任何程序
- 衣柜文件的格式描述得如此详细,以至于将来可以编写另一个应用程序来解码您的衣柜文件(假设您有密码)
- SafeCloset无法被其他应用程序查询,如浏览器。这是一个特性。
- 你可以把所有的秘密放在一个文件中,便于携带和备份。
- 没有任何公司会因倒闭而丢失你的秘密:你可以把所有东西,按照必要的数量,放在你想要的地方。
- 没有任何公司能被迫添加一些秘密窃取的代码:SafeCloset体积小,开源且可替换。
- 快速便捷使用——这是设计重点所在。
- 跨平台,因为你不知道你会在哪里使用你的储物柜。
- "被监视"模式,其中未选中的值被隐藏。此模式按抽屉保存,每次使用SafeCloset时通过
--hide
选项始终激活,并通过ctrlh切换。
非特性
- SafeCloset不能保护你免受键盘记录器的侵害。
- SafeCloset不能保护你在显示秘密值时有人观看你的屏幕(但其余的抽屉可以保持隐藏)。
使用方法
这些截图很小,为了适应这里,但如果你愿意,可以使用SafeCloset全屏。
创建你的储物柜文件
运行
safecloset some/name.closet
查看帮助信息
按?键进入帮助屏幕,在那里你可以找到完整的命令列表。
按esc键返回到上一个屏幕。
创建你的第一个抽屉
按ctrln
如果你想,你可以在任何时候通过按ctrln来创建一个更深的抽屉。
或者按n创建一个新条目,先输入其名称,然后按tab键填写其值。
使用箭头键更改选择。使用tab键在输入之间切换。或者使用a键编辑当前选定的字段。
使用ctrl🠕和ctrl🠗重新排序条目。
在SafeCloset中,在编辑、搜索、打开等操作时,enter键确认操作,而esc键取消或关闭。
你可以在值中使用ctrlenter或altenter添加新行。
你可能会注意到值以Markdown格式显示。
不要犹豫,将数百个秘密存储在同一个抽屉中,因为你可以用模糊搜索轻松找到它们。
使用/键搜索
在搜索输入时,按esc键移除搜索,按enter键冻结。
保存并退出
按ctrls保存,然后按ctrlq退出。
重新打开
稍后使用相同的命令重新打开储物柜。
safecloset some/name.closet
定义一个别名可能是个好主意,这样你可以轻松地访问你的秘密。例如,你可以在你的.bashrc
中设置它。
function xx {
safecloset -o ~/some/name.closet
}
使用-o
参数使safecloset立即提示输入抽屉密码,这样你就不必按ctrlo。
打开时,只需输入你想要打开的抽屉的密码(所有密码都会被测试,直到找到正确的密码)。
存储格式
描述存储格式以确保可以在需要时用其他软件替换SafeCloset。
储物柜文件是一个MessagePack编码的结构Closet
,包含以下字段:
comments
:一个字符串salt
:一个字符串drawers
:一个ClosedDrawer
数组
MessagePack序列化保留了字段名称,并允许未来添加。
ClosedDrawer
的一个实例是一个包含以下字段的结构:
id
:一个字节数组nonce
:一个字节数组content
:一个字节数组
content
是序列化抽屉的AES-GCM-SIV加密,加密时使用了包含的nonce
。用于此加密的密钥是密码的256位Argon2散列,散列中包含抽屉的盐。
序列化抽屉是一个MessagePack编码的结构,包含以下字段
id
:一个字节数组entries
:一个Entry
数组settings
:一个DrawerSettings
实例closet
:一个更深层次的抽屉,包含抽屉等garbage
:一个随机的字节数组
Entry
的实例包含以下字段
name
:一个字符串value
:一个字符串
DrawerSettings
的实例包含以下字段
hide_values
:一个布尔值open_all_values
:一个布尔值(可选,不存在时为false)
依赖关系
~10-23MB
~358K SLoC