这实际上发生在 Mac OS X 上,但我相信我可以在这里得到答案,而不是在http://apple.stackexchange.com
我有一个使用 encfs 加密的目录。我不小心从那里删除了 .encfs6.xml 。
现在,当我想将此目录挂载为 encfs 目录时,encfs 希望在那里创建新的加密卷。我可以以某种方式强制它打开现有的而不是创建新的吗?
我当然记得密码。
答案1
.encfs6.xml
包含密钥。如果您丢失了该文件,您将无法解密您的文件。
加密密钥不是从密码派生的。从密码导出的是用于加密存储在 中的文件加密密钥的密钥encfs6.xml
。这是标准方法。这样做有两个原因:
- 为了安全起见:密码通常具有较低的熵 - 通常可以通过枚举所有可能的可能性(
12345678
,password
,iloveyou
,Passw0rd
,...)来找到它们。另一方面,密钥是随机生成的;如果有不可忽视的机会猜出正确的钥匙,所需要的时间将比宇宙的年龄还要长。因此,猜测您密码的攻击者也必须掌握密钥文件.encfs6.xml
。 (不过,当密钥文件不与加密数据存储在一起时,这并不是什么优势。) - 为了可用性:这样,如果您更改密码,软件只需要更新
.encfs6.xml
,不需要重新加密所有文件。
.encfs6.xml
从备份中恢复。
如果您没有备份,则可以使用搜索已删除文件的取证工具来恢复它。这当然不能保证有效,而且即使有效也不一定容易。
答案2
我有想法猜测每个盐和迭代次数,但是使用您原来已知的密码短语,以便恢复/重建文件.encfs6.xml
但不会丢失<encodedKeyData>
...我尝试了一个测试,使用听起来有用的选项--anykey
,它应该:
--anykey
关闭密钥验证检查。这允许 EncFS 与辅助密码一起使用。这可用于在加密文件系统中存储一组单独的文件。 EncFS 会忽略无法正确解码的文件,因此使用单独密码创建的文件仅在使用关联密码挂载文件系统时才可见。
.encfs6.xml 包含如下信息:
<encodedKeySize>44</encodedKeySize>
<encodedKeyData>
t+mDmS6qiUwJcUY2rX2oj6jMlfQ3QIiGPG2BRZspTUZiUOcKBxIq70uVILk=
</encodedKeyData>
<saltLen>20</saltLen>
<saltData>
9pmECBnKHDXpW+3E+Z7WO9xWwls=
</saltData>
<kdfIterations>147015</kdfIterations>
<desiredKDFDuration>500</desiredKDFDuration>
我认为即使它与encodedKeyData不匹配(将其更改为不同的数据),但仍然可以--anykey
使用原始密码读取原始文件。就像这样,您记住/猜测除编码的密钥数据之外的所有其他数据。因此,我创建了一个新的 EncFS 文件夹和测试文件,并尝试编辑该.encfs6.xml
文件、更改或删除该<encodedKeyData>...</encodedKeyData>
条目。
没用,如果数据错误,它会悄悄挂载,但没有文件被解密。删除条目失败并出现以下错误:
抛出 'boost::archive::iterators::dataflow_exception' 实例后调用终止
What(): 尝试解码不在 base64 字符集中的值
已中止
唯一的用途--anykey
似乎是使用不同的密码“隐藏”一些文件,我猜使用文件名加密,但仍然需要原始的encodedKeyData。
并且,更改<saltData>
一个字符也可以encfs --anykey
使用任何密码短语成功安装,但即使使用原始密码短语也不会解密任何文件,并且不会给出错误。
那么你100% 需要该.encfs6.xml
文件,它就像一个带有加密密钥的密钥文件(我认为类似于 LUKS 标头)。