EFS加密和安全应用全把握

精彩链接

为了提高文件的安全性,微软在Windows 2000/XP/2003中,针对NTFS引入了EFS加密技术。EFS加密操作非常简单,对加密文件的用户也是透明的,文件加密之后,不必在使用前手动解密,只有加密者才能打开加密文件,其他用户登陆系统后,将无法打开加密文件。

一、EFS基础

1.什么是EFS

EFS(Encrypting File System,加密文件系统)是一个由Windows2000系列、Windows XP 专业版、Windows Server 2003系列提供的透明的文件加密服务,它是以公共密钥加密为基础,使用了Windows中的CryptoAPI架构。EFS可以使文件具有机密性但不提供完整保护。EFS提供可选的数据恢复能力,系统管理员可以恢复另一用户加密的数据。EFS也可以实现多用户(当然是被许可的用户)共享存取一个已经加密的数据。

2.EFS加密的优点

用户加密或解密文件或文件夹非常方便。

访问加密的文件快且容易。如果用户持有一个已加密的NTFS文件的私钥,那么用户能够打开这个文件,并透明地将该文件作为普通文档使用,反之,用户会被拒绝对文件的访问。而并不像第三方加密软件一样在每次存取时都要求输入密码。

加密后的数据无论怎样移动都保持加密状态(前提要在NTFS分区下移动,在Windows 2000/XP系统中,如果试图把一个EFS加密文件移动或复制到FAT/FAT32分区会遭到拒绝)。

EFS与NTFS紧密地集成在一起。当创建临时文件时,只要所有文件在NTFS卷上,原始文件的属性就会被复制到临时文件中。如果加密了一个文件,EFS也会将其临时文件进行加密。EFS驻留在操作系统内核中,并且使用不分页的池存储文件加密密钥,保证了密钥不会出现在分页文件中。这防止了一些应用程序在创建临时文件时泄密。

通过EFS加密敏感性文件,会增加更多层级的安全性防护。在加密文件时,即使黑客已完全存取电脑的文件储存体,其文件仍然受到保护。

在Windows XP中,EFS可处理脱机文件和文件夹。

3.EFS的技术结构与原理

(1)密钥和证书

EFS采用基于公钥的方案实现数据加密或解密,它使用标准x509证书,每一个受保护的文件都是被一个使用带有一定长度的文件加密密钥(FEK)的快速对称加密算法加密的(FEK的长度由算法或法则决定)。一个用户要访问一个已加密的文件,他必须拥有与公钥相适应的私钥。

(2)加密与解密

文件转换是加密和解密文件的过程,它需要一个特殊的接口。即使在严重的失败产生时,数据在转换过程中仍然是不会丢失的,所以,EFS会备份没经过加密的原数据直到全部转换过程都已经完成。当EFS接到转换文件的请求时,它首先进行一系列的检查,这些检查包括文件是否可以加密以及是否有足够的磁盘空间进行加密。系统文件或在系统目录中的文件时不能被EFS加密的。如果经过检查说明文件可以被加密,EFS便产生一个文件加密密钥(FEK),对于FEK加密与解密,在微软公司发布的《Windows2000的加密文件系统白皮书》中对EFS加密原理作了以下描述:

FEK加密使用一个或多个密钥加密公钥,生成一个加密的FEK列表。用户密钥对的公共部分用来加密FEK。加密的FEK列表与加密文件一起存储在一个特殊的EFS属性中,该属性称为数据加密字段(DDF)。文件加密信息与文件紧密地捆绑在一起。用户密钥对的私有部分在解密过程中使用。FEK是通过使用密钥对的私有部分进行解密的。用户密钥对的私有部分安全地存放在别的地方,例如,智能卡或其它安全存储设备上。

FEK也使用一个或多个恢复密钥加密公钥进行加密。再者,每个密钥对的公共部分用来加密FEK。此加密的FEK列表与文件一起存储在一个特殊的EFS属性中,该属性称为数据恢复字段(DRF)。加密DRF中的FEK,只需要恢复密钥对的公共部分。在正常文件系统操作中,要求这些公共恢复密钥始终在EFS系统上。恢复本身一般很少用到,只是当用户离开公司或者丢失密钥时才使用。正因为如此,恢复代理可以将密钥的私有部分安全地存放到别的地方(智能卡或其它安全的存储设备上)。

然后,EFS将在相应的文件夹建立一个临时文件。每一个源文件数据流都以备份用途被复制到这个临时文件中,源文件被缩短并且EFS读取这个临时文件中的数据并将它们写入原始文件,由于EFS加密是透明的,因而在实际写入磁盘前,EFS便已将数据加密。当所有数据被写入原始文件以及EFS证明了文件已加密后,EFS才会删除这个临时文件。如果转换失败或转换过程中发生错误,EFS会在删除临时文件前将试图加密的文件恢复到原始状态。

(3)打开与读写原理

EFS拥有4个主要的操作:打开、读、写以及转换文件。由于EFS被设计成为透明的,对于打开、读取、写入已加密文件便与操作普通文件没有任何区别:应用程序仍然使用普通的Win32 APIs。应用程序使用CreateFile()或者OpenFile()来打开已加密的文件;用ReadFile()、ReadFileEx()以及ReadFileScatter()来读取已加密的文件;用WriteFile()、WriteFileEx()、WriteFileScatter()来写入已加密的文件。

(4)数据恢复

EFS具有数据恢复能力,当用户的密钥损坏或丢失时EFS数据恢复便可以恢复已经加密的文件。系统管理员可以在恢复代理策略、空恢复策略以及无恢复策略中选择一种恢复策略。在域中,当设置首域控制器时,Windows执行该域默认故障恢复策略。恢复代理策略是指系统管理员添加了一个或多个恢复代理。这些代理在管理范围中恢复任何已加密数据都是可受响应的。空恢复策略是指系统管理员删除了所有的恢复代理以及他们的公钥证书(EFS不允许管理员在Windows2000中选择此设置)。所谓的无恢复策略是指系统管理员删除了恢复策略的私钥,这时没有私钥是可用的,所以不可能使用恢复代理,并且EFS的恢复也是不可用的。在独立的机器上,初始是没有恢复策略的,独立计算机的系统管理员可以修改EFS恢复策略,并且可以向恢复策略添加或创建恢复证书。

二、ESF加密文件或文件夹

1.ESF加密操作

在Windows XP中,在“我的电脑”中打开NTFS分区的磁盘,例如,C:\。右击需要加密的文件或文件夹,单击“属性”命令,在“常规”选项卡上,单击“高级”按钮。在弹出的对话框中,选中“加密内容以便保护数据”选项。点击“确定”按钮即可。

fefs1.jpg
加密操作

如果你加密的是文件夹,此时会弹出一个对话框,你可以根据需要,选择仅加密此文件夹、还是将此目录下的子文件夹和文件也一起加密。选择之后,点击“确定”按钮,最后再点击“应用”按钮完成。

标记为“系统”属性的文件,位于Window系统目录中的文件无法进行ESF加密。

在默认情况下,刚才EFS加密的文件(夹),在资源管理器中显示的颜色会变为彩色,这表示它们已经被EFS加密了。

fefs2.jpg
加密后的文件夹呈绿色

如果你不喜欢图形界面的操作,还可以在命令行模式下使用“cipher”命令完成对数据的加密和解密操作,至于“cipher”命令更详细的使用方法则可以通过在命令符后输入“cipher/?”并回车获得。

注意:如果把未加密的文件复制到具有加密属性的文件夹中,这些文件将会被自动加密。若是将加密数据移出来,如果移动到NTFS分区上,数据依旧保持加密属性;如果移动到FAT分区上,这些数据将会被自动解密。被EFS加密过的数据不能在Windows中直接共享。如果通过网络传输经EFS加密过的数据,这些数据在网络上将会以明文的形式传输。NTFS分区上保存的数据还可以被压缩,不过一个文件不能同时被压缩和加密。最后一点,Windows的系统文件和系统文件夹无法被加密。

2.将“加密”命令添加到右键菜单中

用传统的方法加密文件,必须打开层层菜单并依次确认,非常麻烦,不过只要修改一下注册表,就可以给鼠标的右键菜单中增添“加密”和“解密”的选项。

在运行中输入“regedit”并回车,打开注册表编辑器,定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion \Explorer\Advanced分支,新建-个DWORD值,并输入“EncryptionContextMenu”作为键名,设置键值为“1”。

退出注册表编辑器,任意选中一个NTFS分区上的文件或者文件夹,然后点击鼠标右键,就可以在右键菜单中找到相应的选项,直接点击就可以完成加密解密的操作。

3.禁止加密某个文件夹

如果你想设置禁止加密某个文件夹,可以在这个文件夹中创建一个名为“Desktop.ini”的文件,然后用记事本打开,并添加如下内容:

[Encryption]

Disable=1

之后保存并关闭这个文件。这样,以后要加密这个文件夹的时候就会收到错误信息,除非这个文件被删除。

而如果你想在本机上彻底禁用EFS加密,则可以通过修改注册表实现。打开注册表编辑器,定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\EFS分支,新建-个DWORD值,输入“EfsConfiguration”作为键名,并设置键值为“1”,这样本机的EFS加密就被禁用了。而以后如果又想使用时只需把键值改为“0”即可。

三、保证EFS加密的安全和可靠

前面我们已经了解到,在EFS加密体系中,数据是靠FEK加密的,而FEK又会与用户的公钥一起加密保存;解密的时候顺序刚好相反,首先用私钥解密出FEK,然后用FEK解密数据。可见,用户的密钥在EFS加密中起了很大作用。

密钥又是怎么来的呢?在Windows 2000/XP中,每一个用户都有一个SID(Security Identifier,安全标示符)以区分各自的身份,每个人的SID都是不相同的,并且有唯一性。可以这样理解:把SID想象成人的指纹,虽然世界上已经有几十亿人(同名同姓的也有很多),可是理论上还没有哪两个人的指纹是完全相同的。因此,这具有唯一性的SID就保证了EFS加密的绝对安全和可靠。因为理论上没有SID相同的用户,因而用户的密钥也就绝不会相同。在第一次加密数据的时候,操作系统就会根据加密者的SID生成该用户的密钥,并把公钥和私钥分开保存起来,供用户加密和解密数据。

这一切,都保证了EFS机制的可靠。

其次,EFS机制在设计的时候就考虑到了多种突发情况的产生,因此在EFS加密系统中,还有恢复代理(Recovery Agent)这一概念。

举例来说,公司一位员工加密了某个文件,该员工辞职了,安全起见,系统管理员直接删除了这位员工的账户。直到有一天需要用到这位职工创建的文件时才发现这些文件是被加密的,而用户账户已经删除,这些文件无法打开了。不过恢复代理的存在就解决了这些问题。因为被EFS加密过的文件,除了加密者本人之外还有恢复代理可以打开。

对于Windows 2000来说,在单机和工作组环境下,默认的恢复代理是Administrator;Windows XP在单机和工作组环境下没有默认的恢复代理。而在域环境中就完全不同了,所有加入域的Windows 2000/XP计算机,默认的恢复代理全部是域管理员。

这一切,都保证了被加密数据的安全。

1.备份密钥

在运行中输入“certmgr.msc”然后回车,打开证书管理器。密钥的导出和导入工作都将在这里进行。

fefs4.jpg
证书管理器

在你加密过文件或文件夹后,打开证书管理器,在“当前用户→个人→证书”分支中应该可以看见一个以你的用户名为名称的证书(如果你还没有加密任何数据,这里是不会有证书的)。右键点击这个证书,选择“所有任务→导出”命令。之后会弹出一个证书导出向导,在点击“下一步”按钮之后,在出现的对话框中选择“是,导出私钥”选项,其他选项按照默认设置,连续点击继续,最后输入该用户的密码和想要保存的路径并确认,导出工作就完成了。导出的证书将是一个pfx为后缀的文件。

fefs5.jpg
输入证书文件名

在重装操作系统之后找到之前导出的pfx文件,右键点击,并选择“安装PFX”命令,之后会出现一个导入向导,按照导入向导的提示完成操作(注意,如果你之前在导出证书时选择了用密码保护证书,那么在这里导入这个证书时就需要提供正确的密码,否则将不能继续),而之前加密的数据也就全部可以正确打开。

(2)恢复代理

我们对Windows XP和Windows 2000两种情况分别加以说明。

由于Windows XP没有默认的恢复代理,因此我们加密数据之前最好能先指定一个默认的恢复代理(建议设置Administrator为恢复代理,虽然这个账户没有显示在欢迎屏幕上,不过确实是存在的):

首先要获得可以导入作为恢复代理的用户密钥,如果你想让Administrator成为恢复代理,就要用Administrator账户登录系统。在欢迎屏幕上连续按Ctrl+Alt+Del两次,打开登录对话框,在用户名处输入Administrator,密码框中输入你安装系统时设置的Administrator密码,然后登录。

在硬盘上建立一个临时的文件,文件类型不限。这里我们以C盘根目录下的一个1.txt文本文件文件为例,建立好后在运行中输入“CMD”然后回车,打开命令提示行窗口。在命令提示符后输入“cipher /r:c:\1.txt”,回车后系统还会询问你是否用密码把证书保护起来,你可以根据具体情况来定,如果不需要密码保护就直接按回车。完成后我们能在C盘的根目录下找到1.txt.cer和1.txt.pfx两个文件(为了显示的清楚我在文件夹选项中设置了显示所有文件类型的扩展名,这样我们可以更清楚地了解到底生成了哪些文件)。

fefs7.jpg
创建证书

之后开始设置恢复代理。对于1.txt.pfx文件,同样需要用鼠标右键点击,选择“安装PFX”命令,然后按照向导的提示安装。

而1.txt.cer文件则有些不同,在“运行”中输入“gpedit.msc”并回车,打开组策略编辑器。在“计算机配置→Windows设置→安全设置→公钥策略→加密文件系统”选项中,右键单击该选项,选择“所有命令→添加数据恢复代理”命令,然后会出现“添加故障恢复代理向导”,按照这个向导指示打开1.txt.cer文件,如果一切无误就可以在右键菜单中看到“添加数据恢复代理程序”命令,这说明我们已经把本机的Administrator设置为故障恢复代理。

fefs6.jpg
添加成功

如果你愿意,也可以设置其他用户为恢复代理。需要注意的是,你导入证书所用的1.txt.pfx和1.txt.cer是用哪个账户登录后生成的,那么导入证书后设置的恢复代理就是这位用户。

在设置了有效的恢复代理后,用恢复代理登录系统就可以直接解密文件。但如果你在设置恢复代理之前就加密过数据,那么这些数据恢复代理仍然是无法打开的。

而对于Windows 2000就更加简单,Windows 2000有恢复代理,因此只要用恢复代理(默认的就是Administrator)的账号登录系统,就可以解密文件。

四、破解EFS加密

可是现在网上有一款叫做Advanced EFS Data Recovery的软件就可以破解EFS加密!不过使用该软件有个前提,那就是硬盘上要保留有相应的密钥,而且该软件目前仅能破解经过Windows 2000加密的文件,对Windows XP的加密还无法破解。你可以从网上下载该软件的试用版,试用版只能解密文件的前512字节。

现在,假设我们的Windows 2000安装在C盘,事先用Administrators组的账户apple加密了一个文本文件efs1.txt。注销该账户,用同属于Administrators组的另一个账户Luck登录,直接打开1.txt文件试试,看到“访问拒绝”的错误提示了吧?这说明经过EFS加密后的文件非授权用户的确无法访问。

运行Advanced EFS Data Recovery,在“EFS Related Files”选项卡中点击右侧的“Scan For keys”,然后指定在C盘中扫描密钥,图中显示为绿色的就是可用密钥。然后点击“Encrypted files”标签,再点击右侧的“Scan for encrypted files”按钮,在D盘上搜索所有加密文件,会得到相应的结果,其中的1.txt就是我们事先加密的文件,点击“Save files”按钮指定保存的位置即可。打开该文件看看,没有任何问题,该文件已经被解密了。

fefs8.jpg
EFS加密的破解

注意:如果你要解密的文件比较大,那就需要使用注册版,否则无法破解。