RSA算法詳解


測試產品的時候,對簽名跟認證很是熟悉。但是對RSA的原理,以及秘鑰的關系還是有原理性方面的欠缺。
本文梳理下RSA的加解密流程,以及秘鑰的對應關系
關於RSA的認證跟加密的應用,采用如下的方式
認證:私鑰簽名,公鑰認證
加密:公鑰加密,私鑰解密

RSA算法流程

RSA算法的的原理簡單來說就是將一個很大的質數M,很難分解為兩個質數a,b,並且a*b=M

詳解請參照:
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

  • 生成秘鑰

    1. 選擇兩個不相等的質數p,q
    2. 計算p,q的乘積n
    3. 計算n的歐拉函數φ(n)=(p-1)*(q-1),計算出來的值就是不大於n且與n互質的整數個數
    4. 選擇一個與φ(n)互質的整數e,且1<e<φ(n)
    5. 計算e對於φ(n)的模反元素d,計算公式d*e≡1(mod(n))。
    6. 公鑰(n,e),私鑰(n,d)。
    7. 銷毀p,q
  • 加解密

    • 加密
      • 發送方向接收方發送明文信息m,發送方使用公鑰(n,e)依照如下公式加密:
        m^e=c(mod n)
        m必須是整數,且小於n。根據上面的公式可以算出密文C
    • 解密
      • 接收方獲取密文c,使用自己的私鑰(n,d)依照如下公式解密
        c^d=m(mod n)
        c,d,n已知,可以算出明文m

從上面的秘鑰生成流程中,我們可以發現
如果p,q都銷毀了,很難通過公鑰(n,e)獲取私鑰(n,d).反之亦然。以為公式中的φ(n)=(p-1)(q-1),通過n很難得到p,q是本算法的基礎
但是通常我們使用的tool生成的私鑰中,包含了公鑰信息。所以可以通過私鑰獲取公鑰

示例

  1. 隨機選擇兩個不相等的質數47和59
  2. 二者的乘積為43×57=2773,2773轉化為二進制為1010,1101,0101,長度為12位,所以密鑰的長度為12位
  3. 根據歐拉函數公式φ(n)=n(1-1/p)(1-1/q)計算,φ(2773)= 2773×(1-1/47)(1-1/59)=(47-1)(59-1)=2668
  4. 隨機選擇一個整數e=63,2668>63>1,並且63與2668互質
  5. 計算63對於2668的模反元素d,根據公式ed≡1(mod φ(n)),有63d-1=2668k,由歐幾里得擴展公式計算d=847
  6. 公鑰(n,e)=(2773,63),私鑰(n,d)=(2773,847)

  • 加密
    根據上面計算出的公鑰(n,e)=(2773,63),假如m=244,根據公式m^e=c(mod n),可計算出密文c=465
  • 解密
    根據上面計算出的私鑰(n,d)=(2773,847),已知c=465,根據公式c^d=m(mod n),可計算出明文m=244


免責聲明!

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



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