第三章 文件安全
第一节 文件加密与解密
文件内容的加密一直是一个非常重要的领域。计算机领域的科学家们一直在努力尝试开发出一个黑客们永远无法破解的加密算法,以确保被加密数据的安全。要保证文件内容的安全、不被泄漏,就需要对数据进行可靠的加密。
3.1.1 加密算法
在使用加密软件对文件加密前,首先来了解一下加密领域的一些成功的加密算法,它们已经应用在各个领域,用于加密各种重要数据,并且其可靠性也得到了很好的验证。
目前,常见的加密算法可以分成三类,即对称加密算法、非对称加密算法和哈希(HASH)算法。
1.对称加密
对称加密,是指加密和解密使用相同密钥的加密算法。对称加密算法加解密的速度快,使用长密钥时很难破解。对称加密算法的安全性取决于加密密钥的保存情况,但要求每一个持有密钥的人都保守秘密是不可能的,总有人会有意无意地把密钥泄漏出去。如果一个用户使用的密钥被入侵者获得,入侵者便可以读取该用户密钥加密的所有文档,如果整个企业共用一个加密密钥,那整个企业文档的保密性便无从谈起。
常见的对称加密算法有DES、3DES、Blowfish、IDEA、RC4、RC5、RC6和AES。其中AES算法算是目前最可靠的算法。
AES是美国国家标准技术研究所(NIST)取代DES的21世纪新加密标准。AES要求采用对称分组密码体制,密钥长度最少支持128、192、256位,分组长度128位。在应用方面,尽管DES在安全上很脆弱,但由于快速DES芯片的大量生产,使DES仍能暂时继续使用。为提高安全强度,通常使用独立密钥的三级DES,但是从发展趋势来看,DES终究会被AES代替。
对称加密的问题在于加密和解密的密钥是相同的,因此在传播过程中非常不安全,一旦泄漏,就将无法挽救。
2.非对称加密
非对称加密,是指加密和解密使用不同密钥的加密算法,也称为公钥与私钥加密(即一组密钥对)。假设两个用户要加密交换数据,双方首先交换公钥(公钥是可以随便公开的,但私钥必须自己做妥善保管)。在实际加密时,一方用另一方的公钥加密,另一方即可用自己的私钥解密;而一方用自己的私钥加密的数据,另一方也可以利用他提供的公钥来解密。公钥是可以公开的,但用户必须保管好自己的私钥,因此加密密钥的分发将变得十分安全和简单。此外,由于每个用户的私钥的唯一性,其他用户除了可以通过信息发送者的公钥来验证信息来源的真实性,还可以确保该信息发送者无法否认曾发送过该信息。
非对称加密的主要缺点是加解密速度要远远慢于对称加密,有时候甚至不及对称加密的1/1000。正因为如此,非对称加密一般和对称加密结合起来使用:加密方用对称加密中的密钥加密数据信息,用非对称加密方法加密对称加密中的密钥。然后,解密方再用非对称加密方法解密对称加密中的密钥,接着用对称加密中的密钥解密数据信息。
应用中常见的非对称加密算法有:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(用于数字签名)。
3.散列算法
散列算法是一种单向的加密算法,用户可以通过散列算法对目标信息生成一段特定长度的唯一的散列值(比如MD5的值的长度为32B),却不能通过这个散列值重新获得目标信息。
因此散列算法常用在不可还原的密码存储、信息完整性校验等。散列是一种特殊的算法,MD5就是其中常用的一种。这种算法的特征是不可逆性,并且计算的时候所有的数据都参与了运算,其中任何一个数据变化都会导致计算出来的散列值完全不同,所以通常用来校验数据是否正确或用作身份验证。比如论坛里面用户的密码是经过MD5等散列算法算出来的散列值进行保存的。
在通常的网络下载中,会带有一个散列值,这个值用来校验下载的文件是否损坏并保证未被别人篡改。
常见的散列算法有MD2、MD4、MD5、HAVAL、SHA。
加密算法的效能通常可以按照算法本身的复杂程度、密钥长度(密钥越长越安全)、加解密速度等来衡量。上述算法中,除了DES密钥长度不够、MD2速度较慢已逐渐被淘汰外,其他算法仍在目前的加密系统产品中使用。
SSL和PGP是当前Internet上比较常用的实际应用中的加密方法,它们在各自的应用范围内都拥有很大的用户群。这些应用软件都使用了上面所介绍的加密方法中的一种或多种。
SSL协议是由Netscape首先发表的网络资料安全传输协定,其首要目的是在两个通信间提供秘密而可靠的连接。该协议由两层组成,底层是建立在可靠的传输协议(如TCP)上的SSL的记录层,用来封装高层的协议。SSL握手协议准许服务器端与客户端在开始传输数据前,能够通过特定的加密算法相互鉴别。SSL的先进之处在于它是一个独立的应用协议,其他更高层协议能够建立在SSL协议上。
目前的Web Server及Browser大多支持SSL的资料加密传输协定。因此,可以利用这个功能,将部分具有机密性质的网页设定在加密的传输模式,可避免资料在网络上传送时被其他人窃听。
SSL利用了公开密钥的加密技术(RSA)来作为用户端与服务器端在传送机密资料时的加密通信协定。目前,SSL技术在大部分网络服务器及浏览器中得到了应用。
对消费者而言,SSL已经解决了大部分的问题。但是,对电子商务而言问题并没有完全解决,因为SSL只能做到资料保密,厂商无法确定是谁填写了这份资料,即使这一点做到了,还存在与银行清算的问题。
目前,还有一种非常好的网络连接与桌面应用的安全方法,即PGP(Pretty Good Privacy)加密程序。
PGP是一个公钥加密程序,与以前的加密方法不同的是PGP公钥加密的信息只能用私钥解密。在传统的加密方法中,通常一个密钥既能加密也能解密。那么,在开始传输数据前,如何通过一个不安全的信道传输密钥呢?使用PGP公钥加密法,用户可以广泛传播公钥,同时安全地保存好私钥。由于只有用户本人可拥有私钥,所以,任何人都可以用用户公钥加密所写的信息,而不用担心信息被窃听。
使用PGP的另一个好处是可以在文档中使用数字签名,以标识这个文件的真实作者。因为,一个使用私钥加密的密钥只能用公钥解密,这样,如果有人阅读用公钥解密后的文件,他们就会确定只有拥有加密这个文件的私钥的用户才能写出这个文件。
本书成书时PGP的最新版本是2.6.3,但仅限于美国和加拿大使用,PGP 2.6.3i则是一般Internet上使用的版本,可以从其官方网站www.pgpi.org下载。
作为一个软件加密程序,PGP的用户可用它在不安全的通信链路上创建安全的消息和通信。目前,PGP协议已经成为公钥加密技术和全球范围消息安全性的事实标准。