談起密碼演算法,有的人會覺得陌生,但一提起PGP,大多數網上朋友都很熟悉,它是一個工具軟體,向認證中心註冊後就可以用它對檔案進行加解密或數位簽章,PGP所採用的是RSA演算法,以後我們會對它展開討論。密碼演算法的目的是為了保護資訊的保密性、完整性和安全性,簡單地說就是資訊的防偽造與防竊取,這一點在網上付費系統中特別有意義。密碼學的鼻祖可以說是資訊理論的創始人香農,他提出了一些概念和基本理論,論證了只有一種密碼演算法是理論上不可解的,那就是 One Time Padding,這種演算法要求採用一個隨機的二進位序列作為密鑰,與待加密的二進位序列按位異或,其中密鑰的長度不小於待加密的二進位序列的長度,而且一個密鑰只能使用一次。其它演算法都是理論上可解的。如DES演算法,其密鑰實際長度是56位元,作2^56次窮舉,就肯定能找到加密使用的密鑰。所以採用的密碼演算法做到事實上不可解就可以了,當一個密碼演算法已知的破解演算法的時間複雜度是指數級時,稱該演算法為事實上不可解的。順便說一下,據報道國外有人只用七個半小時成功破解了DES演算法。密碼學在不斷髮展變化之中,因為人類的計算能力也像摩爾定律提到的一樣飛速發展。作為第一部分,首先談一下密碼演算法的概念。
密碼演算法可以看作是一個複雜的函數變換,C = F M, Key ),C代表密文,即加密後得到的字元序列,M代表明文即待加密的字元序列,Key表示密鑰,是秘密選定的一個字元序列。密碼學的一個原則是“一切秘密寓於密鑰之中”,演算法可以公開。當加密完成後,可以將密文通過不安全渠道送給收信人,只有擁有解密密鑰的收信人可以對密文進行解密即反變換得到明文,密鑰的傳遞必須通過安全渠道。目前流行的密碼演算法主要有DESRSA,IDEA,DSA等,還有新近的Liu氏演算法,是由華人劉尊全發明的。密碼演算法可分為傳統密碼演算法和現代密碼演算法,傳統密碼演算法的特點是加密和解密必須是同一密鑰,如DES和IDEA等;現代密碼演算法將加密金鑰與解密密鑰區分開來,且由加密金鑰事實上求不出解密密鑰。這樣一個實體只需公開其加密金鑰(稱公開金鑰,解密密鑰稱私密金鑰)即可,實體之間就可以進行秘密通訊,而不象傳統密碼演算法似的在通訊之前先得秘密傳遞密鑰,其中妙處一想便知。因此傳統密碼演算法又稱對稱密碼演算法(Symmetric Cryptographic Algorithms ),現代密碼演算法稱非對稱密碼演算法或公開金鑰密碼演算法( Public-Key Cryptographic Algorithms ),是由Diffie 和Hellman首先在1976年的美國國家電腦會議上提出這一概念的。按照加密時對明文的處理方式,密碼演算法又可分為分組密碼演算法和序列密碼演算法。分組密碼演算法是把密文分成等長的組分別加密,序列密碼演算法是一個位元一個位元地處理,用已知的密鑰隨機序列與明文按位異或。當然當分組長度為1時,二者混為一談。這些演算法以後我們都會具體討論。
RSA演算法
1978年就出現了這種演算法,它是第一個既能用於資料加密也能用於數位簽章的演算法。它易於理解和操作,也很流行。演算法的名字以發明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。但RSA的安全性一直未能得到理論上的證明。
RSA的安全性依賴於大數分解。公開金鑰和私密金鑰都是兩個大素數( 大於 100個十進位位)的函數。據猜測,從一個密鑰和密文推斷出明文的難度等同於分解兩個大素數的積。
金鑰組的產生。選擇兩個大素數,p 和q 。計算:
n = p * q
然後隨機播放加密金鑰e,要求 e 和 ( p - 1 ) * ( q - 1 ) 互質。最後,利用Euclid 演算法計算解密密鑰d, 滿足
e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) )
其中n和d也要互質。數e和n是公開金鑰,d是私密金鑰。兩個素數p和q不再需要,應該丟棄,不要讓任何人知道。
加密資訊 m(二進位表示)時,首先把m分成等長資料區塊 m1 ,m2,..., mi ,塊長s,其中 2^s <= n, s 儘可能的大。對應的密文是:
ci = mi^e ( mod n ) ( a )
解密時作如下計算:
mi = ci^d ( mod n ) ( b )
RSA 可用於數位簽章,方案是用 ( a ) 式簽名, ( b )式驗證。具體操作時考慮到安全性和 m資訊量較大等因素,一般是先作 HASH 運算。
RSA 的安全性。
RSA的安全性依賴於大數分解,但是否等同於大數分解一直未能得到理論上的證明,因為沒有證明破解 RSA就一定需要作大數分解。假設存在一種無須分解大數的演算法,那它肯定可以修改成為大數分解演算法。目前, RSA的一些變種演算法已被證明等價於大數分解。不管怎樣,分解n是最顯然的攻擊方法。現在,人們已能分解140多個十進位位的大素數。因此,模數n必須選大一些,因具體適用情況而定。
RSA的速度。
由於進行的都是大數計算,使得RSA最快的情況也比DES慢上100倍,無論是軟體還是硬體實現。速度一直是RSA的缺陷。一般來說只用於少量資料加密。