常用的加解密技術(2)

【公開密鑰體系】

公開密鑰密碼體制是現代密碼學的最重要的發明和進展。一般理解密碼學(Cryptography)就是保護信息傳遞的機密性。但這僅僅是當今密碼學主題的一個方面。對信息發送與接收人的真實身份的驗證、對所發出/接收信息在事後的不可抵賴以及保障數據的完整性是現代密碼學主題的另一方面。公開密鑰密碼體制對這兩方面的問題都給出了出色的解答,並正在繼續產生許多新的思想和方案。在公鑰體制中,加密密鑰不同於解密密鑰。人們將加密密鑰公之於衆,誰都可以使用;而解密密鑰只有解密人自己知道。迄今爲止的所有公鑰密碼體系中,RSA系統是最著名、使用最廣泛的一種。


1976年提出公共密鑰密碼體制,其原理是加密密鑰和解密密鑰分離。這樣,一個具體用戶就可以將自己設計的加密密鑰和算法公諸於衆,而只保密解密密鑰。任何人利用這個加密密鑰和算法向該用戶發送的加密信息,該用戶均可以將之還原。公共密鑰密碼的優點是不需要經安全渠道傳遞密鑰,大大簡化了密鑰管理。它的算法有時也稱爲公開密鑰算法或簡稱爲公鑰算法。

1978年提出公共密鑰密碼的具體實施方案,即RSA方案。

1991年提出的DSA算法也是一種公共密鑰算法,在數字簽名方面有較大的應用優勢。

公鑰體系結構中的概念

公鑰體系結構中的一些基本概念與結構組成。

密鑰對

在基於公鑰體系的安全系統中,密鑰是成對生成的,每對密鑰由一個公鑰和一個私鑰組成。在實際應用中,私鑰由擁有者自己保存,而公鑰則需要公佈於衆。爲了使基於公鑰體系的業務(如電子商務等)能夠廣泛應用,一個基礎性關鍵的問題就是公鑰的分發與管理。

公鑰本身並沒有什麼標記,僅從公鑰本身不能判別公鑰的主人是誰。

在很小的範圍內,比如A和B這樣的兩人小集體,他們之間相互信任,交換公鑰,在互聯網上通訊,沒有什麼問題。這個集體再稍大一點,也許彼此信任也不成問題,但從法律角度講這種信任也是有問題的。如再大一點,信任問題就成了一個大問題。

證書

互聯網絡的用戶羣決不是幾個人互相信任的小集體,在這個用戶羣中,從法律角度講用戶彼此之間都不能輕易信任。所以公鑰加密體系採取了另一個辦法,將公鑰和公鑰的主人名字聯繫在一起,再請一個大家都信得過有信譽的公正、權威機構確認,並加上這個權威機構的簽名。這就形成了證書。

由於證書上有權威機構的簽字,所以大家都認爲證書上的內容是可信任的;又由於證書上有主人的名字等身份信息,別人就很容易地知道公鑰的主人是誰。

CA(Certificate Authority)

前面提及的權威機構就是電子簽證機關(即CA)。CA也擁有一個證書(內含公鑰),當然,它也有自己的私鑰,所以它有簽字的能力。網上的公衆用戶通過驗證CA的簽字從而信任CA,任何人都應該可以得到CA的證書(含公鑰),用以驗證它所簽發的證書。

如果用戶想得到一份屬於自己的證書,他應先向CA提出申請。在CA判明申請者的身份後,便爲他分配一個公鑰,並且CA將該公鑰與申請者的身份信息綁在一起,併爲之簽字後,便形成證書發給那個用戶(申請者)。

如果一個用戶想鑑別另一個證書的真僞,他就用CA的公鑰對那個證書上的簽字進行驗證(如前所述,CA簽字實際上是經過CA私鑰加密的信息,簽字驗證的過程還伴隨使用CA公鑰解密的過程),一旦驗證通過,該證書就被認爲是有效的。

CA除了簽發證書之外,它的另一個重要作用是證書和密鑰的管理。

由此可見,證書就是用戶在網上的電子個人身份證,同日常生活中使用的個人身份證作用一樣。CA相當於網上公安局,專門發放、驗證身份證。

公開密鑰算法-RSA

RSA簡述

公開密鑰算法是在1976年由當時在美國斯坦福大學的迪菲(Diffie)和赫爾曼(Hellman)兩人首先發明的(論文"NewDirection in Cryptography")。但目前最流行的RSA是1977年由MIT教授Ronald L.Rivest,AdiShamir和Leonard M.Adleman共同開發的,分別取自三名數學家的名字的第一個字母來構成的。

1976年提出的公開密鑰密碼體制思想不同於傳統的對稱密鑰密碼體制,它要求密鑰成對出現,一個爲加密密鑰(e),另一個爲解密密鑰(d),且不可能從其中一個推導出另一個。自1976年以來,已經提出了多種公開密鑰密碼算法,其中許多是不安全的,一些認爲是安全的算法又有許多是不實用的,它們要麼是密鑰太大,要麼密文擴展十分嚴重。多數密碼算法的安全基礎是基於一些數學難題,這些難題專家們認爲在短期內不可能得到解決。因爲一些問題(如因子分解問題)至今已有數千年的歷史了。

公鑰加密算法也稱非對稱密鑰算法,用兩對密鑰:一個公共密鑰和一個專用密鑰。用戶要保障專用密鑰的安全;公共密鑰則可以發佈出去。公共密鑰與專用密鑰是有緊密關係的,用公共密鑰加密的信息只能用專用密鑰解密,反之亦然。由於公鑰算法不需要聯機密鑰服務器,密鑰分配協議簡單,所以極大簡化了密鑰管理。除加密功能外,公鑰系統還可以提供數字簽名。

公鑰加密算法中使用最廣的是RSA。RSA使用兩個密鑰,一個公共密鑰,一個專用密鑰。如用其中一個加密,則可用另一個解密,密鑰長度從40到2048bit可變,加密時也把明文分成塊,塊的大小可變,但不能超過密鑰的長度,RSA算法把每一塊明文轉化爲與密鑰長度相同的密文塊。密鑰越長,加密效果越好,但加密解密的開銷也大,所以要在安全與性能之間折衷考慮,一般64位是較合適的。RSA的一個比較知名的應用是SSL,在美國和加拿大SSL用128位RSA算法,由於出口限制,在其它地區(包括中國)通用的則是40位版本。

RSA算法研製的最初理念與目標是努力使互聯網安全可靠,旨在解決DES算法祕密密鑰的利用公開信道傳輸分發的難題。而實際結果不但很好地解決了這個難題;還可利用RSA來完成對電文的數字簽名以抗對電文的否認與抵賴;同時還可以利用數字簽名較容易地發現攻擊者對電文的非法篡改,以保護數據信息的完整性。

通常信息安全的目標可以概括爲解決信息的以下問題:

保密性(Confidentiality)保證信息不泄露給未經授權的任何人。
完整性(Integrity)防止信息被未經授權的人篡改。
可用性(Availability)保證信息和信息系統確實爲授權者所用。
可控性(Controllability)對信息和信息系統實施安全監控,防止非法利用信息和信息系統。
密碼是實現一種變換,利用密碼變換保護信息祕密是密碼的最原始的能力,然而,隨着信息和信息技術發展起來的現代密碼學,不僅被用於解決信息的保密性,而且也用於解決信息的完整性、可用性和可控性。可以說,密碼是解決信息安全的最有效手段,密碼技術是解決信息安全的核心技術。

公用密鑰的優點就在於,也許你並不認識某一實體,但只要你的服務器認爲該實體的CA是可靠的,就可以進行安全通信,而這正是Web商務這樣的業務所要求的。例如信用卡購物。服務方對自己的資源可根據客戶CA的發行機構的可靠程度來授權。目前國內外尚沒有可以被廣泛信賴的CA。美國Natescape公司的產品支持公用密鑰,但把Natescape公司作爲CA。由外國公司充當CA在我國是一件不可想象的事情。

公共密鑰方案較保密密鑰方案處理速度慢,因此,通常把公共密鑰與專用密鑰技術結合起來實現最佳性能。即用公共密鑰技術在通信雙方之間傳送專用密鑰,而用專用密鑰來對實際傳輸的數據加密解密。另外,公鑰加密也用來對專用密鑰進行加密。

在這些安全實用的算法中,有些適用於密鑰分配,有些可作爲加密算法,還有些僅用於數字簽名。多數算法需要大數運算,所以實現速度很慢,不能用於快的數據加密。以下將介紹典型的公開密鑰密碼算法-RSA。

RSA算法很好的完成對電文的數字簽名以抗對數據的否認與抵賴;利用數字簽名較容易地發現攻擊者對電文的非法篡改,以保護數據信息的完整性。目前爲止,很多種加密技術採用了RSA算法,比如PGP(PrettyGoodPrivacy)加密系統,它是一個工具軟件,向認證中心註冊後就可以用它對文件進行加解密或數字簽名,PGP所採用的就是RSA算法。由此可以看出RSA有很好的應用。

RSA算法

1978年就出現的RSA算法,是第一個既能用於數據加密也能用於數字簽名的算法。

RSA是一種公開密匙機理的加密算法。所謂公開密匙,就是每個用戶擁有兩個密碼,一個公開(e),一個保密(d)。對明文加密,可以使用其中任一密碼,但解密必須使用另一個密碼。加密/ 解密算法是公開的,但是算法是不可逆的。

密鑰的產生

1. 選擇兩個大素數,p 和q 。

2. 計算: n = p * q (p,q分別爲兩個互異的大素數,p,q 必須保密,一般要求p,q爲安全素數,n的長度大於512bit ,這主要是因爲RSA算法的安全性依賴於因子分解大數問題)。有歐拉函數 (n)=(p-1)(q-1)。

3. 然後隨機選擇加密密鑰e,要求 e 和 ( p - 1 ) * ( q - 1 ) 互質。

4. 最後,利用Euclid 算法計算解密密鑰d, 滿足de≡1(mod φ(n))。其中n和d也要互質。數e和n是公鑰,d是私鑰。兩個素數p和q不再需要,應該丟棄,不要讓任何人知道。

加密與解密

1. 加密信息 m(二進制表示)時,首先把m分成等長數據塊 m1 ,m2,..., mi ,塊長s,其中 2^s <= n, s 儘可能的大。

2. 對應的密文是:ci ≡mi^e ( mod n ) ( a )

3. 解密時作如下計算:mi ≡ci^d ( mod n ) ( b ) RSA 可用於數字簽名,方案是用 ( a ) 式簽名, ( b )式驗證。具體操作時考慮到安全性和 m信息量較大等因素,一般是先作 HASH 運算。

驗證質數算法

想直接求一大質數是困難的,所以最好是隨機選取一個大數,再來驗證它是否質數。而完全驗證它是否質數運算量也狠大,這裏可以採用下面的方法:

如果想驗證 n是否是質數:

1. 檢查 n 是否能被較小的質數整除。

2. 從 { 1,2,3,4...,n-1 } 中隨機選取 a

3. 測試 a,n 是否互質(輾轉相除法)。且 J(a,n)-a^((n-1)/2)是否能被 n整除。這兩個條件只要有一個滿足,n 肯定是一合數。否則,n 是質數的概率就在1/2 以上。

附: / 1 (a=1)

J(a,n)={ J(a/2,n)*(-1)^(n^2-1)/ (a爲偶數)

\ J(n mod a,a)*(-1)^((a-1)(n-1)/4) (a爲其它數)

如果反覆 2,3步 XXX 次,n 是質數的可能性就極大了。

由於計算機產生的是僞隨機數,所以建議在多次取隨機數時,多安插幾次等待按鍵,然後用時間作種子對隨機函數初始化。

關於強質數及其獲得

因爲冪剩餘函數具有特殊的週期性,反覆運算M=(C^d) mod n t 次後,將還原爲最初的 M。早期的RSA 算法就曾被人用這種方法破譯。所以在生成密匙時,應採用"強質數",使 t足夠大。

所謂強質數 p,滿足:

1. p 是個位數足夠大的隨機質數

2. p-1 含有一個大的質數因子 r

3. p+1 含有一個大的質數因子

4. r-1 含有一個大的質數因子 t

強質數的獲得:

1. 選擇兩個指定長度的奇數 a,b

2. 在 a 附近產生隨機質數 s ,在 b 附近產生隨機質數 t

3. 由 t 產生質數 r。 (1) r=1+2t (2) 若 r 非質數,則 r=r+2t 直到 r 是質數

4. 由 r,s 生成 p (1) p=(s^(r-1)-r^(s-1)) mod (r*s) (2) 若 p 爲偶數,則 p=p+r*s (3) p=p+2rs 直到 p 是質數

5. 高次冪的求模算法 ( C=(M^e) mod n )

步驟如下: ___________________________

將 e 用2進製表示 Ek Ek-1 Ek-2 ... E1 E0 Ei∈{0,1} 0<=i<=k
C=1
for i=k to 0 C=C^2 mod n
若 Ei =1 則 C=C*(M mod n)
6. 快速解密算法:

除了直接用 M=(C^d) mod n 來計算,這裏給出一個快速算法。

C 爲密文,p〈q

設 C1=C mod p C2=C mod q

d1=d mod (p-1) d2=d mod (q-1)

m1=m mod p=C1^d1 mod p

m2=m mod q=C2^d2 mod q A爲常數,滿足 A*p-1 能被 q 整除 (0<A<q-1)

則有 M=(((m2+q-m1)*A) mod q)*p+m1

RSA的缺點

RSA的缺點主要有:A)產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。B)分組長度太大,爲保證安全性,n 至少也要 600bits以上,使運算代價很高,尤其是速度較慢,較對稱密碼算法慢幾個數量級;且隨着大數分解技術的發展,這個長度還在增加,不利於數據格式的標準化。目前,SET(Secure ElectronicTransaction)協議中要求CA採用2048比特長的密鑰,其他實體使用1024比特的密鑰。

由於進行的都是大數計算,使得RSA最快的情況也比DES慢上100倍,無論是軟件還是硬件實現。速度一直是RSA的缺陷。一般來說只用於少量數據加密。

RSA 的安全性

RSA算法之所以具有安全性,是基於數論中的一個特性事實:即將兩個大的質數合成一個大數很容易,而相反的過程則非常困難。在當今技術條件下,當n足夠大時,爲了找到d,欲從n中通過質因子分解試圖找到與d對應的p、q是極其困難甚至是不可能的。由此可見,RSA的安全性是依賴於作爲公鑰的大數n的位數長度的。爲保證足夠的安全性,一般認爲現在的個人應用需要用384或512比特位的n,公司需要用1024比特位的n,極其重要的場合應該用2048比特位的n。

RSA的安全性依賴於大數分解。公鑰和私鑰都是兩個大素數( 大於 100個十進制位)的函數。據猜測,從一個密鑰和密文推斷出明文的難度等同於分解兩個大素數的積。

RSA的安全性依賴於大數分解,但是否等同於大數分解一直未能得到理論上的證明,也並沒有從理論上證明破譯RSA的難度與大數分解難度等價。因爲沒有證明破解RSA就一定需要作大數分解。假設存在一種無須分解大數的算法,那它肯定可以修改成爲大數分解算法。即RSA的重大缺陷是無法從理論上把握它的保密性能如何,而且密碼學界多數人士傾向於因子分解不是NPC問題。

目前, RSA的一些變種算法已被證明等價於大數分解。不管怎樣,分解n是最顯然的攻擊方法。現在,人們已能分解140多個十進制位的大素數。因此,模數n必須選大一些,因具體適用情況而定。

RSA算法的保密強度,隨其密鑰的長度增加而增強。但是,密鑰越長,其加解密所耗的時間也越長。因此,要根據所保護信息的敏感程度與攻擊者破解所要花的代價值不值得和系統所要求的反應時間來綜合考慮決定。尤其對於商業信息領域更是如此。

RSA的選擇密文攻擊

RSA在選擇密文攻擊面前很脆弱。一般攻擊者是將某一信息作一下僞裝(Blind),讓擁有私鑰的實體簽署。然後,經過計算就可得到它所想要的信息。實際上,攻擊利用的都是同一個弱點,即存在這樣一個事實:乘冪保留了輸入的乘法結構:

( XM )^d = X^d *M^d mod n

前面已經提到,這個固有的問題來自於公鑰密碼系統的最有用的特徵--每個人都能使用公鑰。但從算法上無法解決這一問題,主要措施有兩條:一條是採用好的公鑰協議,保證工作過程中實體不對其他實體任意產生的信息解密,不對自己一無所知的信息簽名;另一條是決不對陌生人送來的隨機文檔簽名,簽名時首先使用One-Way HashFunction對文檔作HASH處理,或同時使用不同的簽名算法。在中提到了幾種不同類型的攻擊方法。   

RSA的公共模數攻擊

若系統中共有一個模數,只是不同的人擁有不同的e和d,系統將是危險的。最普遍的情況是同一信息用不同的公鑰加密,這些公鑰共模而且互質,那末該信息無需私鑰就可得到恢復。設P爲信息明文,兩個加密密鑰爲e1和e2,公共模數是n,則:

C1 = P^e1 mod n

C2 = P^e2 mod n

密碼分析者知道n、e1、e2、C1和C2,就能得到P。因爲e1和e2互質,故用Euclidean算法能找到r和s,滿足:r * e1 + s * e2 = 1

假設r爲負數,需再用Euclidean算法計算C1^(-1),則( C1^(-1) )^(-r) * C2^s = P mod n

另外,還有其它幾種利用公共模數攻擊的方法。總之,如果知道給定模數的一對e和d,一是有利於攻擊者分解模數,一是有利於攻擊者計算出其它成對的e'和d',而無需分解模數。解決辦法只有一個,那就是不要共享模數n。

RSA的小指數攻擊

有一種提高RSA速度的建議是使公鑰e取較小的值,這樣會使加密變得易於實現,速度有所提高。但這樣作是不安全的,對付辦法就是e和d都取較大的值。

RSA最近的破解

荷蘭
早在1999年,位於荷蘭的一個國際科學組織宣佈他們已破解一個用於保護每天數以百萬的因特網交易的國際安全密碼,從而揭示出在電子商業中存在着嚴重的、無法保證安全的潛在可能。

該組織認爲,這個密碼的破解,可能會對互聯網上的電子商務市場帶來嚴重的影響。

這個科學組織是爲阿姆斯特丹的數學和計算機科學協會的國家研究中心工作的,他們聲稱已經破解了一個類似著名的RSA-155加密系統的512位數的密碼,這種加密系統是由麻省理工學院在70年代中期設計的。RSA-15系統被廣泛用於保護硬件和軟件上傳輸的電子數據。例如,RSA-155被應用在國際安全協議SSL上。尤其,該組織認爲512位質因數的長度與95%的用於互聯網上電子商務的密匙類似。

該組織說,"結果顯示,在開始預料電子商務之前,普遍採用512位密碼對於一箇中等程度的黑客已不再安全。"該組織還說,"用於保護512位密匙的耗資是很大的,數十億的美圓每天要通過財政機構投入其中。"當密碼第一次創建時,人們認爲512位因數實際上是不可能的,換句話說,沒有人認爲一個512位的密匙能被破解,但是事與願違。爲了找出質因數,該組織使用了總共300個SUN公司的SGI工作站和奔騰級的PC電腦。而破解密碼要藉助計算機整日整夜的運行,耗費大約35年的計算時間。一個姆斯特丹計算機學術中心的型號爲CRAY C916的擁有2GB內存的超級計算機也被投入使用。

該組織說密碼被破解了大約7個月。 該組織說"如果通過互聯網上成百上千的參與者參加當前的大型分佈式計算工程,那麼就有可能把破解512位數的時間從7個月減少到一週。"

以色列Adi Shamir
以色列電腦專家發明一部新電腦,能在幾日內破解目前廣泛運用的密碼系統,對一般的電子商務構成重大威協。

以色列魏茨曼科學院的沙米爾,正是目前市場廣泛應用的密碼系統"RSA公開密碼本"的設計者。他新設計的電腦系統,製造費用約達200萬美元,可以在兩三天內,譯解以五百一十二比特(512 bits)寫成的RSA密碼,而一些高度機密的軍事、銀行及其他高度保護的數據庫等系統,則不在此列。

沙米爾今年5月曾公開其設計雛型,近日在麻省伍斯特理工學院的一個研討會上,首次向在座20名電腦密碼專家解釋其新設計。他是從電腦二極管的閃光得到靈感,設計出15釐米乘15釐米的電腦,精密量度二極管的閃光,再加以計算,就能在兩三日之間迅速破解RSA密碼。

密碼專家認爲,這設計進一步顯示目前應用的RSA密碼其實十分脆弱,相信犯罪組織、政府部門、研究機構等等,都會對此新發明很感興趣。雖然較敏感的機密系統都會用較長的密碼,即一千零二十四比特(1,024bits),但基於各種考慮,美國政府要有特別批准纔會出口較長的密碼,而目前最流行的瀏覽器都是用五百一十二比特(512 bits)寫成。

RSA公鑰體系可用於數字簽名

RSA公鑰體系還可用於對數據信息進行數字簽名。所謂數字簽名就是信息發送者用其私鑰對從所傳報文中提取出的特徵數據或稱數字指紋進行RSA算法解密運算操作,得到發信者對該數字指紋的簽名函數H(m)。簽名函數H(m)從技術上標識了發信者對該電文的數字指紋的責任。因發信者的私鑰只有他本人才有,所以他一旦完成了簽名便保證了發信人無法抵賴曾發過該信息(即不可抵賴性)。經驗證無誤的簽名電文同時也確保信息報文在經簽名後未被篡改(即完整性)。當信息接收者收到報文後,就可以用發送者的公鑰對數字簽名的真實性進行驗證。美國參議院已通過了立法,現在在美國,數字簽名與手書籤名的文件具有同等的法律效力。

在數字簽名中有重要作用的數字指紋是通過一類特殊的散列函數(HASH函數) 生成的, 對這些HASH函數的特殊要求是:

1.接受的輸入報文數據沒有長度限制;

2.對任何輸入報文數據生成固定長度的摘要(數字指紋)輸出;

3.從報文能方便地算出摘要;

4.難以對指定的摘要生成一個報文,而由該報文可以算出該指定的摘要;

5.難以生成兩個不同的報文具有相同的摘要。

RSA的實用性

公開密鑰密碼體制與對稱密鑰密碼體制相比較,確實有其不可取代的優點,但它的運算量遠大於後者,超過幾百倍、幾千倍甚至上萬倍,複雜得多。

在網絡上全都用公開密鑰密碼體制來傳送機密信息,是沒有必要的,也是不現實的。在計算機系統中使用對稱密鑰密碼體制已有多年,既有比較簡便可靠的,久經考驗的方法,如以DES(數據加密標準)爲代表的分塊加密算法(及其擴充DESX和TripleDES);也有一些新的方法發表,如由RSA公司的Rivest研製的專有算法RC2、RC4、RC5等,其中RC2和RC5是分塊加密算法,RC4是數據流加密算法。

在傳送機密信息的網絡用戶雙方,如果使用某個對稱密鑰密碼體制(例如DES),同時使 用RSA不對稱密鑰密碼體制來傳送DES的密鑰,就可以綜合發揮兩種密碼體制的優點,即DES 高速簡便性和RSA密鑰管理的方便和安全性。

RSA算法已經在互聯網的許多方面得以廣泛應用,包括在安全接口層(SSL)標準(該標準是網絡瀏覽器建立安全的互聯網連接時必須用到的)方面的應用。

基於RSA算法的公鑰加密系統具有數據加密、數字簽名(DigitalSignature)、信息源識別及密鑰交換等功能。目前,RSA加密系統主要應用於智能IC卡和網絡安全產品。選用RSA算法作爲公共鑰加密系統的主要算法的原因是算法安全性好。在模N足夠長時,每lnN個整數中就有一個大小接近於N的素數。在模長爲1024bit時,可以認爲RSA密碼系統的可選密鑰個數足夠多,可以得到隨機、安全的密鑰對。公共鑰加密系統多用於分佈式計算環境,密鑰分配和管理易於實現,局部攻擊難以對整個系統的安全造成威脅。目前還沒有攻破實際應用系統的例子。 

RSA專利

RSA算法在美國申請了專利,但在其他國家無專利。美國專利已經於2000年9月20日到期。

美國當地時間9月6日,美國公共密鑰系統安全公司(RSA也稱數據安全有限公司)決定放棄權利公開其嚴格保密的加密規則技術。RSA公司的公共密鑰加密規則是一種類似於"c = me mod n"的數字式加密規則,公共密鑰加密規則被認爲是確保絕大多數網上電子商務安全的加密與密碼技術的標準規則。

美國國家專利局稱,加密通信系統與技術專利編號爲No.4405829,該專利權於1983年9月20日授予了麻省理工學院,其後該專利由公共密鑰安全公司完全買斷,專利權限將於2000年9月20日到期。與RedHat公司公開Linux系統資源及其它公司公開技術資源的情況相似,這一公開加密規則的舉動將使其競爭對手可以在自己的產品中嵌入該加密技術規則。

公共密鑰安全公司的首席執行官阿特·科維羅接受InternetNews.com網站採訪時稱,他們相信,這一舉動將進一步鞏固RSA加密技術作爲有線、無線應有程序及設備加密標準的地位。

RSA公司公開發表它的加密算法,任何開發工作都可以使用該算法。基於該算法的產品和解決方案可以完全自由地在美國銷售。這使得所有的公司都可以免費基於它的技術開發安全解決方案。這個算法已經在Netscape的瀏覽器和微軟公司的IE瀏覽器中被使用,是目前在線交易的主要安全技術。

RSA公司代表Holahan的聲明稱,該公司的專利已經通過建立可靠的安全標準對電子商務提供了幫助。現在公開這一專利技術將給業界的安全產品帶來新變化。

RSA算法和DES算法

算法的比較

上一篇〈分組密碼算法分析與改進>;中已經對DES作出了簡單的分析,在這裏再簡單描述一下:

DES數據加密標準用於對64比特的數據進行加密和解密。DES算法所用的密鑰也是64比特,但由於其中包含了8個比特的奇偶校驗位,因而實際的密鑰長度是56比特。DES算法多次組合迭代算法和換位算法,利用分散和錯亂的相互作用,把明文編製成密碼強度很高的密文。DES算法的加密和解密的流程是完全相同的,區別僅僅是加密與解密使用子密鑰序列的順序正好相反。

RSA算法是公開密鑰系統中的傑出代表。RSA算法的安全性是建立在具有大素數因子的合數其因子分解困難這一法則之上的。RSA算法中加密密鑰和解密密鑰不相同,其中加密密鑰公開,解密密鑰保密,並且不能從加密密鑰或密文中推出解密密鑰。

DES算法和RSA算法各有優缺點,我們可以對DES算法和RSA算法在以下幾個方面作一比較。

比較1

在加密、解密的處理效率方面,DES算法優於RSA算法。因爲DES密鑰的長度只有56比特,可以利用軟件和硬件實現高速處理;RSA算法需要進行諸如200比特整數的乘冪和求模等多倍字長的處理,處理速度明顯慢於DES算法。

比較2

在密鑰的管理方面,RSA算法比DES算法更加優越。因爲RSA算法可採用公開形式分配加密密鑰,對加密密鑰的更新也很容易,並且對不同的通信對象,只需對自己的解密密鑰保密即可;DES算法要求通信前對密鑰進行祕密分配,密鑰的更換困難,對不同的通信對象,DES需產生和保管不同的密鑰。

比較3

在安全性方面,DES算法和RSA算法的安全性都較好,還沒有在短時間內破譯它們的有效的方法。

比較4

在簽名和認證方面,DES算法從原理上不可能實現數字簽名和身份認證,但RSA算法能夠容易地進行數字簽名和身份認證。

基於的DES和RSA的新的加密方案

基於以上比較結果,DES及RSA各有短長,可設計出一種綜合DES和RSA優點,同時又避免了它們各自的不足的加密方案。基本原理是:數據通信之前,用DES方法對消息明文加密,同時用RSA方法對DES密鑰進行加密和實現數字簽名。

設發送方爲A(加密密鑰爲Kea,解密密鑰爲Kda),接收方爲B(加密密鑰爲Keb,解密密鑰爲Kdb),上述加密方案的具體實現步驟如下:

1. 發送方先生成用於DES加密的密鑰K,爲了提高數據的安全性,每一個密鑰K只用一次。

2. 發送方從密鑰服務器中獲取接收方的RSA的公開加密密鑰Keb,並用Keb加密DES的密鑰K形成密文Ck。

3. 發送方生成需要簽名的信息,並用自己的RSA的解密密鑰Kda和Keb共同形成數字簽名。

4. 發送方用K加密明文和簽名的信息,然後連同Ck一起形成密文C發往接收方。

5. 接收方接收到C後,先用自己的解密密鑰Kdb解密出C中的DES密鑰K,再利用K解密出明文和簽名信息。

6. 接收方用發送方的公開密鑰Kea和自己的解密密鑰Kdb對簽名信息進行身份認證,然後對簽名信息作適當處理後(例如填寫自己的標識號等),再形成自己的數字簽名信息發往發送方。

7. 發送、接收雙方均刪除DES密鑰K。

這樣綜合了DES算法和RSA算法的長處,所以具有如下優點:

加密、解密速度快。因爲對數據量大的明文是採用DES算法來加密和解密的,而只有對簽名信息和DES算法的密鑰K這樣的數據量小的信息才採用RSA算法,所以加密、解密的速度快,接近DES算法的速度。
通信雙方在傳輸的密文中攜帶RSA加密的DES密鑰,不用再祕密交換密鑰,減小了密鑰在傳輸過程中泄密的風險。
具有簽名和認證的功能。由於採用了RSA算法,通信雙方可以將自己的數字簽名信息互相發給對方供保留和認證。
密鑰管理方便。雖然採用了DES算法,但不是對每一通信對象都保密管理相應的DES密鑰,只需保密管理自己的RSA解密密鑰就行了。RSA公開密鑰可以任意公開,DES密鑰在通信之前產生,不必事先約定,通信結束後,銷去相應的DES密鑰。
其他公鑰體制

人們一直努力在其他困難問題上建立公開密鑰密碼體制,不至於一旦一些數學難題被解決以後,沒有可用的密碼算法,所以出現了大量的公開密鑰密碼算法,包括:揹包體制,POHLIG-Hellman算法,Rabin算法,ElGamal算法,SCHNORR算法,ESIGN算法,McEliece算法,OKAMOTO算法,還可以在有限域上的橢圓曲線上建立RSA,ElGamal算法等。

我們認爲RSA算法是目前最好的密碼算法,它不僅可以作爲加密算法使用,而且可以用作數字簽名和密鑰分配與管理,而DSA只適合作簽名,且安全強度和速度都不如RSA,橢圓曲線上的公開密鑰密碼系統安全強度依賴於曲線的選擇和體制,我們相信它會有更高的安全強度。

目前200比特長的橢圓曲線密碼體制已經有相當高的安全強度。

在幾乎所有的實用公開密鑰密碼系統中,都涉及到大數運算和素數選擇 ,模冪運算採用反覆平方取模算法,素數測試一般採用Rabin-Miller算 法,還有其他素性測試算法用來選擇大素數,如Solovag-Strassen 測試法,Lehmann 測試法等。

公開密鑰系統的安全性

由於公鑰不需要保密,因此在黑客或許會用他們自己的公鑰冒充其他人的公鑰進行攻擊,這是這種模式的主要風險。爲了防範這種攻擊的發生,我們採用公鑰證書。證書是一組規定了與特定公鑰有關的單個計算機或主機名稱的數字化數據。名稱和密鑰都受到一個值得信任的第三方附加的數字簽名的保護:即證書機關(或CA)。

公鑰領域的大多數主要廠商都可以成爲證書機關,他們可以將他們的信任狀(credentials)安裝在 Web 瀏覽器。其他機構可以要求這些廠商有嘗簽發證書,在使用標準瀏覽器時,這些證書就會生效。另外,企業也可以購買軟件自己簽發證書。然而,被用來給這些證書籤名的信任狀必須安裝在任何需要驗證這些證書的軟件 (如 Web瀏覽器)中。

另外,公鑰長期存在的一個問題是密鑰的撤消。公鑰是非常易於創建和簽發的。其成本主要是在撤消密鑰的過程中產生的。由於公鑰在簽發時不需要保密,因此用戶可以自由地複製和簽發它們,這樣其他用戶在需要時就可以得到它們。然而,如果需要更換公鑰,那麼這個問題就成爲一場噩夢。例如,黑客可能會得到屬於特定公鑰的私鑰,這樣他就可以冒充密鑰的所有者和欺騙任何使用該公鑰的人。如果所有者意識到這個問題,並試圖更換私鑰,他必須以某種方式聯絡曾經得到過舊的公鑰的所有人和確保其他人不再使用舊的公鑰。

大多數公鑰系統現在都依靠撤消清單識別不應再使用的公鑰。這些清單類似於以前信用卡特約商戶使用的厚厚的小冊子:在小冊子中列出了所有丟失或被偷竊的信用卡的卡號,這些商戶會查看小冊子,覈實某個信用卡是否被偷。其它在線證書驗證技術雖然已經出現,但是還沒有完全滿意的解決方案應用到實踐中。

隨着用戶的增加,密鑰的數量管理也需要考慮。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章