加密技术源远流长,自从古代有了信息的传递和存储,就有了加密技术的运用。此后,很长一段时间里,加密及解密技术在军事 、 政治 、 外交 、 金融等特殊领域里被普遍采用,并经过长时间的研究和发展,形成了比较完备的一门学科 —— 密码学。密码学是研究加密方法 、 秘密通信的原理,以及解密方法 、 破译密码的方法的一门科学。
加密和解密的过程大致如下:首先,信息的发送方准备好要发送信息的原始形式,叫作明文。然后对明文经过一系列变换后形成信息的另一种不能直接体现明文含义的形式,叫作密文。由明文转换为密文的过程叫作加密。在加密时所采用的一组规则或方法称为加密算法。接收者在收到密文后,再把密文还原成明文,以获得信息的具体内容,这个过程叫作解密。解密时也要运用一系列与加密算法相对应的方法或规则,这种方法或规则叫作解密算法。
在加密 、 解密过程中,由通信双方掌握的参数信息控制具体的加密和解密过程,这个参数叫作密钥。密钥分为加密密钥和解密密钥,分别用于加密过程和解密过程。在加密和解密的过程中,如果采用的加密密钥与解密密钥相同,或者从一个很容易计算出另一个,则这种方法叫作对称密钥密码体制,也叫作单钥密码体制。反之,如果加密和解密的密钥并不相同,或者从一个很难计算出另外一个,就叫作不对称密钥密码系统或者公开密钥密码体制,也叫作双钥密码体制。
1 对称密钥加密算法
在过去很长一段时间里,人们一直都采用对称密钥密码体制来对信息进行加密和解密,直到现在,对称密钥密码体制也仍然是一种非常重要的常用加密方法。对称密钥密码体制中,加密和解密过程中所使用的是同一个密钥,或者即使加密密钥和解密密钥不同,但是很容易地由一个计算出另外一个。显然,在这种密码体制中,密钥成为整个秘密通信的核心,整个加密系统的安全性完全以密钥的保密为基础。如果密钥暴露,则整个密码体制就完全失去了保密的效果。所以说,密钥的保密是对称密钥加密体制安全保密的关键,必须妥善保存并经由可靠的渠道传递。
对称密钥加密算法有多种,例如, DES ( Data Encryption Standard ,数据加密标准) 、IDEA ( International Data Encryption Algorithm ,国际数据加密算法)、Skipjack、3DES 、GDES 、New DES 、Lucifer、FEALN、LOKI91、RC4、RC5等。
1.1 DES 算法
DES 算法是 1977 年美国政府公布的一种加密算法,由于算法实现简单,加密效果好,在很长时间里在全世界范围都被广泛运用。它通过对数据进行非常复杂的迭代和置换进行加密,使得企图破译者从加密后的密文中无法获得任何有效信息。对这种加密方法,如果用穷举的方法进行攻击的话,由一台一秒钟能够进行 10000 次破译的计算机来计算,则要经过 200 多年才能够破解,可见 DES 算法具有很好的保密效果。另外, DES 算法实现起来并不复杂,不但在软件中可以容易地实现,而且早已经在芯片上实现了,使用起来非常方便。
DES 算法的过程,简单来说,就是把要加密的明文分成 64 位的数据段作为输入,再使用根据 64 位密钥变化生成的 52 个子密钥,对输入的数据段依次进行初始置换 、 16 轮迭代 、 逆初始置换,然后得到 64 位密文。 DES 的解密过程与加密过程几乎相同,只是子密钥的使用顺序不一样。加密时依次使用的部分参数 K1K2K3…K16 ,在解密时则按照 K16K15K14…K1 顺序使用。其他算法完全一样,这也是 DES 容易使用的一个方面。
1.2 IDEA 算法
IDEA 在加密运算中所处理的数据段大小也是 64 位,但是所用的密钥长度为 128 位,而且采用更加复杂的加密算法,目的是保证它不会被轻易破译。
IDEA 是一种加密强度很高的加密算法,迄今为止还没有出现对该算法的有效攻击。假如一台计算机一秒钟可以产生和运行 10 亿个密钥,则要猜出 IDEA 密钥需要花费 1013年的时间,可见 IDEA 的加密强度非常高。
另外, IDEA 实现非常方便,既可以通过软件实现,也可以通过硬件实现。 IDEA 算法对数据的处理是以 64 位为单位的,在加密前把要加密的明文按每 64 位作为一个数据段进行分割然后分别加密。 IDEA 的解密过程与加密过程基本相同,所不同的就是解密子密钥的产生方式与加密子密钥的产生方式不一样,解密的其他运算过程同加密一样,也是把 64 位数据段分成4个 16 位的数据段,然后经过八轮迭代变换和一轮输出变换,就可以得到对应的明文结果。
2 不对称密钥加密算法
对称密钥加密方法是加密 、 解密使用同样的密钥,由发送者和接收者同时保存,在加密和解密时使用相同的密钥。采用这种方法的主要问题是密钥的生成 、 导入 、 存储 、 管理 、 分发等过程比较复杂,特别是随着用户的增加,密钥的需求量成倍增加。而在较大规模的信息系统中,大量密钥的分配与管理是一个难以解决的问题。例如,系统中有 n 个用户,其中每两个用户之间需要建立密码通信,则系统中每个用户须掌握( n -1)/2个密钥,而系统中所需的密钥总数为 n *( n -1)/2个。对 10 个用户的情况,每个用户必须有 9 个密钥,系统中密钥的总数为 45 个。对 100个用户来说,每个用户必须有 99 个密钥,系统中密钥的总数为4950个。这还仅仅考虑用户之间的通信只使用一种会话密钥的情况,如果不同的会话需要变换不同的密钥,则密钥总数就更多了。如此庞大数量的密钥生成 、 管理 、 分发是一个难以处理的问题。
与对称密钥加密方法不同,不对称密钥加密技术在对信息进行加密和解密时,需要分别采用两个不同的密钥,因此也称为双钥加密方法。它在运算中,先产生一对密钥,其中之一是保密密钥,由用户自己保存,不能向外界泄漏,简称私钥;另一个为公开密钥,可对外公开,甚至可在公共目录中列示,简称公钥,因此也称公开密钥加密方法。只有使用私钥才能解密用公钥加密的数据,同时使用私钥加密的数据只能用公钥解密。在通信过程中,如果发送者要向接收者发送保密信息,则需要先用接收者的公开密钥对信息进行加密,然后发送给该接收者,接收方用其私钥能够顺利解密。而其他人即使收到加密的密文也无法正确解读,从而达到保密通信的目的。
公开密钥加密方法中,要想达到良好的加密效果,算法上必须做到:在计算上产生密钥非常容易;已知公钥的情况下对明文加密在计算上很容易实现;已知私钥的情况下对密文解密在计算上很容易实现;尽管用于加密和解密的两个密钥在数学上是相关的,但是在已知公钥的情况下,要想求得私钥在计算上不可行;已知公钥和密文的情况下,要想求得明文在计算上不可行。只有做到以上几点,才能有效地防止攻击者对算法的破译。
不对称密钥加密算法有多种,例如, RSA 、 背包密码 、 McEliece、Diffe Hellman、Rabin、 Ong Fiat Shamir、 零知识证明的算法 、 椭圆曲线 、 EIGamal等。这里主要介绍 RSA 的加密原理。
在众多的公钥加密算法中,以1977年由Ron Rivest、Adi Shamir 和 Leonard Adleman 提出的以他们的名字命名的 RSA 加密算法最为著名。而且它是第一个既能用于数据加密也能用于数字签名的算法。 RSA 从提出到现在已经二十多年,经历了各种攻击的考验,逐渐为人们所接受,被普遍认为是目前优秀的公钥加密方法之一。由于它易于理解和操作,因而获得了广泛的应用。但 RSA 的安全性一直未能得到理论上的证明。
RSA 的安全性依赖于大数的分解,即求得两个大数(例如,大于 10 0位的十进制数)的乘积非常容易,但是要把一个大数分解为两个素数却非常困难。
在 RSA 加密体制中,每个用户有公开密钥 PK=( N , e) 和私人密钥 SK=( N , d ) ,其中, N 为两个大素数的乘积,为了保密性更好,一般都取两个 100 位以上的大素数相乘得到 N 。e和 d 是根据一定运算法则计算得到的,虽然 N 、e、 d 之间存在一定的计算关系,但是攻击者根据 N 、e无法求解 d ,从而实现不对称加密。
RS A 加密算法不仅可以用于信息的加密,而且还可以用于发送者的身份验证或数字签名。例如,用户 B 要向 A 发送一个信息 m ,而且要让 A 确信该信息就是 B 本人发出的。为此, B 用自己的私钥 SK=(N , d) 对信息加密得到密文 c ,然后把 c 发送给 A 。 A 收到密文后,使用 B 的公钥 PK=(N , e) 对密文进行解密得到明文。这样,经过验证, A 可以确认信息 m 确实是 B 发出的,因为只有 B 本人才有与该公钥对应的私钥,其他人即使知道公钥,也无法猜出或计算出 B 的私钥来冒充他发送加密信息。