计算机网络安全技术研究
上QQ阅读APP看书,第一时间看更新

第二节 信息加密的实现原理

密钥是为了有效控制加密、解密算法的实现而设置的,在这些算法的实现过程中,需要有某些只被通信双方所掌握的专门的、关键的信息参与,这些信息就称为密钥。加密在许多场合集中表现为对密钥的应用,因此密钥往往是保密与窃密的主要对象。

在现代计算机网络中一般采取两种加密形式:对称密钥(又称单密钥、私钥)体系和非对称密钥(又称公开密钥、公钥)体系。采用何种加密算法要结合具体的环境和系统而定,而不能简单地根据加密强度来做出判断和选择。因为除了加密算法本身之外,密钥的合理分配、加密效率、与现有系统的结合性,以及投入产出分析等都应在实际应用环境中具体考虑。

就公开密钥加密体系而言,关键部分是建立在“单向函数和活门”的基础之上的。所谓“单向函数”是指一个函数很容易朝一个方向计算,但很难(甚至不可能)逆向回溯。所谓“活门”是指一种可供回溯的“小道”。

为使单向函数能有效地应用于加密系统,它必须有能力对任何输入都进行这样的单向计算。例如,在一个有限的范围内,很容易计算出数字的乘积,但却很难分解出生成那个乘积的各个乘数因子。另一个实际应用的例子是离散对数问题:一个大质数p,以及一个底数g,对于已知的一个特定值y,求指数x,如下所示。

gx=y mod p

模指数很容易便可计算出来,但假若想通过一次离散对数运算恢复原来的指数,却是异常艰难的。对于每一类数字,如奇数、回文数字、可用47除尽的数字,其离散对数问题(Discrete Logarithm Problem)如何解决至今仍然非常困难。类似的还有n级多项mod p计算问题、乘法因子分解问题和背包问题(Knapsack Problem)等。至今还没有找出一个真正的单向函数,但某些函数拥有单向函数的一些属性,所以通常将它们也称为“单向函数”。

在现代加密技术中,一般将单向散列函数应用于身份验证及完整性校验。单向散列函数不同于单向函数。散列函数采用一条长度可变的消息作为输入,对其进行压缩,再产生一个长度固定的摘要信息,一致的输入会产生一致的输出。由于对任何长度的输入来说,输出信息的长度是固定的,所以显而易见,对一种散列算法H来说,可能存在两个不同的输入,如X和Y,但它们的摘要信息H(X)和H(Y)却相同,这样便会产生冲突。单向散列函数的设计宗旨便是尽可能地降低这种冲突的发生。

当今流行的散列函数是MD5(Message Digest 5,消息摘要5)、SHA(Secure Hash Algorithm,安全散列算法)和RIPE MD。尽管它们生成的摘要长度不同,运算速度不同,抗冲突特性也不同,但都是目前所广泛采用的。

另外一种经常用到的技术是简单的“异或”(XOR)函数。它既不是单向函数,也不是活门函数,但同样是构建加密系统一种有用的工具。有基本数学知识的人都知道,两个0进行XOR运算的结果是0,两个1进行XOR运算还是0,而一个0和一个1的XOR运算结果是1。XOR运算一个非常重要的特点就是它的交替性,取得任何数据后,用长度固定的一个Key值对其执行XOR运算,得到结果后,再用同样的Key值对结果执行XOR运算,便能恢复为原来的数据。这其实就是一种非常简化的“加密”算法,但要注意只要知道了一组输入或输出对数据,就马上能推断出密钥。

数据的机密性是由加密算法提供的。算法将一条正常的消息(明文)转换成乱码(密文),再将乱码转换回正常的消息,实现加密(编码)和解密(译码)的过程。有些加密算法是对称的,即用来加密的可同样用来解密,而另一些算法是不对称的。不对称算法虽然有两个独立的函数(一个用于加密,另一个用于解密),但人们并不将其看作两个算法,而是当作单独的一种算法。因此,无论一种特定算法的“对称性”如何,加密算法都是可以交替(双向)使用的,即

明文=解密函数(加密函数(明文))

目前实用的加密技术使用若干种不同的算法。但基本的只有两种:一种是使用密钥,另一种是使用算法(本身不依赖于密钥)。

不使用密钥的加密技术十分简单,通过替换或编码以达到加密目的。例如,可以通过给每一个字母的ASCII值加上一个数来加密一组英文信息,如图1.2所示。这种算法实际上并不那么安全,它们很容易被破译,一旦知道了加密算法,就能够破译加密过的信息。

图1.2 依赖变换算法的信息加密

一些更安全的加密算法是将数据与一种密钥配合使用。两种主要的加密算法是对称密钥加密和公开密钥加密。在以后的章节中将会具体讨论。

就对称密钥加密算法而言,算法中只存在一个密钥。同一个密钥被用于加密、解密过程。为了保证安全,必须保护好这个密钥而且确保只有一个人知道。私有密钥加密的另一个特点就是其使用的密钥长度一般都比较短,这使得它的算法实现比非对称加密要快,也要容易一些。对称密钥的一个主要缺陷是需要将密钥分配给每个需要的人,这样密钥分配和管理本身就是一个大问题。另外,如果暴露或损坏密钥,那么就等于暴露或损坏了用它加密过的信息,因此,有必要经常更改密钥。如果只有对称密钥方案,建议将其与数字签名一同使用,因为这样会更加有效也更加安全。