加密算法
評估一種加密算法安全性最常用的方法是判斷該算法是不是計算安全的。如果利用可用資源進行系統(tǒng)分析后無法攻破系統(tǒng),那么這種加密算法就是計算安全的。目前有兩種常用的加密類型:對稱加密和非對稱加密。除了加密整條消息,兩種加密類型都可以用來對一個文檔進行數(shù)字簽名。當使用一個足夠長的密鑰時,密碼被破解的難度就會越大,系統(tǒng)也就越安全。當然,密鑰越長,本身加解密的成本也就越高。
19.2.1對稱加密
對稱加密指的是加密和解密算法都使用相同密鑰的加密算法。具體如下。
E(p,k)=C;D(C,k)=p(3)
其中:
·E表示加密算法。
·D表示解密算法。
·p表示明文(原始數(shù)據(jù))。
·k表示加密密鑰。
·C表示密文。
由于在加密和解密數(shù)據(jù)時使用了同一個密鑰,因此這個密鑰必須保密。這樣的加密也稱為秘密密鑰算法,或單密鑰算法/常規(guī)加密。很顯然,對稱加密算法的安全性依賴于密鑰,泄露密鑰就意味著任何人都可以對它們發(fā)送或接收的消息進行解密,所以密鑰的保密性對通信的安全性至關(guān)重要。
對稱加密算法的特點是算法公開、計算量小、加密速度快、加密效率高。
不足之處是,交易雙方都使用相同的密鑰,安全性得不到保證。此外,每對用戶每次使用對稱加密算法時,都需要使用其他人不知道的唯一密鑰,這會使得通信發(fā)收雙方所擁有的密鑰數(shù)量呈幾何級數(shù)增長,密鑰管理成為用戶的負擔。對稱加密算法在分布式網(wǎng)絡(luò)系統(tǒng)上使用較為困難,主要是因為密鑰管理困難,使用成本較高。而與非對稱密鑰加密算法比,對稱加密算法雖然能夠提供加密和認證,但缺乏簽名功能,使得其使用范圍有所縮小。
常見的對稱加密算法有DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等。
19.2.2使用對稱密鑰加密的數(shù)字簽名
在通過網(wǎng)絡(luò)發(fā)送數(shù)據(jù)的過程中,有兩種對文檔進行數(shù)字簽名的基本方法。在這里我們討論第一種方法,利用對稱密鑰加密法。數(shù)字簽名也稱為消息摘要(Message Digest)或數(shù)字摘要(DigitalDigest),它是一個唯一對應(yīng)一個消息或文本的固定長度的值,它由一個單向Hash加密函數(shù)對消息進行作用而產(chǎn)生。如果消息在途中改變了,則接收者通過對收到的消息新產(chǎn)生的摘要與原摘要比較,就可以知道消息是否被改變了。因此消息摘要保證了消息的完整性。消息摘要采用單向Hash函數(shù)將需加密的明文“摘要”成一串128bit的密文,這一串密文也稱為數(shù)字指紋(Finger Print),它有固定的長度,并且不同的明文摘要成密文,其結(jié)果總是不同的,而同樣的明文其摘要必定一致。這樣這串摘要便可成為驗證明文是不是“真身”的“指紋”了。有兩種方法可以利用共享的對稱密鑰來計算摘要。最簡單、快捷的方法是計算消息的哈希值,然后通過對稱密鑰對這個數(shù)值進行加密。消息和已加密的摘要一起發(fā)送。接收者可以再次計算消息摘要,對摘要進行加密,并與接收到的加密摘要進行比較。如果這兩個加密摘要相同,那就說明該文檔沒有被改動。第二種方法將對稱密鑰應(yīng)用到消息上,然后計算哈希值。
計算公式如下。
D(M,K)(4)
其中,D是摘要函數(shù);M是消息;K是共享的對稱密鑰。
然后可以發(fā)布或分發(fā)這個文檔。由于第三方并不知道對稱密鑰,而計算正確的摘要值恰恰需要它,因此消息摘要能夠避免對摘要值自身的偽造。在這兩種情況下,只有那些了解秘密密鑰的用戶才能驗證其完整性,所有欺騙性的文檔都可以很容易地被檢驗出來。消息摘要算法有:MD2、MD4、MD5、SHA-1、SHA-256、RIPEMD128、RIPEMD160等。
19.2.3非對稱加密
非對稱加密(也稱為公鑰加密)由兩個密鑰組成,包括公開密鑰(Public Key,公鑰)和私有密鑰(Private Key,私鑰)。如果消息使用公鑰進行加密,那么通過使用相對應(yīng)的私鑰可以解密這些消息,過程如下。
E(p,ku)=C;D(C,kr)=p(5)
其中:
·E表示加密算法。
·C表示密文。
·D表示解密算法。
·p表示明文(原始數(shù)據(jù))。
·ku表示公鑰。
·kr表示私鑰。
如果消息使用私鑰進行加密,那么通過使用其相對應(yīng)的公鑰可以解密這些消息,過程如下。E(p,kr)=C;D(C,ku)=p(6)
其中:
·E表示加密算法。
·C表示密文。
·D表示解密算法。
·p表示明文(原始數(shù)據(jù))。
·ku表示公鑰。
·kr表示私鑰。
不能使用加密所用的密鑰來解密一個消息。而且,由一個密鑰計算出另一個密鑰從數(shù)學上來說是很困難的。私鑰只有用戶本人知道,因此得名。公鑰并不保密,可以通過公共列表服務(wù)獲得,通常公鑰是使用X.509實現(xiàn)的。公鑰加密的想法最早是由Diffie和Hellman于1976年提出的。
非對稱加密與對稱加密相比,其安全性更好。對稱加密的通信雙方使用相同的密鑰,如果一方的密鑰遭泄露,那么整個通信就會被破解。而非對稱加密使用一對密鑰,一個用來加密,一個用來解密,而且公鑰是公開的,私鑰是自己保存的,不需要像對稱加密那樣在通信之前要先同步密鑰。
非對稱加密的缺點是加密和解密花費時間長、速度慢,只適合對少量數(shù)據(jù)進行加密。
在非對稱加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(橢圓曲線加密算法)等。
19.2.4使用公鑰加密的數(shù)字簽名
用于數(shù)字簽名的公鑰加密使用RSA算法。在這種方法中,發(fā)送者利用私鑰通過摘要函數(shù)對整個數(shù)據(jù)文件(代價昂貴)或文件的簽名進行加密。私鑰匹配最主要的優(yōu)點就是不存在密鑰分發(fā)問題。這種方法假定你信任發(fā)布公鑰的來源。然后接收者可以利用公鑰來解密簽名或文件,并驗證它的來源和(或)內(nèi)容。由于公鑰密碼學的復(fù)雜性,因此只有正確的公鑰才能夠解密信息或摘要。最后,如果你要將消息發(fā)送給擁有已知公鑰的用戶,那么你就可以使用接收者的公鑰來加密消息或摘要,這樣只有接收者才能夠通過他們自己的私鑰來驗證其中的內(nèi)容。