考慮用戶可能試圖繞過系統的情況,例如物理地拿走數據庫和竊聽通信線路。對這種威脅最有效的解決方案
是數據加密,即以加密格式存儲和傳輸敏感數據。
數據加密的術語是:明文,即原始的或未加密的數據。用加密算法加密,加密算法的輸入信息是明文和。
關鍵;密文,明文加密的格式,是加密算法的輸出信息。加密算法是公開的,但密鑰不是公開的。密文,不應該是無。
密鑰被用戶理解並用於數據存儲和傳輸。
示例:明文是壹個字符串:
當翠鳥著火時
(為簡單起見,假設處理的數據字符只有大寫字母和空格字符)。假設密鑰是壹個字符串:
姓氏
加密算法是:
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的簽名。