體制發展
RSA是目前最有影響力的公鑰加密算法,它能夠抵抗到目前為止已知的絕大多數密碼攻擊,已被ISO推薦為公鑰數據加密标準。RSA公開密鑰密碼體制。所謂的公開密鑰密碼體制就是使用不同的加密密鑰與解密密鑰,是一種“由已知加密密鑰推導出解密密鑰在計算上是不可行的”密碼體制。
在公開密鑰密碼體制中,加密密鑰(即公開密鑰)PK是公開信息,而解密密鑰(即秘密密鑰)SK是需要保密的。加密算法E和解密算法D也都是公開的。雖然解密密鑰SK是由公開密鑰PK決定的,但卻不能根據PK計算出SK。
正是基于這種理論,1978年出現了著名的RSA算法,它通常是先生成一對RSA密鑰,其中之一是保密密鑰,由用戶保存;另一個為公開密鑰,可對外公開,甚至可在網絡服務器中注冊。
為提高保密強度,RSA密鑰至少為500位長,一般推薦使用1024位。這就使加密的計算量很大。為減少計算量,在傳送信息時,常采用傳統加密方法與公開密鑰加密方法相結合的方式,即信息采用改進的DES或IDEA對話密鑰加密,然後使用RSA密鑰加密對話密鑰和信息摘要。對方收到信息後,用不同的密鑰解密并可核對信息摘要。
RSA算法是第一個能同時用于加密和數字簽名的算法,也易于理解和操作。RSA是被研究得最廣泛的公鑰算法,從提出到現今的三十多年裡,經曆了各種攻擊的考驗,逐漸為人們接受,普遍認為是目前最優秀的公鑰方案之一。
SET(SecureElectronicTransaction)協議中要求CA采用2048bits長的密鑰,其他實體使用1024比特的密鑰。RSA密鑰長度随着保密級别提高,增加很快。下表列出了對同一安全級别所對應的密鑰長度。
這種算法1978年就出現了,它是第一個既能用于數據加密也能用于數字簽名的算法。它易于理解和操作,也很流行。算法的名字以發明者的名字命名:RonRivest,AdiShamir和LeonardAdleman。早在1973年,英國國家通信總局的數學家CliffordCocks就發現了類似的算法。但是他的發現被列為絕密,直到1998年才公諸于世。
RSA算法是一種非對稱密碼算法,所謂非對稱,就是指該算法需要一對密鑰,使用其中一個加密,則需要用另一個才能解密。
RSA的算法涉及三個參數,n、e1、e2。
其中,n是兩個大質數p、q的積,n的二進制表示時所占用的位數,就是所謂的密鑰長度。
e1和e2是一對相關的值,e1可以任意取,但要求e1與(p-1)*(q-1)互質;再選擇e2,要求(e2*e1)mod((p-1)*(q-1))=1。
(n,e1),(n,e2)就是密鑰對。其中(n,e1)為公鑰,(n,e2)為私鑰。
RSA加解密的算法完全相同,設A為明文,B為密文,則:A=B^e2modn;B=A^e1modn;(公鑰加密體制中,一般用公鑰加密,私鑰解密)
安全性能
RSA的安全性依賴于大數分解,但是否等同于大數分解一直未能得到理論上的證明,因為沒有證明破解RSA就一定需要作大數分解。假設存在一種無須分解大數的算法,那它肯定可以修改成為大數分解算法。
RSA的一些變種算法已被證明等價于大數分解。不管怎樣,分解n是最顯然的攻擊方法。人們已能分解多個十進制位的大素數。因此,模數n必須選大一些,因具體适用情況而定。
實現細節
密鑰生成
首先要使用概率算法來驗證随機産生的大的整數是否質數,這樣的算法比較快而且可以消除掉大多數非質數。假如有一個數通過了這個測試的話,那麼要使用一個精确的測試來保證它的确是一個質數。
除此之外這樣找到的p和q還要滿足一定的要求,首先它們不能太靠近,此外p-1或q-1的因子不能太小,否則的話N也可以被很快地分解。
此外尋找質數的算法不能給攻擊者任何信息,這些質數是怎樣找到的,尤其産生随機數的軟件必須非常好。要求是随機和不可預測。這兩個要求并不相同。
一個随機過程可能可以産生一個不相關的數的系列,但假如有人能夠預測出(或部分地預測出)這個系列的話,那麼它就已經不可靠了。比如有一些非常好的随機數算法,但它們都已經被發表,因此它們不能被使用,因為假如一個攻擊者可以猜出p和q一半的位的話,那麼他們就已經可以輕而易舉地推算出另一半。
此外密鑰d必須足夠大,1990年有人證明假如p大于q而小于2q(這是一個很經常的情況)而,那麼從N和e可以很有效地推算出d。此外e=2永遠不應該被使用。
運算速度
由于進行的都是大數計算,使得RSA最快的情況也比DES慢上好幾倍,無論是軟件還是硬件實現。速度一直是RSA的缺陷。一般來說隻用于少量數據加密。RSA的速度比對應同樣安全級别的對稱密碼算法要慢1000倍左右。
比起DES和其它對稱算法來說,RSA要慢得多。實際上Bob一般使用一種對稱算法來加密他的信息,然後用RSA來加密他的比較短的對稱密碼,然後将用RSA加密的對稱密碼和用對稱算法加密的消息送給Alice。
這樣一來對随機數的要求就更高了,尤其對産生對稱密碼的要求非常高,因為否則的話可以越過RSA來直接攻擊對稱密碼。
密鑰分配
和其它加密過程一樣,對RSA來說分配公鑰的過程是非常重要的。分配公鑰的過程必須能夠抵擋一個從中取代的攻擊。假設Eve交給Bob一個公鑰,并使Bob相信這是Alice的公鑰,并且她可以截下Alice和Bob之間的信息傳遞,那麼她可以将她自己的公鑰傳給Bob,Bob以為這是Alice的公鑰。
Eve可以将所有Bob傳遞給Alice的消息截下來,将這個消息用她自己的密鑰解密,讀這個消息,然後将這個消息再用Alice的公鑰加密後傳給Alice。理論上Alice和Bob都不會發現Eve在偷聽他們的消息。今天人們一般用數字認證來防止這樣的攻擊。
攻擊方式
時間攻擊
1995年有人提出了一種非常意想不到的攻擊方式:假如Eve對Alice的硬件有充分的了解,而且知道它對一些特定的消息加密時所需要的時間的話,那麼她可以很快地推導出d。
這種攻擊方式之所以會成立,主要是因為在進行加密時所進行的模指數運算是一個位元一個位元進行的而位元為1所花的運算比位元為0的運算要多很多,因此若能得到多組訊息與其加密時間,就會有機會可以反推出私鑰的内容。
模數攻擊
若系統中共有一個模數,隻是不同的人擁有不同的e和d,系統将是危險的。最普遍的情況是同一信息用不同的公鑰加密,這些公鑰共模而且互質,那麼該信息無需私鑰就可得到恢複。設P為信息明文,兩個加密密鑰為e1和e2,公共模數是n,則:
C1=P^e1modn
C2=P^e2modn
密碼分析者知道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=Pmodn
另外,還有其它幾種利用公共模數攻擊的方法。總之,如果知道給定模數的一對e和d,一是有利于攻擊者分解模數,一是有利于攻擊者計算出其它成對的e’和d’,而無需分解模數。解決辦法隻有一個,那就是不要共享模數n。
RSA的小指數攻擊。有一種提高RSA速度的建議是使公鑰e取較小的值,這樣會使加密變得易于實現,速度有所提高。但這樣作是不安全的,對付辦法就是e和d都取較大的值。
邊信道攻擊
針對RSA的邊信道攻擊現今大多處于實驗室階段,邊信道攻擊并不是直接對RSA的算法本身進行攻擊,而是針對計算RSA的設備的攻擊。現今的邊信道攻擊一般是針對硬件實現RSA算法的芯片進行的。
現國内外防範公鑰密碼邊信道攻擊主要以犧牲效率為代價。公鑰密碼的實現效率一直是信息安全系統的應用瓶頸,進一步損害算法效率,必将造成信息系統性能惡化。
因此,尋找高效又抗功耗分析的公鑰算法實現途徑,并結合其他層面抗攻擊手段,使密碼器件運行效率、功耗、面積等綜合因素實現最優化,無疑是極富挑戰性的課題,不僅對抗邊信道攻擊理論研究有重要價值,而且對廣泛應用的智能卡(尤其是銀行卡、手機SIM或USIM卡)、各種硬件密碼電子設備、有時也包括軟件實現的密碼算法的安全應用無疑具有極大的現實意義。
邊信道攻擊以功耗分析和公鑰密碼為研究重點,在對各種類型、系列、型号、規模的基本電路運行過程中的功耗軌迹進行大量研究、掌握其變化規律的基礎上,繼續研究電路工藝、結構、算法、協議對功耗軌迹的影響,經過一系列處理,從中提取出密鑰信息。目标是針對功耗分析攻擊機理,提出抗功耗分析的綜合優化新方法,并盡量兼顧算法效率。
邊信道攻擊研究涉及密碼學、信息論、算法理論和噪聲理論,還涉及硬件電路設計、通信、信号處理、統計分析、模式識别等諸多技術。
邊信道攻擊在若幹關鍵問題研究上已取得了實質性進展。
目前國内已經有大學的研究者提出了公鑰密碼等功耗編碼的綜合優化方法,佐證了安全性和效率的可兼顧性。截至目前,研究團隊已針對著名公鑰密碼算法RSA的多種實現算法和方式成功實施了計時攻擊、簡單功耗和簡單差分功耗分析攻擊,實驗驗證了多種防禦方法,包括“等功耗編碼”方法的有效性,并完成了大規模功耗分析自動測試平台的自主開發。
1)産生密鑰很麻煩,受到素數産生技術的限制,因而難以做到一次一密。
2)安全性,RSA的安全性依賴于大數的因子分解,但并沒有從理論上證明破譯RSA的難度與大數分解難度等價,而且密碼學界多數人士傾向于因子分解不是NP問題。
現今,人們已能分解140多個十進制位的大素數,這就要求使用更長的密鑰,速度更慢;另外,人們正在積極尋找攻擊RSA的方法,如選擇密文攻擊,一般攻擊者是将某一信息作一下僞裝(Blind),讓擁有私鑰的實體簽署。
然後,經過計算就可得到它所想要的信息。實際上,攻擊利用的都是同一個弱點,即存在這樣一個事實:乘幂保留了輸入的乘法結構:前面已經提到,這個固有的問題來自于公鑰密碼系統的最有用的特征--每個人都能使用公鑰。
但從算法上無法解決這一問題,主要措施有兩條:一條是采用好的公鑰協議,保證工作過程中實體不對其他實體任意産生的信息解密,不對自己一無所知的信息簽名;另一條是決不對陌生人送來的随機文檔簽名,簽名時首先使用One-WayHashFunction對文檔作HASH處理,或同時使用不同的簽名算法。除了利用公共模數,人們還嘗試一些利用解密指數或φ(n)等等攻擊.
3)速度太慢,由于RSA的分組長度太大,為保證安全性,n至少也要600bits以上,使運算代價很高,尤其是速度較慢,較對稱密碼算法慢幾個數量級;且随着大數分解技術的發展,這個長度還在增加,不利于數據格式的标準化。
SET(SecureElectronicTransaction)協議中要求CA采用2048比特長的密鑰,其他實體使用1024比特的密鑰。為了速度問題,人們廣泛使用單,公鑰密碼結合使用的方法,優缺點互補:單鑰密碼加密速度快,人們用它來加密較長的文件,然後用RSA來給文件密鑰加密,極好的解決了單鑰密碼的密鑰分發問題。



















