黑客攻防从入门到精通(加密与解密篇)
上QQ阅读APP看书,第一时间看更新

第3章
加密算法

加密算法是构成信息安全的重要因素之一,安全的密码算法才能有效保证数据的安全。但只用密码算法是无法达到全面的安全功能的,还需要一些其他机制的共同协助。为了保证互通性,加密解密的算法是公开的,任何人都可以使用加密算法进行加密,但只有知道密钥的人才可能进行解密,得到正确的信息。

下面我们先对几种密码技术本质进行分析。

(1)单向函数

散列算法是单向函数。也就是说,它们接收一个明文字符串,将它转换成一小段无法用来重建原始明文的密文。显然,要使这种函数起作用,在进行转换的过程中就必将丢失一些数据。单向函数似乎没有用,因为无法从单向计算的密文中找回明文。为什么要计算一个无法解开的密码呢?当然,几乎所有单向的函数都不是无用的,从本质上讲,所有的公钥函数都是单向函数。

公钥密码术的良好候选函数,是那些在一个方向上容易计算,而在另一个方向上,除非知道某些秘密,否则极难计算的函数。因此,就不难发现公钥算法是基于因式分解和其他较难的数学问题。

(2)散列函数

散列函数通常又称为密码散列值、密码校验和密码指纹(或消息摘要),此类函数在许多密码协议中起着重要作用。其构思就是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文。理论上讲,所有可能的明文将散列成一个唯一的密文,但实际上并不是这样,大多数时候,几乎有无穷多个不同的字符串可以产生完全相同的散列值。但对于一个好的密码散列函数而言,在实践中应该很难有两个可理解的字符串散列相同的值。

散列函数通常产生恒定大小的摘要。许多算法产生很小的摘要,但算法安全性很大程度上取决于结果摘要的大小(推荐选择那些提供不小于128位摘要的算法)。如SHA-1提供160位散列,是一种可以使用的好散列函数。

此外,还可以使用散列函数来确保数据完整性,这很像传统的校验和。如果公开发布一个文档的有规律密码散列(假设知道散列算法),则任何人都可以检验该散列。人们在实践中使用的大多数散列算法,都是公开发布和为人所熟知的。

(3)因特网分发

在因特网上软件包的分发情况,以前通过FTP得到的软件包主要是与校验和关联的,其总体思想是下载软件之后,再运行一个程序来计算的校验和版本。这样,就可以将自行计算的校验和与FTP网站上得到的校验和进行比较,以确定两者匹配并确保传输连接上的数据完整性。

这种过时的方法起不到多少加密效果。首先,有许多校验和技术可以恶意修改下载程序,并可能导致修改过的程序产生完全相同的校验和。其次,带有其相关联(保护极差)校验在网站上发布。密码散列函数可以用做老式校验和算法的替代物。