个人工具

Ecryptfs企业级加密文件系统

来自Ubuntu中文

Cat650讨论 | 贡献2010年9月7日 (二) 19:25的版本 3,为ubuntu one一类,网络文件夹加密

跳转至: 导航, 搜索

什么是加密文件系统

保护敏感数据不被泄漏成为人们关注的热点问题。入侵者除了直接盗取物理存储设备,还可以通过网络攻击来窃夺文件数据;而且,由于共享的需求,敏感数据会由多人访问,这也增大了泄漏的可能性。对数据或文件进行加密已经成为一种公认的比较成功的保护方法。事实上,人们早已开发了许多优秀的加密算法,如 DES、AES、RSA 等,并且有一些应用程序如 crypt 使用这些加密算法,用户通过这些工具手工地完成加密、解密的工作。由于这些应用程序操作麻烦、没有和整个系统紧密地结合而且容易受到攻击,因此一般用户并不愿意使用。

加密文件系统(比如eCryptfs)通过将加密服务集成到文件系统这一层面来解决上面的问题。加密文件的内容一般经过对称密钥算法加密后以密文的形式存放在物理介质上,即使文件丢失或被窃取,在加密密钥未泄漏的情况下,非授权用户几乎无法通过密文逆向获得文件的明文,从而保证了高安全性。与此同时,授权用户对加密文件的访问则非常方便。用户通过初始身份认证后,对加密文件的访问和普通文件没有什么区别,就好像该文件并没有被加密过,这是因为加密文件系统自动地在后台做了相关的加密和解密的工作。由于加密文件系统一般工作在内核态,普通的攻击比较难于奏效。还有一类系统级加密方案是基于块设备,与它们相比,加密文件系统具有更多的优势,例如:

  • 支持文件粒度的加密,也就是说,用户可以选择对哪些文件或目录加密。而且,应用程序不用关心文件是否被加密,可以完全透明地访问加密文件。
  • 无需预先保留足够的空间,用户可以随时加密或恢复文件。
  • 对单个加密文件更改密钥和加密算法比较容易。
  • 不同的文件可以使用不同的加密算法和密钥,增大了破解的难度。
  • 只有加密文件才需要特殊的加密/解密处理,普通文件的存取没有额外开销。
  • 加密文件转移到别的物理介质上时,没有额外的加密/解密开销。
  • 附加一点,ecryptfs 的解密层存在于内存(内存不足时可能使用 到交换分区)。硬盘上面保存的只有加密数据。这样即使硬盘被偷了,使用数据还原软件也不可能得到 解密文件。不是像普通的加密软件、压缩软件把 解密文件缓存于硬盘上。你即使删除了,使用数据还原软件依然有可能得到 解密文件。

安装

sudo apt-get install ecryptfs-utils

然后就可以开始使用了。因为很简单使用命令界面就能解决问题,所以没有图形界面。但是不用担心,我会把每一步讲解清楚。 没有图形界面还有一个好处:隐蔽性高

使用举例

这里举个单独加密文件夹的例子,而不是按网上流行的方式:把主文件夹加密。我认为这种操作简单、独立涉及的东西少,效率高。

注:ubuntu安装时有个选项——加密用户文件夹,使用的就是该系统。

*1,新建一个测试文件夹:ecryptfs_test 使用这个文件夹存放加密文件 命令:

sudo mount -t ecryptfs ecryptfs_test ecryptfs_test

mount 是挂载命令。-t 是指定文件类型。ecryptfs 就是我们使用的加密文件类型。 !这里换一个命令举例说明一下

sudo mount -t ecryptfs real_path ecryptfs_mounted_path

real_path 是真实存放数据的地方;ecryptfs_mounted_path 是指你要把文件夹挂载于哪里(具体位置可以随意)

推荐:ecryptfs_mounted_path 和 真实目录 real_path 不一致,这样非授权用户不能通过原路径访问加密文件。

这里必须说一下挂载:很多人不理解
所谓挂载,可以理解为超级链接。比如说有两个文件夹     
a,b。a中有文件isa,b中有文件isb。
现在我们要把a挂载于b上,命令:mount a b
此时b已经变成了a 的链接。所有对b的访问实际上都指向了a。
比如我们打开b文件夹,看到的文件只有isa。而打开a文件夹,  文件还是isa
我们在b中存放一个新文件 isnew。
好了我们卸载这个挂载(取消这个超链接),命令:umount b
现在查看a文件夹,里面有文件isa isnew
查看b文件夹,里面只有isb
为使么说是超级链接呢,因为有个选项(其它选项我还不会) -t
它的意思是指定 文件夹类型(文件系统类型)。文件系统类型有很多,比如我们使用的ext4、ext3、fat32、ntfs……还有特殊的文件系统,比如 tmpfs(用内存 存文件)、ecryptfs(文件加密格)……
使用-t 就可以以指定文件格式进行“链接”,能查看、操作其它文件格式的文件了。这是普通连接做不到的。


*2,mount 需要root权限,我们使用 命令sudo ,来以root身份运行命令 结果如下:image001.jpg

passphrase:
(这是要你输入密码,自己编一个。一定要记住。另外密码是不会有任何显示的,输完回车就行)
select cipher:
(选择加密方式,不选默认是[aes]。最好记住自己的选择)
select key bytes:
(选择加密位数,不选默认是[16]。最好记住自己的选择)
enable plaintext passthrough(y/n) [n]:
(是否允许使用明文,默认是 n)
enable filename encryption (y/n) [n]:
(是否把文件名也进行加密,默认是 n。如果选择y,那么在没有解密 的情况下是无法列出文件夹内部的文件名的。)

如果设置的密码是第一次使用,它会提示你密码被标识为[799d2f922c0f1f26] 。当然,你的密码标识肯定不会是这个。并且告诉你输入可能有误,因为/root/.ecryptfs/sig-cache.txt中没有相关记录。密码标识只存在于你现在的系统中,是怕你忘记密码,它会告诉你这个密码是否用过。因为ecryptfs在密码错误的情况下一样可以进行错误解密,实际上是另外一种形式的加密。要是不保存密码标识,我肯定盗资料的人会很头痛,记心不好的用户也一样。

 出现输入有误的警告后,会让你选择:
 Would you like to proceed with the mount (yes/no)? :
 (你是否希望继续进行挂载。)我们输入yes,来完成加密。
 Would you like to append sig [799d2f922c0f1f26] to
[/root/.ecryptfs/sig-cache.txt]
 in order to avoid this warning in the future (yes/no)?:
 (你是否把密码标识保存到/root/.ecryptfs/sig-cache.txt中?)我们输入yes,也可以输no,看你的记心好坏了。
  • 3,好了,现在正常操作ecryptfs_test文件夹。放一些文件来测试。
  • 4,关闭解密状态

命令:

 sudo umount -t ecryptfs ecryptfs_test
 (如果使用的是sudo mount -t ecryptfs real_path ecryptfs_mounted_path

那么对应的命令是sudo umount -t ecryptfs ecryptfs_mounted_path) 这命令意思是把挂载取消了。这里的作用相当于把解密取消了,毕竟把重要文件长时间解密放着不好。 好了,再看看ecryptfs_test文件夹,里面的文件是不是都无法正确打开了?

********连概念加内容 加操作都说了,就这么点。简单吧

  • 5.需要解密文件夹时还是用命令:
 sudo mount -t ecryptfs ecryptfs_test ecryptfs_test
 (格式还是不变:sudo mount -t ecryptfs real_path ecryptfs_mounted_path)
 passphrase:
 select cipher:
 select key bytes:
 enable plaintext passthrough(y/n) [n]:
 enable filename encryption (y/n) [n]:

上面这几相当初怎么设置的就怎么填,之后文件夹就解密了。

不需要用了,还是用命令解除解密状态

sudo umount -t ecryptfs ecryptfs ecryptfs_test


这里说一点,mount命令重启就失效了。如果你要关机了,不必使用sudo umount -t ecryptfs ecryptfs_test 命令了。因为再次开机,解密是失效的。必须重新运行命令sudo mount -t ecryptfs ecryptfs_test ecryptfs_test

使用举例

这里举个单独加密文件夹的例子,而不是按网上流行的方式:把主文件夹加密。我认为这种操作简单、独立涉及的东西少,效率高。

注:ubuntu安装时有个选项——加密用户文件夹,使用的就是该系统。

*1,新建一个测试文件夹:ecryptfs_test 使用这个文件夹存放加密文件 命令:

sudo mount -t ecryptfs ecryptfs_test ecryptfs_test

mount 是挂载命令。-t 是指定文件类型。ecryptfs 就是我们使用的加密文件类型。 !这里换一个命令举例说明一下

sudo mount -t ecryptfs real_path ecryptfs_mounted_path

real_path 是真实存放数据的地方;ecryptfs_mounted_path 是指你要把文件夹挂载于哪里(具体位置可以随意)

推荐:ecryptfs_mounted_path 和 真实目录 real_path 不一致,这样非授权用户不能通过原路径访问加密文件。

这里必须说一下挂载:很多人不理解
所谓挂载,可以理解为超级链接。比如说有两个文件夹     
a,b。a中有文件isa,b中有文件isb。
现在我们要把a挂载于b上,命令:mount a b
此时b已经变成了a 的链接。所有对b的访问实际上都指向了a。
比如我们打开b文件夹,看到的文件只有isa。而打开a文件夹,  文件还是isa
我们在b中存放一个新文件 isnew。
好了我们卸载这个挂载(取消这个超链接),命令:umount b
现在查看a文件夹,里面有文件isa isnew
查看b文件夹,里面只有isb
为使么说是超级链接呢,因为有个选项(其它选项我还不会) -t
它的意思是指定 文件夹类型(文件系统类型)。文件系统类型有很多,比如我们使用的ext4、ext3、fat32、ntfs……还有特殊的文件系统,比如 tmpfs(用内存 存文件)、ecryptfs(文件加密格)……
使用-t 就可以以指定文件格式进行“链接”,能查看、操作其它文件格式的文件了。这是普通连接做不到的。


*2,mount 需要root权限,我们使用 命令sudo ,来以root身份运行命令 结果如下:

passphrase:
(这是要你输入密码,自己编一个。一定要记住。另外密码是不会有任何显示的,输完回车就行)
select cipher:
(选择加密方式,不选默认是[aes]。最好记住自己的选择)
select key bytes:
(选择加密位数,不选默认是[16]。最好记住自己的选择)
enable plaintext passthrough(y/n) [n]:
(是否允许使用明文,默认是 n)
enable filename encryption (y/n) [n]:
(是否把文件名也进行加密,默认是 n。如果选择y,那么在没有解密 的情况下是无法列出文件夹内部的文件名的。)

如果设置的密码是第一次使用,它会提示你密码被标识为[799d2f922c0f1f26] 。当然,你的密码标识肯定不会是这个。并且告诉你挂载错误,因为/root/.ecryptfs/sig-cache.txt中没有相关记录。密码标识只存在于你现在的系统中,是怕你忘记密码,它会告诉你这个密码是否用过。因为ecryptfs在密码错误的情况下一样可以进行错误解密,实际上是另外一种形式的加密。要是取消密码标识,我肯定盗资料的人会很头痛,记心不好的用户也一样。

 开始让你选择:
 Would you like to proceed with the mount (yes/no)? :
 (你是否希望继续进行挂载。我们输入yes,来完成加密)
 Would you like to append sig [799d2f922c0f1f26] to

[/root/.ecryptfs/sig-cache.txt]

 in order to avoid this warning in the future (yes/no)?:
 (你是否把密码标识保存到/root/.ecryptfs/sig-cache.txt中?)我们输入yes
  • 3,好了,现在正常操作ecryptfs_test文件夹。放一些文件来测试。
  • 4,关闭解密状态

命令:

 sudo umount -t ecryptfs ecryptfs_test
 (如果使用的是sudo mount -t ecryptfs real_path ecryptfs_mounted_path

那么对应的命令是sudo umount -t ecryptfs ecryptfs_mounted_path) 这命令意思是把挂载取消了。这里的作用相当于把解密取消了,毕竟把重要文件长时间解密放着不好。 好了,再看看ecryptfs_test文件夹,里面的文件是不是都无法正确打开了?

********连概念加内容 加操作都说了,就这么点。简单吧

  • 5.需要解密文件夹时还是用命令:
 sudo mount -t ecryptfs ecryptfs_test ecryptfs_test
 (格式还是不变:sudo mount -t ecryptfs real_path ecryptfs_mounted_path)
 passphrase:
 select cipher:
 select key bytes:
 enable plaintext passthrough(y/n) [n]:
 enable filename encryption (y/n) [n]:

上面这几相当初怎么设置的就怎么填,之后文件夹就解密了。

不需要用了,还是用命令解除解密状态

sudo umount -t ecryptfs ecryptfs ecryptfs_test


这里说一点,mount命令重启就失效了。如果你要关机了,不必使用sudo umount -t ecryptfs ecryptfs_test 命令了。因为再次开机,解密是失效的。必须重新运行命令sudo mount -t ecryptfs ecryptfs_test ecryptfs_test

深入使用的讨论

我们知道 ecryptfs 是文件虚拟层,其功能就是 加密/解密。没有密码验证一说

也就是说,它根据密码进行加密/解密。即使密码不正确依旧进行 加密/解密,与数据无关。

那么:

1,重复加密\混和加密

实验证明的确可以。因为 mount 是可以重复挂载的。更别说多次挂载在不同地方。

试验:假设有这么几个文件夹 test a b

mount -t ecryptfs test test

密码设置为 1234

里面放文本文件 one。

好了再次挂载

mount -t ecryptfs test a

密码为4321

放文本 two

再次挂载

mount -t ecryptfs a b

密码0987

放文本 three

好了在文件夹 test a b中均可看见 one two three文件,可是 test中只有 one可以打开,a 中只有two可以打开,b中只有three可以打开。

因为one被密码1234加密,two被密码1234和密码4321加密两次,three呢1234、4321、0987加密三次。

test中文件被1234解密一次,a中文件被密码1234和密码4321解密两次,b中1234、4321、0987解密3次。

所以test中除了one被正确解密,其它的都还在加密状态。 a中,one被1234正确解密却又被4321再次解密,就成了乱码(相当于被加了密)

这样一来,假设test中的文件被加密了2次。

那么别人破解密码就很有一思了(假设他不知道文件被加密了几次)。

如果尝试一个密码,显示的文件夹内容是乱码。那么就有2个可能

要么是密码错了,要么是密码对了还要再解密。

当然,对于密码学而言(直接从密文还原为明文)。使用同一方法重复加密丝毫不能增加安全性,不管重复多少次其效果只等同于加密一次。但是不要忘记,ecryptfs有:

1) aes: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)
2) blowfish: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)
3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24 (not loaded)
4) twofish: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)
5) cast6: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)
6) cast5: blocksize = 8; min keysize = 5; max keysize = 16 (not loaded)

种加密方式。如果正确使用,破解难度很大

由此可以得知 ecryptfs 有效重复加密次数只有6次,但是对于非情报人员而言,已经够用了。

2,把普通软件升级为 带有可加密数据库的安全软件

这点应用原理很简单。软件在 home/~ 中 大多都有配置,软件数据、用户数据的保存文件夹。

比 如:某某通讯录软件 在 ~/xxx/date 中保存用户的数据。而这软件比较普通,使用的明文存储 通讯录。

这意味着,资料外泄。比如里面是 大量客户 ,被竞争对手拿到…… 别觉得不可能,触及钱的东西,被人顾黑客黑都是很有可能的。

此时,使用 ecryptfs 把 date 文件夹 mount 。保证了处于加密状态。正常使用软件就行了。使用完了,umount。 ok,软件有了一个数据库加密的功能。而且是不在影响 软件使用的基础上实现的。

想想,rar这类的压缩加密的软件能做到吗?win 下的各类文件夹加密软件可以吗(可是不能任意 mount的)?

微 软基于用户的(ntfs文件系统),更是不方便。只要用户登录,加密文件夹就自动解密 直到用户注销。虽然说微软的加密真的很强,可是对于在线入侵,或者软件搞鬼就没办法了。只要用户处于登录状态,加密文件夹就像分开双腿的处女,谁想都行。 对于 ecryptfs 可不行,就算你是root,也要输入密码、加密方法、密钥长度。就算你拿到用户的登录密码,也无能为力(比微软全部鸡蛋放一个笼子好的多)。

这里 明白我不喜欢 整体加密主文件夹了吧。

3,为网络文件夹加密

这里使用 ubuntu one 或者类似工具的朋友,为了你的数据安全。 请先使用 ecryptfs mount 存入资料,再umount,之后再 同步文件夹。即使黑客 攻破了 ubuntu one 的服务器,也不会获得你的资料。而且使用上,没有太大差异。

欢迎讨论:[email protected] --Cat650 2010年9月7日 (二) 19:16 (CST)

再说一 点。大家也许都想到了:同一文件夹里的文件,可以是不同密码加密的。 推荐一本书《经典密码学与现代密码学》,网络上可以下载pdf 的版本。对于保守机密很有帮助