RSA算法原理


RSA

RSA是目前最有影響力的公鑰加密算法,公開密鑰密碼體制就是使用不同的加密密鑰與解密密鑰,是一種“由已知加密密鑰推導出解密密鑰在計算上是不可行的”密碼體制。

算法原理

RSA公開密鑰密碼體制的原理是:
根據數論,尋求兩個大素數比較簡單,而將它們的乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰

算法描述

  1. 任意選取兩個不同的大素數pq,這兩個值越大,破解RSA越困難,而執行加密和解密所用時間也越長。
    計算乘積n = p*qz = (p-1)(q-1)
  2. 選擇一個小於 n 的數e,且 e 和 z 互質(沒有非1的公因數)(此時 e 和 z 互素)。使用字母 e 表示是因為這個值將被用於加密。
  3. 求一個數d,使得 ed -1 可以被 z 整除。使用字母 d 表示是因為這個值將被用於解密。即給定 e ,我們選擇 d ,使得
    ed mod z = 1
  4. 得到公鑰 \(K_B^+=(n,e)\) 和私鑰 \(K_B^-=(n,d)\)

說明:
eEncryption(加密)的首字母,dDecryption(解密)的首字母,nNumber(數字)的首字母。

加解密過程

能夠實現加解密這個恆等式(模運算性質)很有用    \((a\;mod\;n)^d\;mod\;n\;=\;a^d\;mod\;n\)

  1. 加密
    假設A向B發送一個由整數m表示的比特組合,且 m < n 。為了進行編碼,A利用公鑰 \(K_B^+=(n,e)\) 執行指數運算 \(m^e\) ,然后計算 \(m^e\) 被 n 除的整數余數c。密文c的比特模式發送給B。

\[c\;=\;m^e\;mod\;n \]

  1. 解密
    要求B使用私鑰 \(K_B^-=(n,d)\)計算

\[c^d\;mod\;n=m \]

工作原理

在RSA加密過程中,一個報文m(唯一地表示為整數)使用模n算術做e次冪運算,即

\[c\;=\;m^e\;mod\;n \]

解密則先對該值執行d次冪運算,再做模n運算。因此先加密再解密的結果就是

\[(m^e\;mod\;n)^d\;mod\;n=m \]

下面我們來看看關於這個量能夠得到什么。正如前面提到的,模算術的一個重要性質是對於任意值 a 、n 和 d 都有\((a\;mod\;n)^d\;mod\;n\;=\;a^d\;mod\;n\) 。因此在這個性質中使用\(a=m^e\),則有

\[(m^e\;mod\;n)^d\;mod\;n\;=\;m^{ed}\;mod\;n \]

因此剩下證明 \(m^{ed}\;mod\;n=m\),為了證明這一點,需要用到數論中一個相當神奇的結論:如果 p 和 q 是素數,且有 n = p * q 和 z = (p-1)(q-1) ,則\(x^y\;mod\;n\)\(x^{y\;mod\;z}\;mod\;n\)是等同的。應用這個結論,對於 x=m 和 y=ed ,可得

\[m^{ed}\;mod\;n\;=\;m^{ed\;mod\;z}\;mod\;n \]

但要記住,我們是這樣選擇e和d的,即ed mod z = 1。這告訴我們

\[m^{ed}\;mod\;n\;=\;m^1\;mod\;n\;=\;m \]

這正是我們希望得到的結果!先對m做e次冪運算(加密)再做d次冪運算(解密),然后做模n的算術運算,就可得到初始明文m。甚至更為奇妙之處是,如果我們先對m做d次冪運算(加密),再做e次冪運算,即顛倒加密和解密的次序,先執行解密操作再執行加密操作,也能得到初始明文m 這個奇妙的結果完全遵循下列模算術:

\[(m^d\;mod\;n)^e\;mod\;n=m^{de}\;mod\;n=m^{ed}\;mod\;n=(m^e\;mod\;n)^d\;mod\;n \]




參考鏈接:
https://baike.baidu.com/item/RSA算法/263310#2
參考書籍:
《計算機網絡 自頂而下方法(原書第7版)》/(美)詹姆斯·F·庫羅斯等;陳鳴譯


免責聲明!

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



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