RSA算法淺析

概述

  RSA算法是第一個能用於加解密和數字簽名的非對稱加密算法。RSA的命名是以其提出者姓氏的首字母組合而成,Ron Rivest、Adi Shamir和Leonard Adleman。關於RSA的小小插曲,1983年麻省理工學院在美國爲RSA算法申請了專利。這個專利2000年9月21日失效。由於該算法在申請專利前就已經被髮表了,在世界上大多數其它地區這個專利權不被承認。最近正好在學習知識產權法,正好順便可以複習一下偷笑。回到正題,密碼分析人員對RSA算法的安全性無法證明,所以也不能否認它的安全性。


預備知識

  非對稱密碼學:在非對稱密碼學中,密鑰被分爲兩類,公鑰和私鑰。公鑰和私鑰中的一方都可以作爲公開的一

方,通過某種方公開傳遞給對方,而另一方進行妥善的保管,作爲私有的密鑰。發送方可以用人人皆知的接收方公開密鑰對發送的信息進行加密,安全的傳送給接收方,然後由接收方用自己的私有密鑰進行解密。非對稱加密方式可以使通信雙方無須事先交換密鑰就可以建立安全通信,廣泛應用於身份認證、數字簽名等信息交換領域。


  歐拉定理:若整數gn互素,則gj(n) ≡ 1(mod n);其中j(n)爲比n小,但與n互素的正整數個數,稱爲j(n)爲歐拉函數。


  按照我的理解是,如果n爲素數,則j(n)=(n-1);否則,n=pqj(n)=(p-1)(q-1),其中p,q互素。在這裏就有一個


讓我從小就沒明白的問題1究竟是不是素數,1和其他數是否互爲素數。所以我暫且就是按照我的理解來計算的j(n)。


  補充說明:經過一些考證,發現,1確實是素數,並且1和任何非零數都互質。所以在計算j(n)的時候,就必須考

慮的一點是,選擇的p,q不要是1,不然計算就會很悲劇了。而在實際的RSA算法中,是隨機選擇兩個互素的數p,q來計

算公鑰和私鑰的。


算法描述

RSA的算法描述如下:

  公鑰私鑰的產生

  1. 選取兩個大的互異素數p和q
  2. 計算n=p*q,j(n)=(p-1)(q-1)
  3. 選擇整數e使gcd(j(n),e)=1 ,1<e<j(n),(gcd(a,b)表示非負整數a,b的最大公因子).公鑰Pk={e,n}
  4. 計算d,使得de = 1 (modj(n)).私鑰Sk={d,p,q}

  加密變換:對明文m, 1<m<n, 加密後的密文爲 c = me(mod n)

  解密變換:對密文c, 1<c<n, 解密後的明文爲 m = cd(mod n)

  對於算法的證明我沒有進行深入的研究,在此就不加以說明了。


  補充說明:一開始在理解RSA算法的時候,並不能理解的是歐拉定理在RSA算法中的作用究竟是什麼。實踐說明,

沒有經過計算,只是一直看一直觀察是得不出結論的。所以,我進行了一系列的計算,發現了RSA算法的解密過程是

需要用到歐拉定理的。我在開始看的時候只是把它當成一個公式來看待的所以沒有發現這一點。

  

首先我們來看加密的過程:c = m^e(mod n)
接着是解密了,可以經過下列的步驟得到明文m = c^d(mod n):
c^d = m^(e*d) (mod n) = m^(k*j(n) + 1) (mod n) = m*m^(k*j(n))(mod n)
根據歐拉定理可以知道,m^j(n) = 1 mod n
所以上面的式子c^d = m (mod n) ,繼而可以得到m = c^d (mod n).


舉例說明

我用了安全概論老師PPT中的一個例子進行計算,來體現RSA算法的計算過程。

  • 設p=7,q=17
  • n=7*17=119;φ(n)=(7-1)(17-1)=96;
  • 選擇e=7,gcd(7,96)=1;得到公鑰Pk={7,119};
  • 計算d,( d*e) mod 96=1; d=55;得到 私鑰Sk={55,7,17};

設:明文m=19

            加密:  19^5 mod 119 = 26

            解密:   26^55 mod 119 = 19

到這裏,就把RSA的計算過程走了一遍。


RSA算法的安全性

RSA算法的安全性是依賴於大數分解的。所以一般認爲只要n足夠大,密碼攻擊者就沒有辦法對其進行破解了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章