分享

NT 5.0技术讲座(六)

 梦中家园 2013-07-18
indows NT 4.0通过实现NTFS V4(第4版本)为文件和目录资源提供了很好的安全性。我们可以对存储在NTFS V4分区的文件和目录设置许可。如果没有适当许可,用户即便能够登录到NT上,也不能访问相应的文件资源。这与DOS、Windows 3.1和Windows 95相比有了很大的进步。

微软公司为了弥补Windows NT 4.0的种种不足,在即将推出的Windows NT 5.0中,提供了一种基于新一代NTFS:NTFS V5(第5版本)的加密文件系统(Encrypted File System,简称EFS)。

EFS加密技术

EFS实现的是一种基于公共密钥的数据加密方式,它利用了Windows NT 5.0中的CryptoAPI结构。对于需要加密的文件数据,首先产生一个文件加密密钥(File Encrypted Key)简称FEK,然后对这个FEK使用一种快速的对称加密算法实现对文件的加密。文件的FEK是随机产生的,每一个文件的FEK都是唯一的。

我们知道,在公共密钥机制中每一个用户都有一个或多个密钥对——公共/私有密钥对。这种密钥对使用的是非对称的加密解密算法,由于这种算法的计算速度很慢,所以公共/私有密钥对往往不是用来对文件数据进行加密,而是对一些较短的信息如文件的加密密钥进行加密。在EFS系统中就是这样:FEK用于对文件直接进行快速加密,然后使用用户的一个或者多个公共密钥来加密FEK。加密后的FEK与加密文件存储在一起,变成了文件的一个特殊属性,也为文件增加了一个特殊的EFS属性字段:DDF(数据解密字段:Data Decryption Field)。在解密时,用户用自己的私有密钥解密存储在文件DDF中的FEK,然后再用解密后得到的FEK对文件数据进行解密,最后得到文件的明文(即未加密的文件,与密文相对)。

文件的加密可以采用许多对称加密算法,最初的EFS使用的是DES加密算法,今后推出的版本将允许使用其它加密算法。

大家知道,公共密钥机制中,最重要的是如何存储用户的私有密钥。EFS采用CryptoAPI处理用户的私有密钥的存储,这样用户可以把自己的私有密钥存储于一个安全设备上比如smart card。

EFS还支持对存储在远程文件服务器上的文件进行加密和解密操作。这里需要注意的是,EFS只能对存储在硬盘上的文件进行加密解密。对于在网络上传输的文件数据,Windows NT使用的是SSL/PCT等协议提供的加密服务。

与其他加密机制不同,EFS与NTFS V5紧密结合在一起。当生成临时文件时,只要临时文件还位于NTFS V5分区中,原有文件的加密状态将? 一种属性拷贝到临时文件上,这样可以防止通过临时文件窃取机密信息。同时,EFS位于Windows NT的内核部分,由于内核中的线程使用内存中的非分页池部分(系统内存)来存储FEK,而页交换文件使用的是内存中的分页池部分(用户内存),因此他人无法通过页交换文件来获取密钥,从而加强了系统的安全性。

一个文件在使用之前不需要手工解密——加密和解密对用户是透明的,加密和解密是自动地发生在从硬盘中读取数据以及向硬盘中写入数据时。当发生磁盘I/O时,EFS能够自动地检测对象文件是否为加密过的文件。如果是加密文件,EFS从系统的密钥存储区得到一个用户的私有密钥。如果访问加密文件的用户不是原来对文件进行加密的用户,他的私有密钥必然与进行加密的用户是不同的。这样,用私有密钥还原出来的FEK必然是不正确的,这时得到的是一个对文件的拒绝访问信息。所有这一切都不需要用户的参与,用户访问一个经过加密的文件或目录只可能得到两个结果:允许访问(与其它文件系统中的情况相同)或者拒绝访问。

同时,Windows NT 5.0支持从单一文件到整个目录的加密和解密功能。如果对一个目录进行加密,目录中所有的文件(子目录)都自动地进行加密。加密的操作也很简单,可以通过Windows NT Explorer来启动加密解密服务。同时,对高级用户还提供了基于命令行的和基于管理界面的操作。

EFS提供内置的数据恢复支持,而且这是必须的。也就是说,只有为系统配置了一个或者多个恢复密钥之后,才能对文件进行加密。恢复密钥和其实也是基于公共密钥机制的,它也是一对密钥对。用公共恢复密钥来加密FEK,而用私有恢复密钥来解密FEK。恢复密钥对的作用是在用户丢失了自己的私有密钥时,恢复代理可以用私有恢复密钥得到FEK,从而恢复文件。这就为系统提供了容错的性能。

公共恢复密钥作用于FEK之后,被加密的FEK同样与加密文件存储在一起,存放的地点也是一个EFS属性字段,叫DRF(数据恢复字段)。在EFS系统中,公共恢复密钥在任何时候都必须是有效的,任何一个文件被用户加密时,系统也用公共恢复密钥来对FEK进行加密。而私有恢复密钥的使用就少多了,只有当用户遗失自己的私有密钥或者当一个雇员离开了公司时,恢复代理才需要使用私有恢复密钥。

需要注意的是:恢复公共密钥只能够作用于随机产生的FEK,而不能对用户的私有密钥进行加密,这就保证了用户的私有信息不会被恢复或使用私有密钥来解密。

EFS的结构

下面,让我们具体地看一看EFS的结构,加密的过程如图一所示:

 

图1

图中的五角星代表密钥,用户的文件明文使用随机产生的FEK进行加密操作,通过DES算法得到了文件的密文。而FEK又分别经过了两个公共密钥:用户的公共密钥和公共恢复密钥的处理,经过RSA算法处理后的加密FEK被分别存放在文件的两个属性字段:DDF和DRF中。图中只画出了一个用户和一个恢复代理——实际上可以是一系列的用户和一系列的恢复代理,而他们使用互相独立的密钥对。在EFS的第一个版本中,只实现了对一个用户和多个恢复代理的支持。图二显示了文件解密的过程:

 

图2

在解密的过程中,用户的私有密钥作用于DDF中经过加密的相应FEK项,用RSA算法得到FEK的明文形式,再用FEK来对加密文件进行解密。文件解密的过程是基于读取的文件块的,也就是说读取文件时只解密从磁盘上读出的特定数据块,并不需要对整个文件进行解密,这就大大减少了系统的负荷。

 

图3

图三显示了文件的恢复过程。这个过程与文件解密过程基本相同,除了使用的是恢复代理的私有恢复密钥,作用的对象是文件DRF中相应的FEK项。

在Windows NT 5.0操作系统中,EFS包含以下组件:

EFS驱动程序:EFS驱动程序是位于NTFS V5之上的一层代码,它向EFS服务发送对FEK、DDF、DRF以及其它密钥管理服务的请求。然后它把得到的信息传送到EFS文件系统的运行时刻库FSRTL,再由FSRTL实现不同的文件系统操作。

EFS FSRTL:FSRTL实际上是EFS驱动程序的一个模块,由它产生对NTFS V5分区的调用,实现对加密文件和目录的各种操作。虽然EFS驱动程序和FSRTL集成为一个组件,但它们从不直接进行通信,它们相互之间使用NTFS文件控制调用机制来交换消息,这样就保证了NTFS参与所有的文件操作。

 

图4

EFS服务:EFS服务是Windows NT 安全性子系统的一部分,它利用原有的LPC通信端口来和EFS驱动程序进行通信。在用户模式下,它提供与CryptoAPI的接口并以此提供FEK,生成DDF和DRF,EFS还提供对Win32 API的支持

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多