加密算法
评估一种加密算法安全性最常用的方法是判断该算法是不是计算安全的。如果利用可用资源进行系统分析后无法攻破系统,那么这种加密算法就是计算安全的。目前有两种常用的加密类型:对称加密和非对称加密。除了加密整条消息,两种加密类型都可以用来对一个文档进行数字签名。当使用一个足够长的密钥时,密码被破解的难度就会越大,系统也就越安全。当然,密钥越长,本身加解密的成本也就越高。
19.2.1对称加密
对称加密指的是加密和解密算法都使用相同密钥的加密算法。具体如下。
E(p,k)=C;D(C,k)=p(3)
其中:
·E表示加密算法。
·D表示解密算法。
·p表示明文(原始数据)。
·k表示加密密钥。
·C表示密文。
由于在加密和解密数据时使用了同一个密钥,因此这个密钥必须保密。这样的加密也称为秘密密钥算法,或单密钥算法/常规加密。很显然,对称加密算法的安全性依赖于密钥,泄露密钥就意味着任何人都可以对它们发送或接收的消息进行解密,所以密钥的保密性对通信的安全性至关重要。
对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。
不足之处是,交易双方都使用相同的密钥,安全性得不到保证。此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一密钥,这会使得通信发收双方所拥有的密钥数量呈几何级数增长,密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。而与非对称密钥加密算法比,对称加密算法虽然能够提供加密和认证,但缺乏签名功能,使得其使用范围有所缩小。
常见的对称加密算法有DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等。
19.2.2使用对称密钥加密的数字签名
在通过网络发送数据的过程中,有两种对文档进行数字签名的基本方法。在这里我们讨论第一种方法,利用对称密钥加密法。数字签名也称为消息摘要(Message Digest)或数字摘要(DigitalDigest),它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生。如果消息在途中改变了,则接收者通过对收到的消息新产生的摘要与原摘要比较,就可以知道消息是否被改变了。因此消息摘要保证了消息的完整性。消息摘要采用单向Hash函数将需加密的明文“摘要”成一串128bit的密文,这一串密文也称为数字指纹(Finger Print),它有固定的长度,并且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。这样这串摘要便可成为验证明文是不是“真身”的“指纹”了。有两种方法可以利用共享的对称密钥来计算摘要。最简单、快捷的方法是计算消息的哈希值,然后通过对称密钥对这个数值进行加密。消息和已加密的摘要一起发送。接收者可以再次计算消息摘要,对摘要进行加密,并与接收到的加密摘要进行比较。如果这两个加密摘要相同,那就说明该文档没有被改动。第二种方法将对称密钥应用到消息上,然后计算哈希值。
计算公式如下。
D(M,K)(4)
其中,D是摘要函数;M是消息;K是共享的对称密钥。
然后可以发布或分发这个文档。由于第三方并不知道对称密钥,而计算正确的摘要值恰恰需要它,因此消息摘要能够避免对摘要值自身的伪造。在这两种情况下,只有那些了解秘密密钥的用户才能验证其完整性,所有欺骗性的文档都可以很容易地被检验出来。消息摘要算法有:MD2、MD4、MD5、SHA-1、SHA-256、RIPEMD128、RIPEMD160等。
19.2.3非对称加密
非对称加密(也称为公钥加密)由两个密钥组成,包括公开密钥(Public Key,公钥)和私有密钥(Private Key,私钥)。如果消息使用公钥进行加密,那么通过使用相对应的私钥可以解密这些消息,过程如下。
E(p,ku)=C;D(C,kr)=p(5)
其中:
·E表示加密算法。
·C表示密文。
·D表示解密算法。
·p表示明文(原始数据)。
·ku表示公钥。
·kr表示私钥。
如果消息使用私钥进行加密,那么通过使用其相对应的公钥可以解密这些消息,过程如下。E(p,kr)=C;D(C,ku)=p(6)
其中:
·E表示加密算法。
·C表示密文。
·D表示解密算法。
·p表示明文(原始数据)。
·ku表示公钥。
·kr表示私钥。
不能使用加密所用的密钥来解密一个消息。而且,由一个密钥计算出另一个密钥从数学上来说是很困难的。私钥只有用户本人知道,因此得名。公钥并不保密,可以通过公共列表服务获得,通常公钥是使用X.509实现的。公钥加密的想法最早是由Diffie和Hellman于1976年提出的。
非对称加密与对称加密相比,其安全性更好。对称加密的通信双方使用相同的密钥,如果一方的密钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对密钥,一个用来加密,一个用来解密,而且公钥是公开的,私钥是自己保存的,不需要像对称加密那样在通信之前要先同步密钥。
非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
在非对称加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。
19.2.4使用公钥加密的数字签名
用于数字签名的公钥加密使用RSA算法。在这种方法中,发送者利用私钥通过摘要函数对整个数据文件(代价昂贵)或文件的签名进行加密。私钥匹配最主要的优点就是不存在密钥分发问题。这种方法假定你信任发布公钥的来源。然后接收者可以利用公钥来解密签名或文件,并验证它的来源和(或)内容。由于公钥密码学的复杂性,因此只有正确的公钥才能够解密信息或摘要。最后,如果你要将消息发送给拥有已知公钥的用户,那么你就可以使用接收者的公钥来加密消息或摘要,这样只有接收者才能够通过他们自己的私钥来验证其中的内容。