加密:C=Me(mod n)
解密:M=Cd(mod n)
安全性基礎:

窮舉法攻擊:
1.攻擊者設計一個M,C=Me(mod n)
2.d的個數至多有n-1個,嘗試使用每個d破解,如果M’=Cd‘(mod n)=M,d’是解
3.設p,q分別為100位(十進制),則n-1約200位(十進制) n=10200
4.假定每秒可以做一億次搜索(108),每年可以搜索108*60*60*24*365=3*1015
搜索10200個密鑰的時間為100200/(3*1015)=3*1015=10184年
計算上不可行。
分析RSA鎖結構
d=e-1mod (Φ(n)) 即 de=1 mod (Φ(n))
問題為:已知e,Φ(n)未知,求d
如果Φ(n)知道,則求d就很容易了
問題變為:已知n,求Φ(n)
求法1:直接求,當n很大,計算Φ(n)很困難,不可行
求法2:利用n=pq,(p,q是素數),Φ(n)=(p-1)(q-1)計算很容易
問題變為:已知n,求n=pq,(p,q是素數) 即數的素分解問題
素因子分解的復雜性:
目前因子分解速度最快的方法的時間復雜度是exp(sqrt(ln n lnln n))
2007年3個機構(EPFL,波恩大學,日本電話電報公司)設計的計算機集群成功分解307位十進制的數21039-1
所以說RSA的安全性依賴於分解大數的難度?數學上還未能證明只有分解大數n才能從C和e中計算出M(即RSA的安全性與大數分解等價)。所以說上面的說法只是一個假定,不過目前為止也未能證明它的錯誤。
即便無法有效破解RSA算法,但還有一些別的辦法是針對協議進行攻擊的。
A竊聽B的通訊,獲得c=me mod n,A的目標是解出m
1.A選一個r,計算x=re mod n (即r=xd mod n)
2.計算y=xc mod n
3.計算t=r-1 mod n
4.A讓B在y上簽名,u=yd mod n
5.A計算 tu mod n=r-1yd mod n
=r-1xd cd mod n
=r-1red cd mod n
=cd mod n = m
問題出現在B對不明信息簽名。
怎么解決:從算法上無法解決,主要措施是采用好的公鑰協議
1.工作過程中實體不輕易對其他實體任意產生的信息加解密,不對一無所知的信息簽名
2.對其他實體送來的隨機文檔簽名時首先對文檔作HASH處理
還有其他一些問題:
1.如果p,q比較接近
2.系統采用公共模數,n一直不變
這樣的系統在數學上被證明更容易被破解。
尋找合適的素數:
1.尾數除法,取一數p,用2到該數的平方根之間的每一個素數去除該數,如果都不能整除,該數就是素數。
2.Fermat方法
3.Lehmann測試法
4.Miller-Rabin測試法
...
