加密算法是将信息转变为一个看起来是任意数据串的数学过程。
通常,要被加密的初始数据称为普通文本,但是该信息代表什么并不重要——无论它是真正的文本,还是其他类型的数据。类似地,已加密的信息称为密文,它们看起来完全不像文本。图15-3所示的就是加密的简单流程。首先,普通文本被载入到加密引擎,以前,加密引擎可能是一个机械设备,例如World War II Engima机器,但现在,绝大多数引擎都是计算机程序。然后由加密引擎产生密文。
图 15-3 加密过程将接收普通文本并将其转变为看起来随机的密文要创建一个如图15-2所示的、需要身份验证的受保护目录,我们可以使用由Apache的身份验证所提供的大多数基本类型(在下一章中,我们将了解它们的使用方法)。这将在储密码之前对它们进行加密。我们创建了一个用户,其密码是password。该密码经过加密后,将以aWDuA3X3H.mc2的形式保存在数据库中。可以发现,普通文本和密文之间并没有明显的相似之处。
这种加密方法是不可逆的。许多密码使用一种单方向的加密算法进行存储。要检查输入的密码是否正确,不需要对加密的密码进行解密。只需要加密尝试输入的密码然后将它与存储的密码比较即可。
许多加密过程都是可逆的,但并非所有加密都是这样。这些可逆的过程称为解密,图15-4所示的是双向加密过程。
图 15-4 加密接收普通文本并将其转换为看起来是随机的密文,解密将密文转换为普通文本加密技术的诞生已经有将近4000年的历史了,但是真正的广泛应用开始于第二次世界大战。从那时起,它的发展模式与计算机网络的应用非常类似,开始用于军事和金融公司,20世纪70年代开始广泛应用于公司,到20世纪90年代便已经普遍应用。在最近几年中,加密已经从普通人只能在第二次世界大战电影和令人毛骨悚然的小说中看到的概念,发展到在报纸上经常看到,并且每次用Web浏览器购买东西时都将亲身经历的东西。
目前,有许多不同的加密算法可供使用。有些算法,例如DES,使用一个公有密钥或者一个私有密钥;有一些算法,如RSA,使用一个公有密钥和一个单独的私有密钥。
15.6.1 私有密钥加密
私有密钥加密也称作保密密钥加密,它信赖于授权用户知道或者可以访问一个密钥。该密钥必须是保密的。如果密钥落入别人手中,未授权的用户也可以阅读加密消息。如图15-4所示,发送方(加密消息的人)和接收方(解密消息的人)都有同样的密钥。
使用最广泛的密钥算法是数据加密标准(DES)。该方案是IBM公司在20世纪70年代发起并被用作美国商业和未分类的政府通信的标准。现在的计算机速度比20世纪70年代快了几个数量级,因此,1998年以后,DES就已经开始过时了。
其他著名的密钥系统包括RC2、RC4、RC5、triple DES(3DES)和IDEA。其中triple DES非常安全。它使用与DES相同的算法,3次分别应用3个不同的密钥。一个普通文本消息将必须顺序地使用密钥1解密,使用密钥2解密,再用密钥3解密。
提示 :有趣的是,triple DES的安全性能只是DES的两倍。如果需要安全性能3倍于DES的加密算法,可以编写一个5倍于DES安全性能的算法。
显然,密钥加密的一个缺点是,要向某人发送一个机密的消息,需要通过秘密的方式把密钥告诉对方。如果可以通过秘密的方式来分发一个密码,为什么不通过这个秘密的方式来分发消息呢?
幸运的是,当Diffie和Hellman在1976年最初公布第一个公有密钥方案时,加密技术有了突破。