數據加密的術語是:明文,即原始的或未加密的數據。用加密算法加密,加密算法的輸入信息是明文和密鑰;密文是明文的加密格式,是加密算法的輸出信息。加密算法是公開的,但密鑰不是公開的。密文,沒有密鑰的用戶應該看不懂,用於數據存儲和傳輸。
示例:明文是壹個字符串:
當翠鳥著火時
(為簡單起見,假設處理的數據字符只有大寫字母和空格字符)。假設密鑰是壹個字符串:
姓氏
加密算法是:
1)將明文分成密鑰串長度的塊(空格用“+”表示)。
她的+著火了
2)用00~26範圍內的整數替換明文的每個字符,空格字符=00,A=01,...,Z = 26
0119001109 1407060919 0805181900 0301200308 0006091805
3)如步驟2中所述,替換密鑰的每個字符:
0512091520
4)對於每個明文塊,用對應的整數代碼和密鑰中對應位置的字符的整數代碼之和的模27之後的值替換每個字符:
5)用等價字符替換步驟4結果中的整數代碼:
FDIZB SSOXL MQ+GT HMBRA ERRFY
如果給定了密鑰,這個例子的解密過程就簡單了。問題是惡意攻擊者在不知道密鑰的情況下,通過使用匹配的明文和密文來獲取密鑰的難度有多大。對於上面這個簡單的例子,答案是相當容易的,壹般來說不容易,但是復雜的加密方式也很容易設計。理想情況下,采用的加密模式應該讓攻擊者為破解付出的代價大於他獲得的收益。事實上,這個目的適用於所有的安全措施。這種加密模式可以接受的終極目標是,即使是這種模式的發明者,也無法通過匹配明文和密文得到密鑰,從而無法破解密文。
1.數據加密標準
有兩種傳統的加密方法,替換和置換。上面的例子使用了另壹種方法:使用壹個密鑰將明文中的每個字符轉換成密文中的壹個字符。替換只是以不同的順序重新排列明文的字符。單獨使用這兩種方法中的任何壹種都不安全,但是結合使用這兩種方法可以提供相當高的安全性。數據加密標準(DES)采用這種組合算法,由IBM制定,於1977年成為美國官方加密標準。
DES的工作原理是將明文分成許多64位的塊,每個塊用壹個64位的密鑰加密。事實上,密鑰由56位數據位和8位奇偶校驗位組成,因此可能的密碼只有256個,而不是264個。首先用初始置換法對每個塊進行加密,然後連續進行16次復數置換,最後對其進行初始置換的逆運算。步驟I中的替換不是直接使用原始密鑰K,而是使用K和I計算出的密鑰Ki..
DES具有這樣的特性,除了以相反的順序應用密鑰Ki之外,其解密算法與加密算法相同。
2.公鑰加密
多年來,許多人認為DES並不真正安全。事實上,即使沒有智能方法,隨著快速、高度並行的處理器的出現,強行破解DES也是可能的。“公鑰”加密方法使DES和類似的傳統加密技術過時了。在公鑰加密方法中,加密算法和加密密鑰都是公開的,任何人都可以將明文轉換成密文。而對應的解密密鑰是保密的(公鑰法包括分別用於加密和解密的兩個密鑰),無法從加密密鑰推導出來,所以即使是加密器也無法在沒有授權的情況下進行對應的解密。
公鑰加密的思想最初是由Diffie和Hellman提出的,最著名的是Rivest、Shamir和Adleman。現在它通常被稱為RSA(以三位發明家的首字母命名),它基於以下兩個事實:
1)判斷壹個數是否為素數有壹個快速算法;
2)確定壹個合數的素因子的快速算法還沒有找到。
RSA方法的工作原理如下:
1)任意選擇兩個不同的大素數p和q並計算乘積r = p * q;
2)任意選擇壹個大整數e,e與(p-1)*(q-1)互質,整數e作為加密密鑰。註意:e的選取很容易,比如所有大於p和q的素數都有。
3)確定解密密鑰d:
d * e = 1模(p - 1)*(q - 1)
從e,p和q可以很容易地計算出d。
4)公開整數r和e,但不公開d;
5)將明文p(假設p是小於r的整數)加密成密文c,計算方法如下:
C = Pe模r
6)將密文c解密成明文p,計算方法如下:
P = Cd模r
但是,只從R和E(而不是P和Q)計算D是不可能的。因此,任何人都可以加密明文,但只有授權用戶(知道D)才能解密密文。
我們舉壹個簡單的例子來說明上面的過程。顯然,我們只能選擇極少數。
例:若p = 3,q = 5,則r=15,(p-1)*(q-1)=8。選擇e=11(大於P和Q的素數),由D * 11 = 1moduo8計算出d =3。
假設明文是13的整數。那麽密文c就是
C = Pe模r
= 1311模15
= 1,792,160,394,037模15
= 7
恢復的明文p是:
P = Cd模r
= 73模15
= 343模15
= 13
因為E和D是互易的,所以公鑰加密方法也允許加密的信息以這種方式被“簽名”,從而接收方可以確信簽名不是偽造的。假設A和B想通過公鑰加密傳輸數據,A和B分別公開了加密算法和對應的密鑰,但沒有公開解密算法和對應的密鑰。A和B的加密算法是ECA和ECB,解密算法是DCA和DCB,ECA和DCA互逆,ECB和DCB互逆。如果A要發送明文P給B,不是簡單的發送ECB(P),而是先將其解密算法DCA應用於P,然後用加密算法ECB將結果加密後發送出去。密文c是:
C =歐洲中央銀行
B收到C後,依次應用其解密算法DCB和加密算法ECA,得到明文P:
非洲經委會
= ECA(DCB(ECB(DCA(P)))
= ECA(DCA(P)) /*DCB和ECB相互抵消*/
= P /*DCB和ECB相互抵消*/
這樣,B就可以確定消息確實是從A發出的,因為只有加密過程使用DCA算法,P才能被ECA得到,而且只有A知道DCA算法,任何人,甚至B,都無法偽造A的簽名。