Windows文件系统与网络功能深度解析
1. 文件系统加密解密机制
1.1 解密过程
当用户打开加密文件时,解密过程便开始。NTFS在打开文件时会检查其属性,接着执行EFS驱动中的回调函数。EFS驱动读取与加密文件关联的$EFS属性,为此调用NTFS为EFS导出的支持函数。NTFS完成打开文件的必要步骤后,EFS驱动会确保打开文件的用户拥有访问文件加密数据的权限,即DDF或DRF密钥环中的加密文件加密密钥(FEK)与用户的公私钥对相对应。在进行验证时,EFS会获取文件解密后的FEK,用于用户后续对文件的数据操作。
EFS自身无法解密FEK,需依赖Lsasrv(可使用CryptoAPI)来完成。EFS通过Ksecdd.sys驱动向Lsasrv发送LPC消息,请求其获取与打开文件的用户对应的$EFS属性数据中加密FEK的解密形式。
当Lsasrv收到LPC消息后,如果用户配置文件尚未加载,它会执行Userenv.dll的LoadUserProfile API函数将其加载到注册表中。然后,Lsasrv会遍历EFS数据中的每个密钥字段,使用用户的私钥尝试解密每个FEK。若密钥字段中的证书哈希不对应用户拥有的密钥,Lsasrv会继续处理下一个字段。若无法解密任何DDF或DRF密钥字段的FEK,用户将无法获取文件的FEK,EFS会拒绝应用程序对文件的访问。反之,若识别出哈希对应于用户拥有的密钥,Lsasrv会使用CryptoAPI和用户的私钥解密FEK。
由于Lsasrv在解密FEK时会同时处理DDF和DRF密钥环,因此会自动执行文件恢复操作。若未注册访问加密文件的恢复代理(即DDF密钥环中无对应字段)尝试访问文件,因该代理可访问DRF密钥环中某