RSA加密算法


一、前言

  RSA算法是一種非對稱的加密算法,它通常是先生成一對RSA密鑰,其中之一是保密密鑰(私鑰),由用戶保存;另一個為公開密鑰(公鑰),
可對外公開;
要加密傳輸內容時,比如A要給B傳輸信息,此時A先用B的公鑰將內容加密后傳輸,B收到A傳輸過來的信息后用自己的私鑰解密.


該過程中,只要B不泄露自己的私鑰,那么就算第三方截取到了該信息,沒有B的私鑰也無法解密獲得內容信息.
RSA算法的安全性依賴於大數分解,計算兩個大素數的乘積很容易,但是反過來由該乘積分解成兩個素數相乘,如果該乘積夠大的話,分解的難
度是極其大的.正式進入RSA算法的討論之前,先來了解一下歐拉函數、歐拉定理、模反元素.

二、歐拉函數

2.1 什么是歐拉函數

  歐拉函數是小於x的整數中與x互素的數的個數,一般用φ(x)表示。特殊的,φ(1)=1.

2.2 如何計算歐拉函數

  通式:φ(n)=n*(1-1/p1)*(1-1/p2)*(1-1/p3)*(1-1/p4)*…*(1-1/pn),其中p1, p2……pn為n的所有素因數,n是不為0的整數.

2.3 歐拉函數的一些性質  

  1. 對於素數p,φ(p)=p−1
  2. 若p為素數,n=p^k,則φ(n)=p^k-p^(k-1)
  3. 歐拉函數是積性函數,但不是完全積性函數;若m,n互素,則φ(m∗n)=φ(m)∗φ(n),特殊的,當m=2,n為奇數時,φ(2*n)=φ(n)
  4. 當n>2時,φ(n)是偶數
  5. 小於n的數中,與n互素的數的總和為:φ(n) * n / 2 (n>1)
  6. n=dnφ(d),即n的因數(包括1和它自己)的歐拉函數之和等於n

三、歐拉定理

  歐拉定理是指:如果兩個正整數a和n互素,則n的歐拉函數φ(n)可以讓下面的式子成立:
           
即a的φ(n)次方減去1,可以被n整除. 比如,3和4互質,φ(4)=2,(3^2-1)/4=2. 當a為正整數,n為素數且a不能被n整除時,則有

           a^(n-1) ≡ 1 (mod n)

這就是費馬小定理.

四、模反元素

  如果兩個正整數a和n互素,那么一定可以找到整數b,使得 ab-1 被n整除,或者說ab被n除的余數是1. 這時,b就叫做a對模數n的模反元素.
           
歐拉定理可以用來證明模反元素必然存在,如下圖,可以看到:a的 φ(n)-1 次方,就是a對模數n的模反元素.
            
 
         
 
        

五、RSA算法

5.1 密鑰的生成過程

  • 1. 隨意選擇兩個大的素數p和q,p不等於q,計算n = pq.
  • 2. 根據歐拉函數的性質3,求得r=φ(n)=φ(p)φ(q)=(p-1)(q-1).
  • 3. 選擇一個小於r的整數e,且e與r互素;並求得e關於r的模反元素,命名為d.(模反元素存在,當且僅當e與r互質; 求d令ed≡1(mod r))
  • 4. 將p和q的記錄銷毀

  其中(n,e)是公鑰,(n,d)是私鑰. 例如:

  • 1. A隨機選兩個不相等的質數61和53,並計算兩數的積n=61*53=3233,n的長度就是密鑰長度。3233的二進制是110010100001,一共12位, 
  •    所以這個密鑰就是12位. 實際應用中,RSA密鑰一般是1024位,重要的場合是2048位.
  • 2. 計算n的歐拉函數; φ(n)=(p-1)(q-1)=60*52=3120.
  • 3. A在1到3120上隨機選擇了一個隨機數e=17,與3120互素.
  • 4. 計算e對φ(n)的模反元素d,即時,ed-1=kφ(n)。
  • 即使求解:17x+3120y=1.用擴展歐幾里得算法求解。可以算出一組解(x,y)=(2753,-15),即d=2753. 公鑰(3233, 17),私鑰(3233,2753)

  至此完成計算.

5.2 RSA的可靠性

    在RSA私鑰和公鑰生成的過程中,共出現過p,q,n,φ(N),e,d,其中n,e組成公鑰,其他的都不是公開的,一旦d泄露,就等於私鑰泄露;

  那么能不能根據n,e推導出d呢?

    1. ed ≡ 1(mod φ(n)) 只有知道e和φ(n),才能算出d 

    2. φ(n)=(p-1)(q-1) 只有知道p和q,才能算出φ(n)

    3. n=pq,只有將n分解才能算出p和q

  所以,只有將n素因數分解,才能算出d; 也就意味着私鑰破譯. 但是,大整數的質因數分解是非常困難的. 所以理論上來說,如果我們找到

  了快速對大整數進行質因數分解的方法,那么RSA加密也就沒什么安全性可言了;遺憾的是,目前數學上並沒有找到這樣快速的質因數分解方法.

5.3 RSA的加密過程

    假設A要向B發送加密信息m,他就要用B的公鑰(n,e)對m進行加密,但m必須是整數(字符串可以取ascii值或unicode值),且m必須小

  於n. 所謂加密就是計算下式的c:

    m^e ≡ c (mod n)

  假設m=65,B的公鑰(3233,17),所以等式如下:

    65^17≡2790(mod 3233)

  所以c等於2790,A就把2790發給B.

5.4 RSA的解密過程

    B收到A發來的2790后,就用自己的私鑰(3233,2755)進行解密

      c^d ≡ m (mod n)

  也就是c的d次方除以n的余數就是m

      2790^2753 ≡ 65 (mod 3233)

  因此得到原文65. 

 六、解密可靠性的證明

  即證明由 c^d ≡ m (mod n) (1)解密出的m一定是正確的消息.

  

  證明: 加密公式為 m^e ≡ c (mod n),由該公式可以得到

                c = m^e - nk  (2) 

  將(2)代入(1)中,可以得到

           (m^e - nk)^d ≡ m (mod n) 

  簡化之,得到:

          m^(ed) ≡ m (mod n)(3)

  已知:ed ≡ 1(mod φ(n)),由該式子可以得到

            ed = hφ(n)+1   (4)

  將(4)代入(3)中,可以得到

          m^(hφ(n)+1) ≡ m (mod n) (5)

  只要證明(3)(或(5))成立即可. 接下來分為 m、n 互素和 m、n 不互素兩種情況討論

  I. m、n互素    

  由歐拉定理可以知道 m^φ(n) ≡ 1 (mod n)

    證明:m^(hφ(n)) ≡ 1 (mod n) 

    

  

      m^(hφ(n)) ≡ 1 (mod n) 

  即

      (m^(hφ(n)))*m ≡ m (mod n)

  即 

       m^(hφ(n)+1) ≡ m (mod n) 

  所以當m、n互素時(5)成立.

  II. m、n不互素

  由於n=pq,且p、q均為素數,由歐拉定理,有:

     (p)^(q-1) ≡ 1 (mod q) 

  又m、n不互素,則必有m=kp或m=kq;以 m = kp為例,此時k、p必然互素,又由歐拉定理,有:

     (k)^(q-1) ≡ 1 (mod q) 

  證明:(kp)^(q-1) ≡ 1 (mod q) 

    

  即 (kp)^(q-1) ≡ 1 (mod q),進一步得到

      [(kp)^(q-1)]^[h(p-1)] × kp ≡ kp (mod q)

  即 

      (kp)^(ed) ≡ kp (mod q) 

  即 

      (kp)^(ed) = kp + tq

  兩邊同時除以p,得到

    [(k)^(ed)]*[(p)^(ed-1)] = k + (tq)/p

  這時t必然能被p整除,即 t=t'p

      (kp)^(ed) = t'pq + kp

  因為 m=kp,n=pq,所以

      m^(ed) ≡ m (mod n)

  於是(3)得到證明. 證畢!

 七、參考資料

https://blog.csdn.net/liuzibujian/article/details/81086324        

https://blog.csdn.net/qq_36056315/article/details/7990229 

https://baike.baidu.com/item/模反元素/20417595?fr=aladdin

https://blog.csdn.net/gao131360144/article/details/79966094

http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM