当前位置:C++技术网 > 资讯 > NTFS文件系统加密解密文件过程大揭秘

NTFS文件系统加密解密文件过程大揭秘

更新时间:2015-06-26 23:18:37浏览次数:1+次

    开始之前,上图一张,你可以自己看看这张图,然后再看文章的分析过程。

NTFS文件系统加密解密文件过程大揭秘

    NTFS文件系统安全性非常高,不是对数据的加密解密支持,而且还提供各种数据恢复方面的支持。这里不多说其他的方面,重点放在加密解密过程上。
    相信很多人使用过NTFS上的加密,可以加密后还是可以直接打开,似乎跟没有加密一样。只是加密过的文件的文件名变色了而已。以前我也一直纳闷,觉得这个没什么用处,知道今天,才弄明白。
    NTFS文件系统的加密,并不是我们常用的压缩软件中的压缩前的加密,或者其他加密软件直接的加密。其他软件的加密,通常要你输入一个密码,然后打开文件时需要输入密码,这两个密码是一样的,既用来加密也用来解密,两个过程是可以互逆的。这就是常说的对称式加密,也是大家常用的常见的加密方法。
    而NTFS文件系统的加密,则不是应用于此。当然,除了文件系统的其他方式的加密,比如卷加密,就不在此讨论范围了。NTFS文件系统的加密,用于对数据的保护,主要应用的是在操作系统范围。对于一个系统中的多个用户之间实现数据保护,如果你知道Windows用户控制系统,对此应该很好接受。而应用的最好的地方,应该是服务器了。因为服务器一般是提供很多用户登录的,用户之间的数据应该隔离保护的,因此也就是NTFS加密的用武之地之一。我们在此也不多讨论非对称加密,只是稍微介绍一下背景,便于了解NTFS的加密机制。
    经常听说非对称加密,可以也才到今天才算是看懂了这一切,哈哈哈。非对称加密里,有一个公钥和私钥。这和对称加密的一个密码有所不同,因此应用场合也不一样。公钥表示可以公开的密钥,而私钥则是个人持有的。为什么这么称呼呢?一个公钥就有一个私钥,公钥用来加密,私钥用来解密。加密的东西,当然可以公开,但是解密的东西,则不能乱公开,否则你加密过的文件,别人都可以解密查看内容。而公钥多少人知道没有关系,你用这个公钥加密的文件,但是你没有私钥,加密后,你就解不开了。当然,你可以创建一对公钥和私钥。而用别人的公钥加密,则只能用别人的私钥解开。这就是公钥私钥名称的由来。
    而非对称的加密的应用场合,可以用于网络传输数据。比如发邮件给A,那么你知道A的公钥,那么把邮件用A的公钥加密后,再发送给A。别人中途拦截了,没有A的私钥,依然打不开邮件。而A自己是有私钥的,因此A可以用自己的私钥打开邮件。
    还有一个应用就是,网络的信息要可信,一般要有文件签名。有了文件签名,就可以找到这个文件是由谁发的。要给文件签名,就使用私钥对文件加密,加密后,文件就被签名了。签名的过程就是对文件用私钥加密的过程。一般下载的文件,签过名的,会给出公钥,然后下载完后,要用公钥验证含有签名的文件,如果验证成功,那么说明文件是正确的。也就代表这个文件确实是那个人提供的。比如A要公布一个文件,但是A怕别人篡改文件数据,导致别人下载的文件是被篡改过的文件。所以,A用A的私钥对文件加密,即对文件签名,然后再放到网上提供下载。同时会告诉大家,公钥是什么。文件被下载后,可以用公钥去验证文件,如果验证通过,说明文件没有被篡改,且文件数据没有丢失,所有的数据都原样被下载到电脑了,这是就是正确的。如果不验证,在网络中可能有人对文件进行篡改,然后植入病毒,当用户一运行结果发现中毒了。而在追究责任时,用公钥验证,会发现验证失败,表示是被人动过手脚的,与文件的发布者无关。
    以上就介绍完了对称加密和非对称加密,更多详细的了解,请参考其他专业书籍。不过,有了以上这些介绍,对于这两种加密方式应该是可以轻松理解了。
    下面开始具体的解释NTFS文件系统的加密流程。
    NTFS文件系统把每一个文件都看做是一条文件记录,图中只是给出了一个记录片段。文件各方面的信息,都是看做文件的属性的,比如文件名是文件名属性,甚至是文件内容,也是如此。文件的内容叫做数据属性,在数据属性中存储了文件的所有内容,具体的数据属性就不在此介绍了。当然,文件被加密后,也是有加密属性的,就是图中的$LOGGED_UTILITY_STREAM属性。加密的信息都在此属性中存放。加密属性中,含有数据解密段DDF和数据恢复段DRF。一个加密文件是可以被多个用户访问的,所以,在DDF中,就存储了所有可以访问此文件的用户,形成一个列表。同样,数据恢复方面,也会将数据恢复用到的信息存入DRF,不过DRF在此就不多介绍。从这里,我们可以看出,NTFS的加密解密和数据恢复方面的支持,确实不错。
    在Windows的文件名中右击,点击“属性”,然后在常规标签页中单击“高级”,弹出高级属性对话框,勾选“加密内容以便保护数据”。然后根据流程走完即可加密。这个过程中,会引导你创建一个用户私钥的备份文件,防止私钥丢失导致数据无法解密。这个过程交给你去动手做了。下面给一个截图,就是上面说的过程。

加密文件内容

    这个过程在文件系统内部执行了很多操作,下面具体说说。
    在这个加密的文件的过程中,如果之前没有加密过,就不存在用户私钥的。所以这个过程中会创建好用户公钥和私钥对,存储在系统中。以后再要加密,只需要简单的勾选加密就行了。取消加密,去掉勾选即可。创建好公钥和私钥后,文件系统会将此文件的数据属性中的数据即文件内容使用创建的文件秘钥FEK来加密,加密好后,此文件的数据就是密文了。但是,在当前用户下,双击文件,可以直接打开文件,感觉和没有加密一样,实际上是加密了的。只是文件系统底层会在打开文件前自动解密,解密后然后调用对应的软件打开解密后的文件。但是如果在系统中使用其他用户打开此文件,则直接拒绝。要打开文件,需要知道解密的秘钥才行。这个过程,在你将加密的文件通过网络发给好友时,文件系统也会事先将文件解密,然后才会发送。但是如果用一些软件直接将数据内容(被加密的文件内容)提取出来,那么是不能直接打开的,这样想打开,需要提取被加密的文件密钥FEK,以及得到文件拥有者的私钥,就是创建文件的用户的私钥。
    用文件密钥对数据加密后,肯定要将文件密钥FEK存在文件的加密属性中,但是如果直接将FEK存在文件加密属性中,是很容易被别人拿到。所以,就用用户的公钥对文件密钥FEK加密,得到加密后的FEK。这个加密后的FEK只能通过用户私钥才能解密成非加密的FEK。这个被加密的FEK就存入了文件加密属,并带有文件拥有者的SID和加密相关信息。
    解密的过程这是加密的逆过程。用户打开文件时,文件系统会读取文件的属性,确定文件是加密文件后,然后读取文件的加密属性的DDF,然后通过用户SID,获取被加密的FEK,然后用此用户的用户私钥去解密被加密的FEK得到未加密的FEK,然后用FEK去解密数据内容,最后才能打开文件。
    这里你可能有一个疑问,其他用户怎么能用他的用户私钥去解密被加密的FEK呢?对于文件的拥有者来说,一切都是这么自然。下面我们就说说其他用户的情况。
    其他用户要访问这个文件,首先要得到此文件的授权访问,授权的过程,就是将此用户加到DDF列表中的过程。
    这个过程是这样的:在授权过程中,文件系统自然会将文件拥有者的私钥来解密被加密的FEK,解密后,就可以用其他被授权的用户的公钥来加密被解密出来的FEK,形成这个被授权的用户的加密的FEK,此后这个授权的用户要访问此文件,只需要用他自己的私钥来解密他在DDF中的加密的FEK,得到未加密的FEK。用这个未加密的FEK来解密文件数据即可。未加密的FEK,对于所有访问此文件的用户来说都是一样的。因为如果未加密的FEK不一样,那么对应的数据内容肯定也不一样。而数据属性中只存储一份数据内容,所以只能是一个未加密的FEK与之对应。

    以上就是对NTFS文件系统的加密和解密过程全程分析和解释。如果你有不清楚的地方,请在文章后面提问。或者发现错误的地方,请指正,相互学习。