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 密码学

Download history 1/week @ 2024-05-26 143/week @ 2024-06-30 74/week @ 2024-07-28

每月74次下载

AGPL-3.0

1MB
6.5K SLoC

Latest Version Chat on Miaou

SafeCloset 将您的秘密保存在受密码保护的文件中。 SafeCloset 被设计为方便且避免常见的弱点,如外部编辑或磁盘上写入的临时文件。

SafeCloset 文档

警告

SafeCloset 未经过独立审计,并且没有任何保证。如果您在 SafeCloset 中丢失了秘密,我将无法为您提供任何帮助。

概述

衣柜存储在一个您可以备份、随身携带在U盘上的文件中。

衣柜包含抽屉,每个抽屉都有自己的密码来找到和打开。

抽屉包含一个(键,值)的列表。值是文本,您可以存储代码、密码、注释、诗歌、一些数据等。

抽屉也可以包含更深层次的加密抽屉。

clear drawer

功能

  • 衣柜包含多个抽屉,其中一些自动创建,密码未知,这样没有人可以确定您能打开哪些抽屉,甚至有多少个
  • 每个抽屉都使用 AES-GCM-SIV 独立加密,使用一次性的随机数和您选择的密码/密钥。这为测试解密算法提供了内在的长期性(但您仍然应该为您的抽屉使用长的密码)
  • 您可以有一个或多个包含真实内容的抽屉。即使被强迫在枪口下打开抽屉,您仍然可以保持其他抽屉的秘密,没有任何痕迹,无论是在顶级还是更深层次的抽屉中
  • 当您使用密码打开一个抽屉时,您可以阅读它、搜索它、编辑它、关闭它
  • 在打开的抽屉中,您可以创建新的抽屉,或者如果您知道它们的密码,可以打开更深层次的抽屉
  • SafeCloset 在不活动时自动退出
  • 抽屉内容的尺寸不可观测
  • 从未创建任何清晰的文件,编辑直接在TUI(外部编辑器通常是弱点)中完成
  • 从未向任何外部库、小部件等提供任何清晰的数据
  • 所有数据都在TUI应用程序中查看和编辑
  • 您可以自己编译 SafeCloset。其代码量小且可审计
  • 代码是 100% Rust。今天,我不会信任其他任何程序
  • 衣柜文件的格式描述得如此详细,以至于将来可以编写另一个应用程序来解码您的衣柜文件(假设您有密码)
  • SafeCloset无法被其他应用程序查询,如浏览器。这是一个特性。
  • 你可以把所有的秘密放在一个文件中,便于携带和备份。
  • 没有任何公司会因倒闭而丢失你的秘密:你可以把所有东西,按照必要的数量,放在你想要的地方。
  • 没有任何公司能被迫添加一些秘密窃取的代码:SafeCloset体积小,开源且可替换。
  • 快速便捷使用——这是设计重点所在。
  • 跨平台,因为你不知道你会在哪里使用你的储物柜。
  • "被监视"模式,其中未选中的值被隐藏。此模式按抽屉保存,每次使用SafeCloset时通过--hide选项始终激活,并通过ctrlh切换。

非特性

  • SafeCloset不能保护你免受键盘记录器的侵害。
  • SafeCloset不能保护你在显示秘密值时有人观看你的屏幕(但其余的抽屉可以保持隐藏)。

使用方法

这些截图很小,为了适应这里,但如果你愿意,可以使用SafeCloset全屏。

创建你的储物柜文件

运行

safecloset some/name.closet

new closet

查看帮助信息

?键进入帮助屏幕,在那里你可以找到完整的命令列表。

help

esc键返回到上一个屏幕。

创建你的第一个抽屉

ctrln

drawer creation

new drawer

如果你想,你可以在任何时候通过按ctrln来创建一个更深的抽屉。

或者按n创建一个新条目,先输入其名称,然后按tab键填写其值。

typing entry

使用箭头键更改选择。使用tab键在输入之间切换。或者使用a键编辑当前选定的字段。

使用ctrl🠕ctrl🠗重新排序条目。

在SafeCloset中,在编辑、搜索、打开等操作时,enter键确认操作,而esc键取消或关闭。

你可以在值中使用ctrlenteraltenter添加新行。

multiline

你可能会注意到值以Markdown格式显示。

不要犹豫,将数百个秘密存储在同一个抽屉中,因为你可以用模糊搜索轻松找到它们。

使用/键搜索

search

在搜索输入时,按esc键移除搜索,按enter键冻结。

保存并退出

ctrls保存,然后按ctrlq退出。

重新打开

稍后使用相同的命令重新打开储物柜。

safecloset some/name.closet

定义一个别名可能是个好主意,这样你可以轻松地访问你的秘密。例如,你可以在你的.bashrc中设置它。

function xx {
	safecloset -o ~/some/name.closet
}

使用-o参数使safecloset立即提示输入抽屉密码,这样你就不必按ctrlo

打开时,只需输入你想要打开的抽屉的密码(所有密码都会被测试,直到找到正确的密码)。

drawer opening

存储格式

描述存储格式以确保可以在需要时用其他软件替换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