可能很多程序员都用过EFS,至少都知道NTFS有这么个加密功能,但并不了解它,会觉得不好用,因此没有真正用起来。但一般情况下也找不着更好的加密方式,于是就裸奔了。其实EFS是非常适合给程序员做工作代码保护的,当你了解它之后就会有这种感觉了。
起因
这可能是个老掉牙的话题,每个用电脑的人都会想到要保护自己电脑上的东西。但事实上,从我这么多年接触的同事、朋友来看,能真正做到这一点的不多,就连做了十几年编程开发的人也不例外。个个都认为自己的电脑很安全,结果我随便一下就能把他们的文件弄出来。普通的用户也就罢了,但专门搞技术的人也一样,似乎就有点说不过去了。我觉得一个可能是大家的安全防范意识还是不够,或者说觉得自己的电脑上没什么重要的东西吧;另一个可能也是没仔细研究过哪种保护方式才方便好用(这里我是专指Windows下的防护)。
大家一般都会给Windows用户设置一个登录密码,尤其XP下还要给超级用户另外设置;另外也有人设置BIOS开机密码。然而这些开机登录密码只能防止别人用你的机器,不能保护你的文档——只要把你的硬盘拆下来,接到其它机器上,立马什么文件都全部看到。如果不想拆机器,把BIOS放电就能去掉BIOS开机密码,用U盘启动就可以看你的文档。还有一些笔记本电脑,能给硬盘设置密码,这个稍为安全一些,但其实也只是硬盘接口上做了个类似于小BIOS的密码,并没有对内容进行处理,拿到专业人士手里稍为弄一下也是可以去掉的。
总之一句话,如果不做加密,稍有技术的人只要能接触你的机器,就能访问你的文件(说不定你就是下一个艳照门的主角)。作为数字作品的工作者,用一些手段保护自己的数字财产是很有必要的。
加密
那具体如何保护呢?答案当然是加密。只有加密能彻底地保护你的文件。除了加密,其它什么隐藏、权限控制等方法都是浮云。用什么来加密呢?当然是EFS。一般的加密软件,如RAR和ZIP,只适用于备份,在经常要工作的机器上是不好用的。EFS是WINDOWS自带的一个加密方案,只能用于NTFS分区,比较简单易用。专业版的WINDOWS一般都支持EFS(HOME版是不支持的),加解密过程对用户是透明的,比较安全和方便。
为什么说EFS适合程序员呢?首先它是系统自带,不用另外找;其次它对系统透明,易于使用,可以做到只加密代码文件,不影响编译代码的速度;再次它久经考验,不会有不稳定的担忧;最后它确实很安全,能有效地保护你的代码。
可能有人用过EFS,但到最后遇到无法解密或乱码的情况,这些情况可能是经验不足使用不当。因此初初用的话也要做好证书备份,不能大意,弄不好有时也会搞死自己。
我个人使用EFS已经好多年,我自己使用的感觉是相当的稳定可靠。我之前有过重装系统后无法打开加密文件的教训;也有过在D盘系统上加密后,在E盘新系统无法解密的事情,后来通过导出证书解决;都是自己的原因。
EFS使用起来很容易:用资源管理器找到要加密的文件夹,右键属性高级,勾选加密内容以便保护数据,确定确定,将更改应用于该文件夹子文件夹和文件,即可。以后新加的文件、文件夹均受保护;将文件COPY到另一个NTFS磁盘也仍然保持加密状态;如果将文件COPY到FAT分区或网上邻居,则系统会提示丢失加密属性。
由于加解密过程需要占用额外的资源,因此会降低读写的速度,建议只针对关键代码文档目录进行。
效果
据我个人理解,EFS是非常安全的,使用大数运算对文件密钥进行复杂加解密,然后再用文件密钥对文件内容进行快速加解密。除非知道你的系统密码或穷举重试,否则基本上没有办法能解密。你可以用其它手段看到文件目录结构,可以修改文件名,也可以删除文件,但无法查看内容。网上说的破解,也只是说操作系统裸了进不去,但系统的证书文件其实还在,可以用登录密码取回。也有人说加密跟当前用户的SID有关,但其实只要有证书,新建一个用户也是可以解密的。
另外注意一点,就是超级用户是可以看到其它用户的加密内容的,因此你必须自己是超级用户才能完全的保护自己。XP的系统是有隐藏的超级用户的(密码为空),用XP的话自己要先把超级用户的密码设置一下,不然别人用超级用户就能解密你的文件了。
备份
以下操作会导致无法正常解密文件:
这些情况下加密证书被损坏,无法用于解密,这时你的文件也会丢失;如果有备份证书,则仍可以导入证书解密。因此备份证书是非常必要的。
一般在一个系统上做过文件加密后,系统都会生成一个证书。有多个证书时,要一个一个地导出,在新系统需要时导入。如果有多个系统需要共享加解密,也可以互相做这种证书导入。如果不备份,一旦WINDOWS系统裸掉或重装,你将无法访问加密的文件。以下为微软提供的证书备份说明:
备份加密文件系统 (EFS) 证书
http://windows.microsoft.com/zh-CN/windows-vista/Back-up-Encrypting-File-System-EFS-certificate
如果对计算机中的数据进行加密,则当加密密钥出现意外时,需要使用一种方法来恢复数据。如果加密密钥已丢失或受损,但无法恢复数据,该数据将会丢失。如果将加密密钥存储在智能卡中,而智能卡已受损或丢失,也会丢失数据。若要确保始终可以访问加密数据,应对加密证书和密钥进行备份。如果有多个用户使用计算机,或使用智能卡对文件进行加密,则应创建文件恢复证书。有关详细信息,请参阅为加密文件创建恢复证书。
备份 EFS 证书的步骤
Win7的系统新增加了BitLocker技术,加密整个磁盘,也是较好的保护手段,但我没有研究过,看起来比EFS复杂,而且会对不必要的文件也加密,感觉还是EFS好用些。