NTFS的EFS加密分析 | 数据恢复迷
NTFS文件系统能够支持EFS加密文件系统(Encrypted File System)。EFS提供的文件加密技术可将加密的NTFS文件存储到磁盘上,并且特别考虑了其他操作系统上的现有工具引起的安全性问题。这些工具允许用户不经过权限检查就可以从NTFS卷访问文件,而通过EFS,NTFS文件中的数据可在磁盘上进行了加密。
EFS加密技术是基于公共密钥的,它用一个随机产生的文件密钥(File Encryption Key,FEK),通过加强型的数据加密标准(Data Encryption Standard,DES)算法—DESX对文件进行加密。EFS加密技术作为一个集成系统服务运行,易于管理,不易受攻击,并且对用户是透明的。如果用户要访问一个加密的NTFS文件,并且有这个文件的私钥,那么用户能够打开这个文件,并透明地将该文件作为普通文档使用。没有该文件私钥的用户对文件的访问将被拒绝。
DESX使用同一个密钥来加密和解密数据,这是一种对称加密算法(Symmetric Encryption Algorithm)。一般来说,这种算法的速度相当快,适用于加密类似文件的大块数据,但缺点也是很明显的:如果有人窃取了密钥,那么一切安全措施都形同虚设。而这种情况是很可能发生的,如果多个用户共享一个仅由DESX保护的文件,每个用户都要求文件的FEK。如果不加密FEK显然是个严重的安全隐患;但是加密了FEK则要给每个用户同样的FEK解密密钥,这也是个严重的安全问题。
EFS使用基于RSA(Rivest Shamir Adleman)的公共密钥加密算法对FEK进行加密,并把它和文件存储在一起,形成了文件的一个特殊的EFS属性字段——数据解密字段(Data Decryption Field,DDF)。在解密时,用户用自己的私钥解密存储在文件DDF中的FEK,然后再用解密后得到的FEK对文件数据进行解密,最后得到文件的原文(即未加密的文件,与密文相对)。只有文件的拥有者和管理员掌握解密的私钥(Private Key),任何人都可以得到加密的公共密钥,但是即使他们能够登录到系统中,由于没有解密的私钥,也没有办法破解它。EFS的工作原理如图4-476所示。
图4-476 EFS结构示意图
Windows 2000/XP的最初版本把私钥存储在不是十分安全的磁盘上,随后的升级版本则允许用户存储在某些便携设备上。尽管基于公共密钥的算法速度通常比较缓慢,但是EFS仅仅使用它来加密FEK,通过和加密文件的DESX配合,在使EFS的取得高速度的同时,也获得了令人羡慕的高安全性。
从图4-476中可以看到,EFS的实现类似于在核心态运行的设备驱动程序,和NTFS有着十分紧密的联系。当处于用户模式的应用程序需要访问加密的文件时,它向NTFS发出访问请求,NTFS收到请求后立即执行EFS驱动程序。EFS通过KSecDD设备驱动程序转发LPC给Lsass。Lsass不仅处理用户登录事务,也对EFS密钥进行管理。Lsass的功能组成部分Lsasry则侦听该请求,并执行所包含的相应的功能函数,在处于用户模式的加密服务API(CryptoAPI)的帮助下,进行文件的加密和解密。
Lsasry通过CryptoAPI来对FEK加密。通过动态链接库实现的CSP(Cryptographic Service Provide)极好地封装了加密服务API,以至于Lsasry根本不必知道EFS算法的实现细节。Lsasry取得EFS的FEK后,通过LPC返回给EFS驱动程序,然后EFS可以利用FEK通过DESX进行文件的解密运算,并通过NTFS把结果返回给用户程序。
由于穷举破解EFS是不可能的,而且在使用EFS时系统不会给出任何提示,所以,使用了EFS的用户一定要备份加密证书,否则加密证书一旦出现问题,要恢复数据几乎是不可能的。