原文:Twenty Years of Attacks on the RSA Cryptosystem

作者:Dan Boneh@Stanford University(dabo@cs.stanford.edu)

譯者:Jing Ling@360ESG A-Team(admin@hackfun.org)

1 介紹

由Ron Rivest,Adi Shamir和Len Adleman發明的RSA密碼系統首次在1977年8月的"科學美國人"雜志上發表(譯者注:本文于1999年2月在美國數學學會的Notices雜志首次發布)。密碼系統最常用于提供隱私保護和確保數字數據的真實性。目前,RSA部署在許多商業系統中。Web服務器和瀏覽器使用它來保護Web流量,它可以用于保障電子郵件的隱私和真實性,還可以用于保護遠程登錄會話,同時它也是電子信用卡支付系統的核心。簡而言之,RSA常用于需要考慮數字數據安全性的應用中。

自最初發布以來,RSA系統已被許多研究人員分析認為是易受攻擊的。盡管二十年的研究出了許多引人入勝的攻擊,但其中沒有一個攻擊是毀滅性的。這些攻擊主要說明了不當使用RSA的危險,可見安全地實施RSA確實也是一項非常重要的任務。我們的目標是使用基礎數學的知識分析其中的一些攻擊,在整個分析過程中,我們遵循標準命名約定,使用Alice和Bob表示希望彼此通信的兩個正常通信方,使用Marvin來表示希望竊聽或篡改Alice和Bob之間通信的惡意攻擊者。

我們首先介紹一下RSA加密的簡化版本。令是比特位長度相同(位)的兩個大素數的乘積。常見的長度大小是=1024位(即:309個十進制數字),質因子=512位。令為滿足的兩個整數,其中是乘法群的階數。我們稱為RSA模數,為加密指數,為解密指數。為公鑰。顧名思義,公鑰是公開的,并用于加密消息。稱為密鑰或私鑰,一般情況下只有加密消息的接收者知道,私鑰能夠解密密文。

消息是一個整數且滿足,要加密,計算,要解密密文合法接受者計算。(譯者注:下面是譯者添加的的證明)

歐拉定理:若為正整數,且互素(即),則

已知,求證

證明:

等式左邊為

等式右邊為

等式右邊等于等式左邊,證畢。

定義一個RSA函數,如果已知,很容易使用等式求出,我們稱為求解函數的陷門。在本次課題研究在沒有陷門的情況下求解RSA函數,更準確的說,給一個三元組,我們知道在不知道的因子想計算根是非常困難的。因為是有限集,因此可以枚舉的所有元素直到找到。遺憾的是,這將導致算法具有階的運行時間,即其輸入大小的指數,其為的階數。我們對運行時間更低的算法感興趣,即的階數(其中)或者是一些小的常數(比如說小于5)。實踐表明這些算法通常在所討論的輸入情況表現良好,在整篇論文中,我們將此類算法稱為高效算法。

此次課題我們主要研究RSA函數而不是RSA密碼系統。籠統地說,隨機輸入上求解RSA函數的應該是非常困難的,也就是意味著給定攻擊者無法計算出明文。這還不夠,密碼系統必須抵御更微妙的攻擊。如果給出,想從中計算出任何信息應該是非常難的,這被稱為語義安全。我們不討論這些微妙的攻擊,但是必須指出的是如上所述的RSA在語義上是不安全的:給定,可以容易地推導出關于明文的一些信息(例如,可以容易地從推導出上的的雅可比符號)。通過向加密過程添加隨機處理流程,可以保障RSA在語義上的安全性。

RSA函數是一個單向陷門函數,正向它可以很容易地計算,但是(據我們所知)除非在特殊情況下,否則在沒有陷門的情況下不能有效地反向求解的。單向陷門函數可用于數字簽名,數字簽名可以保障電子文件的真實性和不可否認性。例如,它們用于簽署數字支票或電子采購訂單。為了使用RSA對消息進行簽名,Alice使用其私鑰簽名并獲得簽名。給定之后任何人都可以驗證上的Alice簽名通過。因為只有Alice可以生成,人們可能會認為攻擊者無法偽造Alice的簽名。然而事情并非如此簡單,為了保障簽名的安全還需要一些額外的措施。數字簽名是RSA的重要應用,此次課題我們也會研究一些針對RSA數字簽名的攻擊。

RSA密鑰對可以這樣生成,選取兩個隨機位素數并將它們相乘以獲得來生成。然后,對于給定的加密指數,使用擴展歐幾里德算法計算。由于素數集是足夠密集的,因此可以通過重復選擇隨機位整數并使用概率素性測試對每個素數進行素性測試來快速生成隨機位素數。

1.1 大數分解

給了RSA公鑰,首先想到的攻擊就是分解模數,給了的因子攻擊者可以計算得到,從而也可以計算得到解密指數,我們稱這種分解模數的方法為針對RSA的暴力攻擊。雖然分解算法已經穩步改進,但是在正確使用RSA情況下,當前的技術水平仍遠未對RSA的安全性構成威脅。大整數分解是計算數學之美,不過本文研究主題并不是大整數分解。為完整起見,我們順便提一下,目前普通數字域篩法是效率最高的分解方法。分解位整數需要時間為其中,對RSA進行攻擊的方法花費時間超過這個范圍就那么吸引人了,比如暴力搜索方法,還有一些RSA發布不久后的舊方法。

我們的目的是研究在不直接分解RSA模數情況下解密消息的攻擊方法,值得注意的是,一些RSA模數的稀疏集,可以很容易地被分解,舉個例子,如果是乘積的質因子且小于,那么在小于時間內分解

如上所述,如果存在有效的因式分解算法,則RSA是不安全的,反之亦然。這是一個由來已久的公開問題:必須要有一個的因子才能有效地計算的根數?破解RSA和因式分解一樣難嗎?我們在下面提出了具體的開放性問題。

開放性問題 1

給定滿足,定義函數:。是否有多項式時間算法來計算給定的因子以及對于某個求得的一個諭言?

的諭言用于評估在單位時間內任何輸入的函數,最近Boneh和Venkatesan提供的證據表明,在比較小的情況下,上述問題的答案可能是否定的。換句話說,在比較小的情況下,可能不存在從分解到破解RSA的多項式時間縮減。他們通過實驗表明在某個模型中對小的問題的肯定答案會產生一個有效的因式分解算法。我們注意到,對開放問題1的肯定回答會引起對RSA的"選擇密文攻擊"。因此,否定的回答可能才是大家喜聞樂見的。

接下來,我們證明公開私鑰和分解是等價的。由此可見,對于知道的任何一方來說,隱藏的因式分解是沒有意義的。

事實1

為RSA的公鑰,給定私鑰可以有效地分解模數。相反地,給定的因式分解,可以有效地算出私鑰

證明

的因式分解得到,因為已知的,那么可以算出,反之亦然。我們現在證明給定可以分解。給定,計算。根據的定義我們知道的倍數。由于是偶數,其中為奇數且。對于每個都有,因此是單位模的平方根。根據中國剩余定理,1有四個平方根模。其中兩個平方根是,另外兩個是,其中滿足。用這最后兩個平方根中的任意一個,通過計算來揭示的因式分解。一個直截了當的論證表明,如果從中隨機選擇,那么序列中的一個元素,...,是統一平方根的概率至少為1/2,從而揭示了的分解,序列中的所有元素可以在時間內有效地計算,其中

2 基本攻擊

我們首先描述一些老的基本攻擊,這些攻擊說明了RSA的公然濫用情況。雖然存在許多這樣的攻擊,但我們僅舉兩個例子。

2.1 共模

為了避免為每個用戶生成不同的模數,人們可能希望一勞永逸地固定使用一個,所有用戶都使用相同的。可信的中央機構可以向用戶提供唯一的一對,用戶從其中生成公鑰和私鑰

乍一看,這似乎行得通:為Alice準備的密文無法由Bob解密,因為Bob不知道。但是,這是不正確的,由此產生的系統是不安全的。事實上,Bob可以使用他自己的指數來分解。一旦被分解,Bob就可以從她的公鑰中計算出Alice的私鑰。Simmons的這一觀察結果表明,RSA模不應被一個以上的實體使用。

2.2 盲化

是Bob的私鑰,而是他相應的公鑰。假設攻擊者Marvin想要Bob在消息上簽名。當然Bob不是傻瓜,他拒絕簽署。但是Marvin可以嘗試以下方法:他隨機選擇一個并設。然后他讓Bob在隨機消息上簽名。Bob可能愿意在看上去沒什么問題的上簽名,但是回想一下,Marvin現在簡單地計算就得到Bob在初始上的簽名

這種稱為盲化的技術使Marvin能夠在他選擇的消息上獲得有效的簽名,方法是讓Bob在隨機的"盲化"消息上簽名。Bob不知道他實際在簽名的是什么消息。由于大多數簽名方案在簽名之前對消息應用"單向散列"算法,因此此種攻擊倒不是一個嚴重的問題。盡管我們將盲化描述為一種攻擊,但它實際上是實現匿名數字現金所需的一個有用屬性(可以用來購買商品的現金,但不會透露購買者的身份)。

3 低私鑰指數

為了減少加密時間(或簽名生成時間),人們可能希望使用小值而不是隨機。由于模冪運算需要花費線性時間為,所以小可以使性能提高至少10倍(對于1024位模數而言)。不幸的是,由M.Wiener發現的一種巧妙的攻擊表明,一個小的會導致密碼系統完全被攻破。

定理2(M. Wiener)

,給定且滿足,攻擊者可以有效計算出

證明

證明基于使用連分數的逼近,由于,那么存在一個滿足。所以,

因此,的逼近,盡管Marvin不知道,但是他可能會使用去近似。因為(譯者注:),(譯者注:因為,所以,所以),我們有

使用替換,我們得到:

現在,,因為,我們知道(譯者注:可以得到)。因此我們得到:

這是一個經典的逼近關系,分數約束內非常逼近。實際上,所有類似這樣的分數都是的連分數展開的收斂。因此我們首要做的便是計算的連分數的收斂,其中一個連分數就等于。因為,我們有,因此是一個最簡分數。這是可以算出密鑰的線性時間算法。

由于通常都是1024位,因此必須至少256位長才能避免這種攻擊。這對于諸如"智能卡"之類的低功耗設備來說是不幸的,因為小就能節省大量能耗。 然而,并不是毫無辦法。Wiener提出了許多能夠實現快速解密并且不易受其攻擊影響的技術:

使用大 假設不是減小,而是使用作為公鑰,其中對于某些大

顯然,可以代替用于消息加密,當使用大的值時,上述證明中的不再小。一個簡單的計算表明,如果,那么無論多小,都無法實施上述攻擊。然而,大的值將導致加密時間的增加。

使用CRT:

另一種方法是使用中國剩余定理(CRT)。假設選擇使得都很小,比如都是128位。則可以進行如下密文的快速解密:首先計算

然后使用CRT計算滿足的唯一值.

得到的滿足等式。關鍵點在于雖然很小,但是的值可以很大,大約在的數量級上。因此,定理2的攻擊不再適用。我們注意到,如果給定了,則存在一種攻擊能夠使攻擊者能夠在時間內對進行因子分解。因此,不能太小。

我們不知道這些方法中是否都安全。我們所知道的是,Wiener攻擊對它們無效。最近由Boneh和Durfee改進的定理2證明了只要,攻擊者就可以從中有效地算出。這些結果表明Wiener的界限并不固定。正確的界限可能是。截至撰寫本文時,還是一個尚未解決的問題。

開放性問題2

,如果Marvin知道關系,他能有效算出嗎?

4 低公鑰指數

為了減少加密或簽名驗證時間,通常會使用一個小的公鑰指數的最小可能值為3,但為防止某些攻擊,建議使用。當使用值時,簽名驗證需要17次乘法,而使用隨機的時則需要大約1000次乘法。與上一節的攻擊不同,當使用一個小時,針對的攻擊不只是攻破而已。

4.1 Coppersmith定理

針對RSA低公鑰指數最有力的攻擊基于Copper-smith的一個定理,Coppersmith定理有很多應用,這里我們只討論其中的一些應用,證明使用LLL格基約化算法如下。

定理3(Coppersmith)為一個整數,次的一元多項式,設其中,在給定之后Marvin能夠有效找到所有滿足的整數,運行時間由在維數且的格上運行LLL算法所需的時間決定。

該定理為有效地求的所有小于的根提供了一種算法,當越小,算法的運行時間越短。這個定理的強大之處在于它能夠找到多項式的小根。當模數為素數時,就目前而言,找不到比使用Coppersmith定理更好的求根算法了,沒有理由不使用Coppersmith定理。

我們概述了Coppersmith定理證明背后的主要思想,我們采用由Howgrave-Graham提出的簡化方法,給定一個多項式,定義,證明依賴于下面的觀察。

引理4

次多項式,為正整數,假設,如果滿足,那么成立。

證明 從Schwarz不等式觀察到:

因為,我們得出結論

引理指出,如果是一個低范數多項式,則的所有小根也是在整數上的根。引理表明,要找到的一個小根,我們需要尋找另一個與有相同根的低范數多項式,這樣就能容易找到在整數上的根。為此,我們可以尋找一個多項式,使得具有低范數,即范數小于。這相當于尋找具有低范數多項式的整數線性組合。不過,大多數情況下,并不存在具有足夠小的范數的非平凡線性組合。

Coppersmith找到了解決這個問題的竅門:如果成立,那么對于任意則有。更一般地,定義以下多項式:

對于一些預定義的,則的一個根,其中。要使用引理4,我們必須找到多項式的一個整數線性組合,使得的范數小于 (回想一下是滿足上界)。由于范數(是而不是)的松弛上界,我們可以證明,對于足夠大的,總是存在一個線性組合滿足所要求的界。一旦被找到,引理4就意味著它有作為整數的根,因此,可以很容易地找到

如何有效地找到還有待證明,要做到這一點,我們必須說明一些關于格的基本事實。 設是線性獨立的向量。由構成的(滿秩)格的所有整數線性組合的集合。的行列式定義為方陣的行列式,它的行列式是向量

在我們的例子中,我們把多項式看作向量,并研究了它們所構成的格。設,則格的維數。例如,當是二次一元多項式且時,得到的格由以下矩陣的行構成:

元對應于我們忽略其值的多項式的系數,所有空元為零。由于矩陣是三角形的,它的行列式是對角線上元素的乘積(如上所示),我們的目標是在這個格中找到短向量。

Hermite的一個經典結論表明:任意維數為的格包含一個非零向量,它的范數滿足,其中是只依賴于的常數。Hermite的界可以用來證明,對于足夠大的,我們的格包含需求小于的范數向量。問題是我們能否有效地在中構造長度小于Hermite界的短向量。LLL算法是一種有效的算法,恰好可以做到。

事實5(LLL)

是由所構成的格。當作為輸入時,LLL算法輸出一個向量滿足:

LLL算法的運行時間是輸入長度的四分之一。

LLL算法(以其發明者L. Lovasz、A. Lenstra和H. Lenstra Jr的名字命名)在計算數論和密碼學中有許多應用。它在1982年的發現為整數上多項式的因式分解提供了一種有效的算法,更廣泛地說,為數環上的多項式的因式分解提供了一種有效的算法。LLL算法經常被用來攻擊各種密碼系統,例如,許多基于"背包問題"的密碼系統都是使用LLL算法破解的。

利用LLL算法,我們可以完成Coppersmith定理的證明。為了保證LLL算法產生的向量滿足引理4的界,我們需要滿足:

其中的維數。常規計算表明,對于足夠大的,能滿足約束條件。實際上,當時,取就足夠了。因此,運行時間主要由在維數為的格上運行LLL算法所決定。

一個自然而然的問題,Coppersmith定理能否應用于二元和多元多項式。如果有根且有適當的界,Marvin能有效地找到嗎?盡管相同的技術似乎適用于某些二元多項式,但目前還是一個有待證明的開放性問題。隨著越來越多的結果依賴于Coppersmith定理的二元擴張,所以嚴密的算法將會非常有用。

開放性問題3

找出Coppersmith定理可以推廣到二元多項式的一般條件。

4.2 Hastad廣播攻擊

作為Coppersmith定理第一個應用,我們對由Hastad提出的舊攻擊進行了改進。假設Bob希望將加密消息發送給多方。每一方都有自己的RSA密鑰。我們假定比所有都小。Bob為了發送,天真地使用每個公共密鑰對其進行加密,并將第個密文發送給。攻擊者Marvin可以竊聽Bob對外的連接,并收集傳輸的個密文。

為了簡單起見,假設所有公鑰指數為3。一個簡單的論證表明,當時,Marvin可以計算出。實際上,Marvin得到,其中:

對于所有的,我們可以假設,否則Marvin可以因式分解一些。因此,將中國剩余定理(CRT)應用于,給出的滿足。由于小于所有的,我們有,那么在整數上成立,因此,Marvin可以通過計算的實數立方根來得到。更一般的情況是,如果所有的公鑰指數都等于,則只要,Marvin就可以計算出。不過這種攻擊只有使用較小的值時才是可行的。

Hastad提出了一種更強的攻擊方法。為了抵御Hastad的攻擊,考慮一下對上述攻擊做一下天真防御。Bob可能在加密之前"填充"消息,而不是廣播加密的。例如,如果位長的,Bob可以將發送給。由于Marvin獲得了不同消息的加密,他無法發起攻擊。然而,Hastad證明了這種線性填充是不安全的,事實上,他證明了在加密之前對消息應用任何固定多項式都不能阻止攻擊。

假設對于每個參與者,Bob有一個固定的公用多項式。為了廣播消息,Bob將的加密發送給。Marvin通過竊聽知道了,其中。Hastad表明,如果有足夠的參與方,Marvin可以從所有的密文中計算出明文。下面的定理是Hastad原始結論的一個更強的版本。

定理6 (Hastad)是成對的相對素數,集合。設次多項式。假設存在唯一的滿足:

假設,給定,我們可以有效地找到的

證明,我們假定所有的都是一元的。(實際上,對于某些的首項系數在中是不可逆的,那么的因式分解就會顯現出來。通過將每個乘以的適當冪,假定它們都有次。構造多項式:

其中是整數,被稱為中國剩余系數。那么一定是一元的,因為它首項模了所有的,且次數為。此外,我們還知道。定理6現在便可由定理3推導而來,因為

該定理表明,如果提供了足夠多的方程,可以有效地求解以相對素數復合模的一元方程組。令,我們可以知道,當參與方數至少為時,Marvin可以從給定的密文中計算出,其中在所有上的最大值。特別地,如果所有的都等于,并且Bob發送線性相關的消息,那么Marvin只要就可以算出明文。

Hastad的原始定理比上述定理更弱。與次多項式不同,Hastad定理需要次多項式。Hastad定理的證明類似于上一節中提到的Coppersmith定理證明。由于Hastad定理沒有在格中使用的冪,從而得到了一個較弱的界。

總結這一節,我們注意到,要正確地防御上述廣播攻擊,必須使用隨機填充方法,而不是使用固定填充方法。

4.3 Franklin-Reiter相關消息攻擊

當Bob用相同的模數發送與Alice相關的加密消息時,Franklin和Reiter發現了一種聰明的攻擊。是愛麗絲的公鑰,假設是兩個不同的消息,對于某些已知的多項式滿足。為了將發送給Alice,Bob可能會天真地對消息進行加密,并傳輸得到的密文。我們通過證明可以知道,在給定的情況下,Marvin可以很容易地計算出。雖然攻擊對任意小都有效,但為了簡化證明,我們給出了的引理。

引理7(FR)

為RSA公鑰。設對于的線性多項式滿足。然后,給定,Marvin可以在的平方時間內計算出

證明

為了保證這部分證明的一般性,我們使用任意來表示它(而不是限制為)。由于,我們知道是多項式的根。同樣,也是的根。線性因子是兩個多項式的除法。因此,Marvin可以使用歐幾里德算法來計算的最大公約數(Greatest Common Divisor, GCD)。如果GCD是線性的,則可以找到。GCD可以在的平方時間內算出。

我們證明了當時,GCD一定是線性的。多項式因子將都模成一個線性因子和一個不可約二次因子(因為,所以中只有一個根)。因為不能整除,所以GCD一定是線性的。對于情況,GCD幾乎總是線性的。然而,對于一些罕見的,有可能得到一個非線性的GCD,在這種情況下攻擊會失敗。

對于情況,攻擊所需時間是的平方時間。因此,只有在使用小的公鑰指數時才能應用這種攻擊。對于大型電子計算機來說,計算GCD的工作令人望而卻步。一個有趣的問題(盡管可能很難),為任意的設計這樣的攻擊,尤其是能否在的多項式時間中找到上述的GCD?

4.4 Coppersmith短填充攻擊

Franklin-Reiter的攻擊可能看起來有點人為。畢竟,為什么Bob要給Alice發送相關消息的加密呢?Coppersmith加強了攻擊,并證明了一個關于填充攻擊的重要的結論。

隨機填充算法可以通過將一些隨機位附加到其中一個端來填充明文,但是以下攻擊指出了這種簡單填充的危險。假設Bob向Alice發送了正確填充的加密。攻擊者Marvin攔截密文并阻止其到達目的地。Bob注意到Alice沒有回復他的消息,并決定將重新發送給Alice。他隨機填充并傳輸生成的密文。Marvin現在有兩個密文,對應于使用兩種不同隨機填充對同一消息的兩次加密。以下定理表明,雖然他不知道使用的填充算法,但Marvin仍能夠算出明文。

定理8

為RSA公鑰,其中的長度為是位。令集合。設是長度最長為位的消息。定義,其中是分別為的整數。如果Marvin知道了的加密(但不知道),則他可以有效地計算出M。

證明

定義,我們知道當時,這些多項式有相同的根。換句話說,是結式的根。的次數最多是。此外有,因此的一個小根,而Marvin可以利用Coppersmith定理(定理3)有效地求出這個根。一旦已知,便可以使用上一節的Franklin-Reiter攻擊算出,從而得到

時,只要填充長度小于消息長度的,就可以進行攻擊。這是一個重要的結論。注意,對于建議值,對于標準的模數大小來說,這種攻擊是無用的。

4.5 部分密鑰泄露攻擊

為RSA私鑰,假設Marvin通過某種方式知道了的一部分,比如說四分之一。他能得到剩下的部分嗎?當相應的公鑰指數很小時,答案是肯定的,令人驚訝吧。最近,Boneh,Durfee和Frankel證明了只要,就有可能從它的一小部分位算出的所有部分。可見結論說明了保護整個RSA私鑰的重要性。

定理9 (BDF)

為RSA私鑰,其中長度為位.。給定最小有效位,Marvin可以在的線性時間算出

證明依賴于另一個完美精妙的Coppersmith定理。

定理10 (Coppersmith)

是一個位RSA模。然后,給定最小有效位或最有效位,可以有效地將分解。

定理9很容易從定理10推理出來,事實上,根據的定義,存在一個整數,使得:

由于,我們必有。對方程模進行約化,設,得到:

由于Marvin知道了最小有效位,他知道的值,因此,他得到了一個關于的方程。對于的每一個的可能值,Marvin求解的二次方程,并能得到了的一些候選值。對于這些候選值,他運用定理10嘗試去分解。可以證明的候選值的總數最多為,因此,在最多次嘗試之后,將被分解。

定理9被稱為部分密鑰泄露攻擊,對于更大的值,只要,也存在類似的攻擊,不過,要實現此種攻擊的技術有點復雜。有趣的是,基于離散日志的密碼系統,如ELGamal公鑰系統,似乎不容易受到部分密鑰泄漏攻擊的影響。事實上,如果給出的常數部分,則沒有已知的多項式時間算法來計算的其余部分。

為了總結這一節,我們將證明當加密指數很小時,RSA系統會泄漏相應私鑰一半的最高有效位。要了解這一點,再考慮一個方程,其中的整數。給定,Marvin可以很容易地計算出:

之后:

因此,的很好的近似值。該界表明,對于大多數中一半的最高有效位與相同。由于只有個可能的值,因此Marvin可以構造一個大小的小集合,使得集合中的一個元素等于的一半最高有效位的。的情況特別有趣,在這種情況下,可以知道,系統完全泄漏了的一半最高有效位。

5 執行攻擊

我們將注意力轉向另一類完全不同的攻擊。這些攻擊不是攻擊RSA函數的底層結構,而是專注于RSA的實現。

5.1 時序攻擊

想一下存儲RSA私鑰的智能卡,由于卡是防篡改的,攻擊者Marvin可能無法審閱其內容并使其泄露出密鑰。然而,Kocher的一個巧妙攻擊表明,通過精確測量智能卡執行RSA解密(或簽名)所需的時間,可以快速發現私有解密指數

我們將解釋如何使用"重復平方算法"對一個簡單的RSA實現進行攻擊。設的二進制表示(即)。基于的觀察基礎,我們可以知道用重復平方算法來計算最多使用次模乘,算法是如下工作的:

等于等于1,對于,執行以下步驟:

(1)如果,令等于

(2)令等于

最后,有值為

時,變量遍歷值的集合,變量在集合中"收集"適當冪以獲得

為了發起攻擊,Marvin要求智能卡在大量隨機消息上生成簽名,并測量每個簽名生成所需的時間

攻擊從最低有效位開始一次一個地算出的比特位。我們知道是奇數,因此。考慮第二次迭代。最初。如果,則智能卡會計算乘積,否則,它是不會計算的。設是智能卡計算所花費的時間。由于計算的時間取決于的值,因此彼此不同(簡單模約化算法需要不同的時間,取決于所減少的值)。一旦Marvin獲得智能卡的物理規格,之后他便會測量得到(在發起攻擊之前)。

Kocher觀察到當時,兩個集合是相關的。例如,如果,對于某些比預期的要大得多,那么也可能大于預期。另一方面,如果,則兩個集合表現為獨立的隨機變量。通過測量相關性,Marvin可以確定是0還是1。繼續使用這個方法,他可以很快得到。注意,當使用低公鑰指數時,上一節的部分密鑰泄露攻擊表明,使用Kocher的時序攻擊,只需要知道的四分之一的位就行。

有兩種方法可以抵御攻擊。最簡單的是添加適當的延遲,以使模冪運算總是要花費一定的時間。第二種方法是由Rivest提出的基于盲化的方法。在解密M之前,智能卡選擇一個隨機的并計算,然后將應用于上并獲得,最后,令。通過這種方法,將應用于Marvin不知道的隨機消息上,這樣的話,Marvin就不能發起攻擊了。

Kocher最近在這些線路上發現了另一種叫做功率密碼分析的攻擊。 Kocher表明,通過在簽名生成過程中精確測量智能卡的功耗,Marvin通常可以輕松發現密鑰。事實證明,在多精度乘法期間,卡的功耗高于正常值。通過測量高消耗周期的長度,Marvin可以很容易地確定在給定的迭代中卡是執行一次還是兩次乘法,從而暴露出的比特位。

Kocher最近發現了另一種類似的攻擊,稱為能量分析攻擊。Kocher指出通過精確測量智能卡在簽名生成過程中的功耗,Marvin通常可以很容易地得到秘密密鑰。結果表明,在多精度乘法過程中卡的功耗會高于正常值,通過測量高消耗周期的長度,Marvin可以很容易地確定在給定的迭代中卡是否執行一次或兩次乘法,從而得到的比特位。

5.2 隨機故障

RSA的解密和簽名的實現經常使用中國剩余定理來加速的計算,簽名者Bob為了替換模的工作,先計算簽名模的結果,然后利用中國剩余定理將結果結合起來。更準確地說,Bob首先計算:

其中。然后,他得到簽名通過令:

其中:

兩個指數相比,CRT最后一步的運行時間可以忽略不計。注意的一半長,然后由于乘法的簡單實現需要平方時間,所以模的乘法速度是模的4倍,而且,的一半長,計算的速度是計算的8倍,因此,整個簽名時間減少了四倍,許多實現都使用這種方法來提高性能。

Boneh,DeMillo和Lipton觀察到使用CRT方法有內在的危險。假設在生成簽名時,Bob的計算機上的一個小故障導致它在一條指令中錯誤計算。例如,在將寄存器中的值從一個位置復制到另一個位置時,其中一個比特位被翻轉了。(故障可能是由環境電磁干擾引起的,也可能是由于罕見的硬件缺陷造成的,比如早期版本的奔騰芯片。)

Marvin得到了無效的簽名給定之后可以很容易地對Bob的模數進行分解。

正如A. K. Lenstra所說,我們發現了一個新的攻擊。假設在Bob生成簽名時發生單個錯誤,那么,中將有一個被錯誤地計算。如果說是正確的,那么就會不正確,得到的簽名為。一旦Marvin獲取到了,通過計算,他就知道這是一個錯誤的簽名。然而注意到:

因此,便是的一個非平凡因子。

要使攻擊奏效,Marvin必須對有充分的了解。也就是說,我們假設Bob不使用任何隨機填充方法,簽名前的隨機填充可以防御此種攻擊,對于Bob來說,一個更簡單的防御方法是在將生成的簽名發送給全世界之前檢查生成的簽名。當使用CRT加速方法時,檢查是特別重要的。隨機故障攻擊對許多密碼系統都是有害的,許多系統,包括RSA的非CRT實現,都可以使用隨機故障進行攻擊。不過,這些結論更多的是理論性的。

5.3 Bleichenbacher對PKCS 1的攻擊

位RSA模,位消息,其中。在應用RSA加密之前,一般會通過向其添加隨機位,將消息填充到位。公鑰加密標準1(Public Key Cryptography Standard 1, PKCS 1)的舊版標準就是使用的這種方法。填充后,消息如下所示:


02 隨機位 00 M


生成的消息長度為位,并直接使用RSA加密。包含"02"的初始塊長度為16位,從上圖可看出已在消息中添加了隨機填充。

當運行在Bob的機器上應用程序(例如,Web瀏覽器)接收到消息時,會對其進行解密,檢查初始塊,并去掉隨機填充。但是,一些應用程序會檢查"02"初始塊,如果不存在,就會返回一條錯誤消息,說明"無效的密文"。Bleichenbacher表示這個錯誤消息可能導致災難性的后果:攻擊者Marvin可以使用錯誤消息解密他所選擇的密文。

假設Marvin截獲了一個針對Bob的密文,并希望對其進行解密。為了發動攻擊,Marvin隨機挑選了一個,計算,并將發送到Bob的機器。運行在Bob的機器上的應用程序接收并嘗試解密它。它要么用錯誤消息進行響應,要么根本不響應(如果的格式正確的話)。因此,Marvin知道解密過程中16位最高有效位是否等于02。實際上,Marvin有這樣的諭言,對于他選擇的任何,他都可以測試解密的16位最高有效位是否等于02。Bleichenbacher證明了這樣的諭言足以解密

6 結論

對RSA系統進行了20年的研究以來,產生了一些有見地的攻擊,但還沒有發現破壞性的攻擊。到目前為止發現的攻擊主要說明了在實現RSA時需要避免的陷阱,目前看來,可以信任正確的RSA密碼系統實施來提供數字世界中的安全性。我們將針對RSA的攻擊分為四類:(1)利用系統公然誤用的基本攻擊;(2)低私鑰指數攻擊,此種攻擊非常嚴重,絕不能使用低私鑰指數;(3)低公鑰指數攻擊;(4)對RSA系統執行時的攻擊。這些持續不斷的攻擊說明,我們對基本數學結構的研究還是不夠的。另外,Desmedt和Odlyzko、Joye和Quisquater以及DeJonge和Chaum還提出了一些額外的攻擊。在整篇論文中,我們觀察到通過在加密或簽名之前正確填充消息可以防御許多攻擊。

致謝

我要感謝Susan Landau鼓勵我撰寫調查問卷,感謝Tony Knapp幫忙編輯手稿。我還要感謝在早些時候Mihir Bellare、Igor Shparlinski和R. Venkatesan對草案發表的評論。


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/727/