考慮到用戶可能試圖旁路系統(tǒng)的情況,如物理地取走數(shù)據(jù)庫,在通訊線路上竊聽。對(duì)這樣的威脅有效的解決方法
就是數(shù)據(jù)加密,即以加密格式存儲(chǔ)和傳輸敏感數(shù)據(jù)。
數(shù)據(jù)加密的術(shù)語有:明文,即原始的或未加密的數(shù)據(jù)。通過加密算法對(duì)其進(jìn)行加密,加密算法的輸入信息為明文和
密鑰;密文,明文加密后的格式,是加密算法的輸出信息。加密算法是公開的,而密鑰則是不公開的。密文,不應(yīng)為無
密鑰的用戶理解,用于數(shù)據(jù)的存儲(chǔ)以及傳輸。
例:明文為字符串:
AS KINGFISHERS CATCH FIRE
(為簡便起見,假定所處理的數(shù)據(jù)字符僅為大寫字母和空格符)。假定密鑰為字符串:
ELIOT
加密算法為:
1) 將明文劃分成多個(gè)密鑰字符串長度大小的塊(空格符以”+”表示)
AS+KI NGFIS HERS+ CATCH +FIRE
2) 用00~26范圍的整數(shù)取代明文的每個(gè)字符,空格符=00,A=01,…,Z=26:
0119001109 1407060919 0805181900 0301200308 0006091805
3) 與步驟2一樣對(duì)密鑰的每個(gè)字符進(jìn)行取代:
0512091520
4) 對(duì)明文的每個(gè)塊,將其每個(gè)字符用對(duì)應(yīng)的整數(shù)編碼與密鑰中相應(yīng)位置的字符的整數(shù)編碼的和模27后的值取代:
5) 將步驟4的結(jié)果中的整數(shù)編碼再用其等價(jià)字符替換:
FDIZB SSOXL MQ+GT HMBRA ERRFY
如果給出密鑰,該例的解密過程很簡單。問題是對(duì)于一個(gè)惡意攻擊者來說,在不知道密鑰的情況下,利用相匹配的明文和密文獲得密鑰究竟有多困難?對(duì)于上面的簡單例子,答案是相當(dāng)容易的,不是一般的容易,但是,復(fù)雜的加密模式同樣很容易設(shè)計(jì)出。理想的情況是采用的加密模式使得攻擊者為了破解所付出的代價(jià)應(yīng)遠(yuǎn)遠(yuǎn)超過其所獲得的利益。實(shí)際上,該目的適用于所有的安全性措施。這種加密模式的可接受的目標(biāo)是:即使是該模式的發(fā)明者也無法通過相匹配的明文和密文獲得密鑰,從而也無法破解密文。 我們的u盤加密采用的是高強(qiáng)度的加密算法,從而保證數(shù)據(jù)的安全性。
1. 數(shù)據(jù)加密標(biāo)準(zhǔn)
傳統(tǒng)加密方法有兩種,替換和置換。上面的例子采用的就是替換的方法:使用密鑰將明文中的每一個(gè)字符轉(zhuǎn)換為密文中的一個(gè)字符。而置換僅將明文的字符按不同的順序重新排列。單獨(dú)使用這兩種方法的任意一種都是不夠安全的,但是將這兩種方法結(jié)合起來就能提供相當(dāng)高的安全程度。數(shù)據(jù)加密標(biāo)準(zhǔn)(Data Encryption Standard,簡稱DES)就采用了這種結(jié)合算法,它由IBM制定,并在1977年成為美國官方加密標(biāo)準(zhǔn)。
DES的工作原理為:將明文分割成許多64位大小的塊,每個(gè)塊用64位密鑰進(jìn)行加密,實(shí)際上,密鑰由56位數(shù)據(jù)位和8位奇偶校驗(yàn)位組成,因此只有256個(gè)可能的密碼而不是264個(gè)。每塊先用初始置換方法進(jìn)行加密,再連續(xù)進(jìn)行16次復(fù)雜的替換,再對(duì)其施用初始置換的逆。第i步的替換并不是直接利用原始的密鑰K,而是由K與i計(jì)算出的密鑰Ki。DES具有這樣的特性,其解密算法與加密算法相同,除了密鑰Ki的施加順序相反以外。
2. 公開密鑰加密
多年來,許多人都認(rèn)為DES并不是真的很安全。事實(shí)上,即使不采用智能的方法,隨著快速、高度并行的處理器的出現(xiàn),強(qiáng)制破解DES也是可能的。”公開密鑰”加密方法使得DES以及類似的傳統(tǒng)加密技術(shù)過時(shí)了。公開密鑰加密方法中,加密算法和加密密鑰都是公開的,任何人都可將明文轉(zhuǎn)換成密文。但是相應(yīng)的解密密鑰是保密的(公開密鑰方法包括兩個(gè)密鑰,分別用于加密和解密),而且無法從加密密鑰推導(dǎo)出,因此,即使是加密者若未被授權(quán)也無法執(zhí)行相應(yīng)的解密。公開密鑰加密思想是由Diffie和Hellman提出的,著名的是Rivest、Shamir以及Adleman提出的,現(xiàn)在通常稱為RSA(以三個(gè)發(fā)明者的首位字母命名)的方法,該方法基于下面的兩個(gè)事實(shí):
1) 已有確定一個(gè)數(shù)是不是質(zhì)數(shù)的快速算法;
2) 尚未找到確定一個(gè)合數(shù)的質(zhì)因子的快速算法。
RSA方法的工作原理如下:
1) 任意選取兩個(gè)不同的大質(zhì)數(shù)p和q,計(jì)算乘積r=pq;
2) 任意選取一個(gè)大整數(shù)e,e與(p-1)(q-1)互質(zhì),整數(shù)e用做加密密鑰。注意:e的選取是很容易的,例如,所有大于p和q的質(zhì)數(shù)都可用。
3) 確定解密密鑰d:
d e = 1 modulo(p – 1)(q – 1)
根據(jù)e、p和q可以容易地計(jì)算出d。
4) 公開整數(shù)r和e,但是不公開d;
5) 將明文P (假設(shè)P是一個(gè)小于r的整數(shù))加密為密文C,計(jì)算方法為:
C = Pe modulo r
6) 將密文C解密為明文P,計(jì)算方法為:
P = Cd modulo r
然而只根據(jù)r和e(不是p和q)要計(jì)算出d是不可能的。因此,任何人都可對(duì)明文進(jìn)行加密,但只有授權(quán)用戶才可對(duì)密文解密。
下面舉一簡單的例子對(duì)上述過程進(jìn)行說明,顯然我們只能選取很小的數(shù)字。
例:選取p=3, q=5,則r=15,(p-1)(q-1)=8。選取e=11(大于p和q的質(zhì)數(shù)),通過d 11 = 1 modulo 8,
計(jì)算出d =3。
假定明文為整數(shù)13。則密文C為
C = Pe modulo r
= 1311 modulo 15
= 1,792,160,394,037 modulo 15
= 7
復(fù)原明文P為:
P = Cd modulo r
= 73 modulo 15
= 343 modulo 15
= 13
因?yàn)閑和d互逆,公開密鑰加密方法也允許采用這樣的方式對(duì)加密信息進(jìn)行”簽名”,以便接收方能確定簽名不是偽造的。假設(shè)A和B希望通過公開密鑰加密方法進(jìn)行數(shù)據(jù)傳輸,A和B分別公開加密算法和相應(yīng)的密鑰,但不公開解密算法和相應(yīng)的密鑰。A和B的加密算法分別是ECA和ECB,解密算法分別是DCA和DCB,ECA和DCA互逆,ECB和DCB互逆。若A要向B發(fā)送明文P,不是簡單地發(fā)送ECB(P),而是先對(duì)P施以其解密算法DCA,再用加密算法ECB對(duì)結(jié)果加密后發(fā)送出去。
密文C為:
C = ECB(DCA(P))
B收到C后,先后施以其解密算法DCB和加密算法ECA,得到明文P:
ECA(DCB(C))
= ECA(DCB(ECB(DCA(P))))
= ECA(DCA(P)) /DCB和ECB相互抵消/
= P /DCB和ECB相互抵消/
這樣B就確定報(bào)文確實(shí)是從A發(fā)出的,因?yàn)橹挥挟?dāng)加密過程利用了DCA算法,用ECA才能獲得P,只有A才知道DCA算法,沒有人,即使是B也不能偽造A的簽名。