Windows加密是安全体系的重要基础和组成部分。现代CPU的保护模式是系统安全的硬件基石,基于CPU硬件的特权分级,Windows让自身的关键系统代码运行在高处理器特权级的内核模式,各种应用程序则运行在低处理器特权级的用户态,保证了系统层面的基本安全控制逻辑(如内存、文件等系统资源的访问控制机制等)的有效性。加密技术与系统安全控制逻辑的结合,使得用户信息在面对一定程度上不可靠的存储和传输环境时,如计算机失窃、存在网络嗅探的情形下,仍能保持其私密性、不可篡改的完整性等安全属性。

Windows加密技术可以从两个层面予以讨论。其一是基本的加密算法服务,这是基本的层面,在这个层面上,摘要,对称加密,非对称加密等基本的加密算法可以通过CryptoAPI等操作系统API接口,为应用程序所用。其二是Windows系统加密功能,这个层面的内容包括EFS,用户信息保护,SSL等网络加密协议等等。Windows在其基本加密算法服务的基础上,建立一个较为完善的加密系统。这个加密系统一方面保护Windows系统(单机和域)的安全,另一方面,也提供了可供应用程序直接使用的系统级加密保护服务。

Windows加密算法以服务提供软件包(CSP)机制组织管理。Windows定义了CSP的架构及其API。通过这些API函数,应用程序可以枚举系统中存在的CSP,选择符合自己需要的CSP,使用CSP所实现的算法进行加密操作。每个CSP包含有来自某个厂商实现的一组加密算法和密钥保护机制,不同的CSP可以含有相同算法的不同实现。有的CSP是与硬件结合的,算法逻辑和密钥保护实现在独立的硬件上,这种CSP起着接口适配作用,使得应用软件与这些加密硬件隔离开来。微软在Windows中预置了几个CSP,这些CSP所包含的加密算法在所有的Windows计算机上都是立即可用的。通过CSP框架,应用软件可以使用Windows定义的统一API,实施加密操作。这样,应用很容易适应不同的加密算法实现方式。看上去差异很大的加密实现方式,对于应用程序来说,只是CSP名称的差异。CSP的选用很容易做成可以配置的选项,有应用系统集中管控或者由终端用户自行选择。

Windows加密系统的目标有,保护Windows计算机和Windows网络自身、用户账户安全、用户数据安全。Windows系统发行介质含有微软的公钥,使用基于数字签名技术的代码签名机制,来验证系统组件的完整性。这一完整性保证了系统代码的确来自微软官方,不会被第三方篡改。

在Windows被安装到一台计算机上的时候,会随机生成该计算机的安全标识(SID)和设备主密钥。设备主密钥被用来保护本地计算机边界之内的数据,验证设备在Windows域中成员身份。

在Windows中创建一个用户帐户时,会产生一个用户SID和用户主密钥。用户主密钥密钥被用户口令加密保护。Windows系统为用户对一些重要的安全数据进行了加密,如数字证书私钥、系统工具保存的网络登录口令等等,这些都是由用户主密钥所保护的。由于用户主密钥使用用户口令加密存储,所以管理员强制重置用户口令时,是无法解密恢复原来的主密钥的。这时,我们会看到这样的提示:“您正在重置xxxx的密码。如果这样做,xxxx将丢失网站或网络资源的所有个人证书和存储的密码”。这也意味着即使是管理员,也不能通过重置口令这一途径读取用户的加密信息。值得注意的是,用户口令本身使用了摘要算法加密,为了对抗字典攻击,Windows在注册表中只保存了摘要值的一半比特。由于还原主密钥需要全部的比特,这使得攻击者即使“碰”上了注册表中的这一半比特,也不能解密还原用户的主密钥。

Windows加密文件系统(EFS)对用户数据提供了保护。加密文件系统使用混合加密体制保护文件内容。每个EFS加密的文件都使用随机生成的不同对称密钥(FEK)保护。FEK被用户数字证书公钥加密保护,还原FEK需要能够访问用户的文件加密证书私钥。这一私钥又得到用户主密钥的保护,用户主密钥又在用户口令的保护之下。由于重置用户密码会失去原先的主密钥,从而失去EFS的访问能力,所以会导致不再能够打开原先使用EFS加密的文件。这种情况下,唯一的途径是使用在第一次加密文件时,备份的EFS文件加密证书私钥。EFS加密与不加密的区别在于,对于不加密的文件,具有管理员权限的账户,不登录用户账户,也能打开这些文件。设备或者硬盘失窃时,信息窃贼是很容易得到这样一个权限的,把硬盘挂在自己的计算机上就可以了。EFS以强加密阻止这一情况的发生。如果冠希当初勾选了文件夹的加密属性以开启EFS,再配合以一个不易猜测的Windows开机登录口令,他就不会因送修电脑而被那么早的被送上新闻头条。

在保护本地各种加密要素安全的基础上,Windows实现了一系列网络加密协议,有些是Windows网络专用的,如RDP协议;有些是互联网通用的,如SSL、IPSec等。应用程序可以通过相关的加密API,利用这些系统中实现了的加密协议,加密保护应用程序在网络上传输的信息。