王曉英
(赤峰學院 數學學院,內蒙古 赤峰 024000)
數據加密基本方法
王曉英
(赤峰學院 數學學院,內蒙古 赤峰 024000)
本文對數據加密的概念和方法進行了介紹,首先概述了數據加密的起源和發展,其次介紹了密碼系統的概念、分類以及密碼分析方法,最后對分組密碼進行了全面的概述,包括工作模式、設計原則以及現有結構等.
數據加密;密碼系統;算法;模式
數據加密在網絡安全中起著重要作用.在缺乏保護的情況下,用戶在網絡上存儲和傳輸的任何信息,都存在被篡改和泄露的可能性.這就要求我們不僅需要保護商業通信中的經濟信息,而且還需要個人信息.因此,世界上許多大公司和研究機構,都在致力于解決國際互聯網上的安全問題的研究.
安全問題解決不好,小到個人利益受損,大到國家巨額財富流失.鑒于數據信息安全越來越重要,以近代密碼學為基礎的數據加密技術應運而生,并快速發展.從D E S、M D 5到R S A,再到橢圓曲線加密、混沌加密,以及最先進的量子加密,無不說明數據加密在信息傳輸中的重要地位.
在計算機中,我們經常需要一種措施來保護我們的數據,防止被一些懷有不良用心的人所看到或者破壞.于是,我們需要對數據進行加密處理,使得非法途徑獲得數據的人無法破譯[3].
數據加密過程可以簡單概括成:“把數據A表達成B”;而反加密過程(破譯或解密)是:“把數據B恢復成A”.
數據加密的術語包括:“明文”指原始的或未加密的數據;“密文”指明文加密后的形式,是加密算法的輸出信息,無密鑰的用戶無法理解,用于數據的存儲以及傳輸.
加密算法通常是公開的,如果算法的保密性是基于算法的保密,這種算法稱為受限制的算法.受限制的算法具有歷史意義,但按現代密碼學的標準,其保密性遠遠不夠.而且,受限制的密碼算法不可能進行質量控制或標準化.每個用戶組織必須有他們自己的唯一算法.這樣的組織不可能采用流行的硬件或軟件產品.但竊聽者卻可以買到這些流行產品并學習算法,于是用戶不得不自己編寫算法并予以實現,如果這個組織中沒有好的密碼學家,那么他們就無法知道他們是否擁有安全的算法.所以受限制加密算法不能廣泛應用.
2.1 數據加密的起源數據加密技術起源于古代的密碼學.密碼到底產生于何時,很難給出確切時間,但是在人類社會產生之初,就有了暗號的使用,它是密碼學的雛形.密碼的使用和人類擁有文字的時間幾乎一樣長.
在我國可以考證的文獻里面[4],戰國時代己經有了密碼的使用,特使在送信的時候,會將特殊約定的文書(已經不是明文),拆分成三段,由三個不同的信使分三路送往目的地,這樣即便其中一部分文書被截獲,也不會被識破其玄機.國外關于密碼的應用也可追溯到4000年前的古巴比倫.
2.2 密碼的發展
從古至今,密碼學的發展己經有幾千年的歷史,隨著密碼學的發展其應用范圍也越來越廣,包括軍事、外交、商業、網絡以及人們的日常生活的各個領域.同時隨著集成電路、計算機和通信技術的飛速發展以及網絡技術的廣泛應用,基于公共通信設施和計算機網絡的個人通信、多媒體通信、電子郵件、電子自動轉賬系統和自動零售業務網得以蓬勃發展,信息的安全和保護問題顯得愈發重要.雖然密碼學的研究已有數千年的歷史,但是直到1949年,S h a n n o n發表的“保密系統的信息理論”為私鑰密碼體制建立了理論基礎,密碼學從此成為一門科學[5].
密碼學作為保護信息的手段,經歷了三個發展時期.它最早應用在軍事和外交領域,隨著科技的發展而逐漸進入人們的生活中.在手工階段,人們只需通過紙和筆對字符進行加密.隨著工業革命的興起,密碼學也進入了機器時代、電子時代.與人手操作相比,電子密碼機使用了更優秀復雜的加密手段,同時也擁有更高的加密解密效率.其中最具有代表性的就是E N I G M A.E N I G M A是德國在1919年發明的一種加密電子器,它被證明是有史以來最可靠的加密系統之一.二戰期間它開始被德軍大量用于鐵路、企業當中,使德軍保密通訊技術處于領先地位.在這個時期雖然加密設備有了很大的進步,但是密碼學的理論卻沒有多大的改變,加密的主要手段仍是替代和換位.
計算機的出現使密碼進行高度復雜的運算成為可能[6].直到1976年,為了適應計算機網絡通信和商業保密要求產生的公開密鑰密碼理論,密碼學才在真正意義上取得了重大突破,進入近代密碼學階段.近代密碼學改變了古典密碼學單一的加密手法,融入了大量的數論、幾何、代數等豐富知識,使密碼學得到更蓬勃的發展.
到了現在,世界各國仍然對密碼的研究高度重視,已經發展到了現代密碼學時期.密碼學己經成為結合物理、量子力學、電子學、語言學等多個專業的綜合科學,出現了如“量子密碼”、“混沌密碼”等先進理論,在信息安全中起著十分重要的角色.
一個密碼系統通常由以下幾個部分組成:
圖1 一般密碼系統的構成
(1)明文空間M,它是全體明文的集合. (2)密文空間C,它是全體密文的集合.
(3)密鑰空間K,它是全體密鑰的集合.其中每一個密鑰K均由加密密鑰K和解密密鑰K'組成,既K=
(4)加密算法E,它是一族由M到C的加密變換. (5)解密算法D.它是一族由C到M的解密變換.
對于明文空間M中的每一個明文M,加密算法E在密鑰K的控制下將明文M加密成密文C=E(M,K),而解密算法D在密鑰K'的控制下將密文C解密出同一明文M:M=D (C,K')=D(E(M,K),K').對于每一個確定的密鑰,加密算法將確定一個具體的加密變換,解密算法將確定一個具體的解密變換,且解密變換是加密變換的逆變換.
4.1 根據密鑰分
通常,基于密鑰的算法,密碼系統分為兩類:對稱算法和公開密鑰算法.
對稱算法表現為:K=K’,就是加密密鑰能夠從解密密鑰中推算出來,反過來也成立.在大多數對稱算法中,加、解密的密鑰是相同的.這些算法也叫做私鑰算法或單密鑰算法,它要求發送者和接收者在安全通信之前,商定一個密鑰.對稱算法的安全性依賴于密鑰,泄漏密鑰就意味著任何人都能對消息進行加懈密.只要通信需要保密,密鑰就必須保密.對稱算法的原理比較直觀,計算處理的速度快,有廣泛的應用.典型的算法主要有R C 2,R C 4,D E S,T E A等.
公開密鑰算法(非對稱算法)用做加密的密鑰不同于用做解密的密鑰,而且解密密鑰不能根據加密密鑰計算出來(至少在合理假定的長時間內).之所以叫做公開密鑰算法,是因為加密密鑰能夠公開,即陌生者能夠用加密密鑰加密信息,但只有用相應的解密密鑰才能解密信息.加密密鑰叫做公開密鑰,解密密鑰叫做私人密鑰.公開密鑰算法比較復雜,需要大量的計算工作,不太適合對大信息量內容進行處理.因此,通常僅使用此方法對重要信息進行加密.目前主要使用R S A等公開密鑰方法.
對稱加密算法實現簡單,處理速度快,但對密鑰管理的保密性要求很高;公開密鑰算法不需要經過安全渠道傳遞密鑰,簡化了對密鑰的管理,但運算量大、處理速度慢.
4.2 根據明文的處理方式分
根據對明文的處理方式和密鑰的使用不同,可將密碼體制分為分組密碼和序列密碼.
分組密碼是將明文按一定的位長分組,明文組和密鑰全部經過加密運算得到密文組,解密時密文組和密鑰經過解密運算還原成明文組.這個固定長度被叫做塊大小,塊越大,保密性能越好,但加解密的算法和設備就越復雜,塊的大小一般為64或128字節.典型的分組密碼標準有D E S、I D E A、A E S和T E A等.
序列密碼是一次只對明文中的單個位 (有時對字節)運算的算法.加密時,將一段類似于噪聲的偽隨機序列與明文序列模2加后作為密文序列,這樣即使對于一段全“0”或全“1”的明文序列,經過序列密碼加密后也會變成類似于隨機噪聲的混亂序列.在接收端,用相同的隨機序列與密文序列模2加便可恢復明文序列.序列密碼的優點是運算速度快,缺點是密鑰變換過于頻繁,密鑰分配較難.應用最廣泛的序列密碼為R C 4.
序列密碼的加密、解密算法簡單,適合于硬件實現,但加密時對每一位數據都進行耗時的位操作,不適合軟件實現.分組密碼由于具有易于標準化和便于軟硬件實現等固有的特點,在網絡安全中更加通用,但加密算法的保密性及復雜度受到塊大小的約束.
密碼分析是在不知道密鑰的情況下,恢復出明文.成功的密碼分析能恢復出消息的明文或密鑰.密碼分析也可以發現密碼體制的弱點.
常用的密碼分析攻擊有6類[4],每一類都假設密碼分析者知道所用的加密算法的全部知識:
5.1 密文攻擊.分析者有一些消息的密文,這些消息都用同一加密算法加密.密碼分析者的任務是恢復盡可能多的明文,或者最好是能推算出加密消息的密鑰,以便可采用相同的密鑰解除其他被加密的消息.
5.2 已知明文攻擊.分析者不僅可得到一些消息的密文,而且也知道這些消息的明文.分析者的任務就是用加密信息推出用來加密的密鑰或導出一個算法,此算法可以對用同一密鑰加密的任何新的消息進行解密.
5.3 選擇明文攻擊.分析者不僅可得到一些消息的密文和相應的明文,而且他們也可選擇被加密的明文.這比已知明文攻擊更有效.因為密碼分析者能選擇特定的明文塊去加密,那些塊可能產生更多關于密鑰的信息,分析者的任務是推出用來加密消息的密鑰或導出一個算法,此算法可以對用同一密鑰加密的任何新的消息進行解密.
5.4 自適應選擇明文攻擊.這是選擇明文攻擊的特殊情況.分析者不僅能選擇被加密的明文,而且也能基于以前加密的結果修正這個選擇.在選擇明文攻擊中,密碼分析者還可以選擇一大塊被加密的明文.而在自適應選擇密文攻擊中,可選取較小的明文塊,然后再基于第一塊的結果選擇另一明文塊,以此類推.
5.5 選擇密文攻擊.密碼分析者能選擇不同的被加密的密文,并可得到對應的解密的明文,例如密碼分析者存取一個防竄改的自動解密盒,密碼分析者的任務是推出密鑰.這種攻擊主要用于公開密鑰算法,有時也可有效地用于對稱算法.
5.6 選擇密鑰攻擊.這種攻擊并不表示密碼分析者能夠選擇密鑰,它只表示密碼分析者具有不同密鑰之間的關系的有關知識.
衡量一個密碼系統的安全性有兩種基本方法,一是實際安全性,二是理論安全性.一個密碼,如果無論密碼分析者截獲多少密文,用什么技術都無法破譯,則稱該密碼系統理論上是安全的.這是香農著名的“一次一密”密碼.如果一個密碼,破譯該系統所需要的努力超過了敵手的破譯能力(如時間、空間和資金等資源),或破譯該系統的難度等價于解數學上的某個已知難題,則稱該密碼系統在實際中是安全的.對于我們更有意義的是實際不可破譯的密碼系統.
從目前的情況來看,使用傳統的方法進行加密容易被破解.如廣泛使用的m序列,只需知道2 n個比特(n為寄存器的級數)的碼元就能破譯該系統.再比如,美國的加密標準D E S(56比特)已經于1997年6月17日被攻破.另據報道1024比特的R S A也可能在2010年被攻破.由此可見,網絡信息安全領域急切希望擁有更安全、方便、有效的信息保護手段.目前國際上正在探討使用一些非傳統的方法進行信息加密與隱藏,其中混沌理論就是被采納和得到廣泛研究的方法之一.
密碼技術是信息安全技術的核心,它主要由密碼編碼技術和密碼分析技術兩個分支構成.密碼編碼技術的主要任務是尋求產生安全性高的有效密碼算法和協議,以滿足對消息進行加密認證的要求.密碼分析技術的主要任務是破譯密碼或偽造論證信息,實現竊取機密信息或進行詐騙破壞活動.根據被加密明文的處理方式不同,密碼體制可分為分組密碼(B l o c kC i p h e r)和序列密碼(S t r e a m C i p h e r).在應用密碼學中分組密碼顯得更加重要[3],這主要是因為:(1)分組密碼容易被標準化,因為在今天的數據網絡通信中,信息通常是被成塊地處理和傳輸的;(2)使用分組密碼容易實現同步,因為一個密文組的傳輸錯誤不會影響其它組,丟失一個密文組不會對隨后組的正確解密產生影響.這就是說,傳輸錯誤不會擴散.而這恰恰是序列密碼的缺陷;(3)由于兩個數據加密標準D E S和A E S的廣泛使用,促進了分組密碼的發展.
分組密碼是一個密鑰控制下的變換,該變換把一個明文(密文)分組轉換成一個密文(明文)分組.分組密碼將明文消息P劃分成相繼的數據塊P1、P2、…,并將每個Pi用同一密鑰加密,每組的比特長度稱為分組長度,通常為8的倍數,譬如D E S和I D E A密碼的分組長度均為64比特.
6.1 分組密碼的工作模式
在實際應用中,分組密碼體制的安全性往往還取決于加密算法的工作模式,它通常由基本密碼、一些反饋和一些簡單運算組合而成.目前已提出了多種分組密碼的工作模式,比如電子密碼本(E C B)模式、密碼分組鏈接(C B C)模式、密碼反饋(C F B)模式、輸出反饋模式(O F B)、級聯模式(C M)、計數器模式、分組鏈接模式 (B C)、擴散密碼分組鏈接模式( (P C B C)、明文差分的密文分組鏈接模式(C B C P D)和非線性函數輸出反饋模式(O F B N L F)等,但其中最主要和最基本的模式有4種,即E C B、C B C、C F B、O F B模式.
6.2 分組密碼的設計原則
一個好的分組密碼應該是既難破譯又容易實現,加密函數E(*,k)和解密函數D(*,k)都必須是很容易計算的,但是要從方程c=E(p,k)和p=D(c,k)中解出密鑰k是一個很困難的問題.一般而言,在設計分組密碼時應遵循以下幾條原則[7]:6.2.1安全性
安全性是分組密碼的最重要的設計準則,它要求即使攻擊者知道分組密碼的內部結構,仍不能破譯該密碼.這也意味著,不存在針對該密碼的某種攻擊方法,其工作量小于窮檢索密鑰.概括的說就是從任何角度都難以攻破.其中兩個最重要的角度是:(1)對于一個正在使用的加密算法,即使攻擊者獲得許多精心選擇的“明文、密文”對,他仍無法“接近”密鑰:(2)即使攻擊者獲得許精心選擇的“明文、密文”對,他仍無法“接近”一個新密文所對應的明文.
6.2.2 有效性
效率準則與安全準則互補,它是指在執行加、解密時所需要占用的資源量,是另一個值得考慮的問題.分組密碼算法不是各種計算部件的任意堆積,而是一種精巧的組合,使其在滿足安全性的同時盡可能簡單快速.
6.2.3 透明性和靈活性
透明性是要求算法是可證明安全的,其安全強度與迭代次數的關系盡可能地容易分析.這就要求算法盡可能使用通用部件,避免黑盒.靈活性是要求算法的實現可以適應多種計算環境;明文分組長度可以伸縮;算法可以移植和變形. 6.2.4加、解密相似性
加、解密相似即加密算法和解密算法相同,僅僅密鑰編排不同.這就是說,如果記E(*,K)和D(*,K)為使用密鑰K的加密算法和解密算法,則對任意密鑰K,存在密鑰K*,使得D(*,K)=E(*,K).加解密相似性的好處是大大節省存儲空間和其它計算資源,并大幅降低成本.這也是分組密碼設計所追尋的方向.
6.3 分組密碼的結構
分組密碼算法不應是各種計算部件的隨意堆積,而應是一種精巧的組合.對于不同的設計思路,有不同的組合方式.設計的關鍵在于如何實現混亂與擴散.分組密碼的結構類型通常可分為[8]:
6.3.1 代替置換結構(SPN網絡)
由Feistel等人首先提出代替置換結構(SPN)(如圖2所示),由多個子代替非線性變換((S盒)迭代輪和簡單的比特置換組成,能有效的實現Shannon所描述的混亂與擴散.通過設計不同的代替與置換部件,就能很容易的得到不同的密碼系統.在這種算法的每一輪中,首先輪輸入被作用于一個山子密鑰控制的可逆函數S,然后再被作用于一個置換(或一個可逆的線性變換).SPN的結構非常清晰,S一般被稱為混淆層,主要起混淆的作用.P一般被稱為擴散層,勝要起擴散作用.在明確S和P的某些密碼指標后,設計者能估計SPN型密碼抵抗差分密碼分析和線性密碼分析的能力.許多密碼分析方法對迭代密碼的第一輪和最后一輪的處理方法與中間輪不一樣,一般都是首先猜測幾比特密鑰,然后剝去密碼的第一輪和最后一輪,再將攻擊施加于剩下的輪上.有鑒于此,為提高密碼的安全性,我們認為可以對第一輪和最后一輪特殊對待,給第一輪加一個密鑰控制的前期變換,給最后一輪加一個密鑰控制的后期變換.例如,MARS和E2等算法都采用了這樣的措施.
圖2 三輪SPN結構(分組長度16比特,4*4S盒)
在傳統的分組密碼算法中,采用SPN結構的比較多,如SAFER、SHARK和SQUARE都是基于SPN結構的分組密碼.
6.3.2 Feistel結構
Feistel密碼是一類特殊的迭代分組密碼,是由Horst Feistel在設計Lucifer分組密碼時發明的.由于DES中也采用了Feistel結構(圖3所示),Feistel密碼有時也叫DES型密碼.在一個Feistel密碼中,一個明文分組被分割成兩部分(在DES中為兩個相等的部分).在子密鑰的作用下,輪函數f應用于其中的一部分,輪函數的輸出與另一部分做XOR運算,再將這兩部分交換.除第一輪和最后一輪沒有交換外,其余各輪都做相同的運算.Feistel密碼的一個非常好的特征是具有相同的加密和解密結構,只需使用與加密相反順序的子密鑰就可以輕松解密.當然也可以設計不含Feistel結構的迭代密碼,其加密和解密(使用適當幾次重復次序或計算)是相同的,如IDEA.
圖3 Feistel結構
許多分組密碼采用了Feistel結構,例如FEAL、GOST、LOKI、Blowfish和RC5等.對一個分組長度為2n比特的r輪Feistel型密碼,它的加密過程如下:
1)給定明文P,記P=L0R0,這里L0是P的左邊n比特,R0是P的右邊n比特;
2)進行r輪完全相同的運算后,在這里數據和密鑰相結合.則第i輪的消息分組LiRi由下式計算:
其中,茌表示兩個比特串的異或,F:GF(2)n×GF(2)n→GF(2)n是輪函數,K1,…,Kr是由種子密鑰K生成的子密鑰.
3)輸出密文C=RrLr.在加密的最后一輪.為了使算法同時用于加密、解密,略去“左右交換”.
“加解密相似”是Feistel密碼的實現優點,但Feistel密碼的擴散比較慢.例如,DES算法需要兩輪才能改變輸入的每個比特.
6.3.3 其它結構
還有很多運用其它結構的分組密碼,其中許多是基于一些有趣的理論基礎,如IDEA就是在不同的代數群上的混合運算,BEAR和LION采用的是3輪非平衡Feistel結構.最新的高級數據加密標準AES采用的就是一種被稱為密鑰交替的結構.
〔1〕楊義先,等.網絡信息安全與保密.北京:北京郵電大學出版社,1999.
〔2〕馮登國.國內外信息安全研究現狀及其發展趨勢.網絡安全技術與應用,2001(1):8-13.
〔3〕胡向東,魏琴芳.應用密碼學教程.北京:電子工業出版社,2005:1-100.
〔4〕章照止.現代密碼學基礎.北京:北京郵電大學出版社,2004:20-120.
〔5〕C.E.Shannon.Communication theory of secrecy systems.Bell System Technical Journal,1949,28(4):656-715.
〔6〕盧開澄.計算機密碼學——計算機網絡中的數據保密與安全(第3版).北京:機械工業出版社,2003:50-150.
〔7〕楊波.現代密碼學.北京:清華大學出版社,2003.
〔8〕M.Y.Rhce.Cryptography and Secure Communication,M cGraw-Hill Book Co.,1994.
T P 393.08
A
1673-260X(2010)07-0024-04