EncFS

EncFS是一个基于FUSE的，为自由软件。通过它可以将任意目录作为存储空间来透明地加密并存储文件。 

挂载一个EncFS文件系统涉及到两个目录：源目录和挂载点。挂载点中的每个文件都是加密存储在源目录中的一个与之对应的文件。挂载点中的文件呈现未加密的样子，对应源目录中已加密的文件。源目录中会加密文件名。

文件通过卷密钥加密，卷密钥可以存储在加密的源目录之内或之外。有一个密码机制用于解密该密钥。

常见用途 

 在Linux中，作为eCryptfs的替代方案加密home文件夹。
 用来加密保存到云存储（Dropbox、Google Drive、OneDrive等）的文件和文件夹。
 为可移动磁盘中的文件夹进行便携式加密。
 作为一个跨平台的文件夹加密机制。
 可增加双重身份验证（2FA）来提高。例如，可以将EncFS用来加密数据的卷密钥存储在加密数据之外（如闪存盘、网络挂载点、光碟或云存储中），同时要求提供密码来解密这个卷密钥。

优势 
与其他相比，EncFS因在主机上单独存储每个被加密的文件而具有一些优势。

跨平台 
EncFS可在多个平台上使用，而eCryptfs与Linux内核绑定

Bitrot检测 
EncFS在底层文件系统之上实现了（bitrot）检测

可扩展存储 
EncFS不存在占用固定大小的“卷”——加密的目录占用的空间随着挂载点中的文件增加而增加，也随着文件被删除而缩小。

适用于文件服务器 
EncFS的加密目录可以位于普通的文件服务器上（通过NFS、SSHFS等），并且可以使用普通的文件系统工具（例如Rsync）高效地进行镜像和备份。

跨物理设备 
挂载点中的某些目录可能存在于其他的物理设备上。

更快的备份 
文件同步、云存储等备份软件可以只备份源目录中已变更的文件。

抗损坏 
数据损坏发生时，更不易波及多个文件。损坏也更可控，可能通过文件系统级别的维护工具来修复某些数据损坏。磁盘加密系统遭遇数据异常损坏时可能遭遇更多意外情况。

优化 
因为加密的文件仍基于底层文件系统来存储，某些操作系统优化机制仍然奏效，例如传递Trim命令来帮助提升固态硬盘的性能。不过dm-crypt也支持这一点。

随机文件访问 
支持文件的随机访问，无需解密整个被加密的卷。

不足 
EncFS也存在一些缺点。

兼容性 
挂载的EncFS目录与容纳源目录的文件系统享有相同的能力与限制。

不支持长文件名 
因加密原因，EncFS产生的加密文件的文件名会比原始文件名长。因此，EncFS不能存储长度接近文件系统的文件名长度上限的文件名。大多数文件系统的一般文件名限制为255个字节，这种情况下EncFS最多支持190个字节的文件名。

一般性安全隐患 
尽管文件名和文件数据被加密，但任何有权访问源目录的人都可看到加密的文件系统内有多少文件、文件的权限、文件的大致大小，以及上次访问和上次修改文件的时间。

EncFS 1.7安全问题 
2014年2月进行的付费安全审计中发现了多个潜在的漏洞。给出的结论是：

EncFS 1.8安全问题 
EncFS 1.8的公告包括数项基础设计变更，以回应上次的审计中提出的安全问题。尽管如此，这些安全漏洞仍受到关注。

文件系统选项 
在新建EncFS卷时，有数个用来自定义文件系统的选项，以满足不同需求。

密码算法 
EncFS可使用若干种存在于系统中各加密库内的加解密算法。Blowfish和AES通常可用。

可以为支持“可变密钥长度”的密码算法选择密钥长度（keySize）。

块大小 
每个文件均以块的形式加密，有选项控制这些块的大小。每次读取单个字节时，必须解密包含它的整个块。同样，每次写入都需要解密对应块、更改内容并重新加密。

默认的块大小1024（字节）足以满足大多数用途。

文件名编码 
源目录中的文件名可以存储为明文、加密块或流模式加密。块模式在一定程度上掩盖了文件名长度，而流模式的文件名会尽可能短，这在某些文件系统中可能节省一些存储空间。

文件名IV链 
启用此选项后，加密文件名所用的初始化向量取自文件的父目录——这将使两个同名但位于不同目录的文件具有不同的加密后文件名。

如果重命名目录，则其中包含的所有文件和目录都需要重新加密其文件名，这可能花费不少时间和资源。如果经常重命名含有大量子项目的目录，则应该禁用此选项。

每个文件的初始化向量 
启用此选项后，每个文件都使用一个随机的8字节初始化向量来加密，该向量存储在源目录的加密文件中。如果禁用此选项，则每个文件都使用相同的初始化向量来加密，可能使卷密钥更容易被破解。

启用此选项可加强文件系统的安全性，但每个文件会多占用8个字节。

外部IV链 
使文件数据的初始化向量派生自文件名的初始化向量链。相同数据但不同文件名或目录的文件将加密成不同的样子。

如此，此模式启用时重命名文件需要文件的随机初始化向量被文件名初始化向量链中的更改抵消，或者重新编码数据。 EncFS的作者选择了前一种方法，因为快得多，尤其是对于大文件。

文件名到IV头部链 
使编码依赖于完整的路径名。因此重命名或移动文件将需要重新编码。不支持硬链接。

块MAC头部 
存储每个加密块的校验和，使EncFS能检测到加密文件的损坏或修改。校验和 (blockMACBytes)为8个字节，并可选择向每个块添加最多8个额外字节的随机数据 (blockMACRandBytes)，以防止相同未加密数据的两个块有相同的校验和。因为必须在读取数据（验证完整性）与写入数据（更新校验和）时计算每个块的校验和，此选项会带来大量CPU开销。

参见 

 磁盘加密
 
 
 加密文件系统列表
 文件系统列表

参考资料

外部链接 
 Encfs manpage 
 Safe: another per-file implementation for Windows and Mac OS X, with no kernel mode driver (slower), but fully open source 
 Boxcryptor: Proprietary software based on EncFS for Windows, Android, and iOS 
 EncFSMP: Implementation that runs on Windows and Mac OS X 

用户空间文件系统
特殊目的自由文件系统
磁盘加密