RSA加密

RSA加密是非對稱加密,由瑞弗斯特(Ron Rivest),沙米爾(Adi Shamir)和阿德來門(Len Adleeman)1978年提出的,它的基礎是歐拉定理,安全性依賴于大數因子分解的困難性。整個RSA加密運算,要了解一點數論的基礎。下面在講解的時候,需要用到的數學知識,我都會在一旁做簡單標注。此文主要包括:

  • RSA 加密算法
  • RSA 加解密舉例
  • RSA 加密的安全性
  • RSA 加密算法的正確性證明

RSA加密算法

取兩個大素數 pq (p ≠ q),記 n = pq?(n) = (p-1)(q-1)。選擇正整數
ww?(n) 互素,設 dw 的模 ?(n) 逆,即 dw ≡ 1(mod ?(n))
RSA密碼算法如下:首先將明文數字化,后把明文分成若干段,每一個明文段的值小于 n,對每一個明文段 m
加密算法 c = E(m) = m^w mod n
解密算法 D(c) = c^d mod n
其中加密密鑰 wn 是公開的 p q ?(n)d 是保密的。

  • 素數:只能被±1±自己整除的數,比如2, 3, 5, 7, 11...
  • 兩數互素:除±1之外,沒有其他的公因子,比如2 ~ 3,7 ~ 11...
  • ?(n):這個是歐拉函數,是指小于 n 且與 n 互素的正整數的個數,習慣上 ?(1) = 1。算法中用到的 ?(n) = (p-1)(q-1)pq 為素數,是歐拉函數的一個特殊情況。特殊情況還有 n 為素數時,?(n) = n - 1
  • n同余:形如a ≡ b(mod n) 這樣的算式稱為a bn 同余,即 a % n = b % n
  • 模逆:如果 ab ≡ 1(mod m),即 ab % m = 1 ,則稱 ba 的模 m 逆;由定義可知,a 的模 m 逆就是方程 ax ≡ 1(mod m) 的解,其中形如 ax ≡ c(mod m) 的方程稱一次同余方程。

RSA加解密舉例

A B 兩人通信,A要傳遞信息給 B,這時 B 公布出來加密的公鑰,A 以此將信息加密,B收到密文以后用私鑰解密,比如:
公鑰w = 13, n = 2537
私鑰p = 43, q = 59, ?(n) = 2436, d = 937(根據 w 和 ?(n) 求出)
A 要傳遞的明文信息數字化之后為:m = 2106,用公鑰加密為密文:c = 2106^13 % 2537 = 2321
B 收到密文 c = 2321 后,用私鑰解密為明文:m = 2321^937 % 2537 = 2106

上面加解密都要涉及到模冪乘運算形如:a^b(mod n)。這兒可以利用模運算的一個性質:(a*b) % n = [(a % n) * (b % n)] % n
比如2106^13 % 2537 = [(2106 % 2537)(2106^4 % 2537)(2106^8 % 2537)] % 2537 = [(-431) * (-988) * (-601) % 2537] = 2321
求解過程可以使用遞歸求解的方式,2106^2 % 2537 可以根據 2106 % 2537 來求,2106^4 % 2537 可以根據 2106^2 % 2537 來求。比如 2106^4 % 2537 = [(2106^2 % 2537)(2106^2 % 2537)] % 2537 = (560 * 560) % 2537 = -988

RSA加密的安全性

開頭提到,RSA加密的安全性依賴于大數因子分解的困難性。因為 n 是公鑰公布出來的,如上例中 n = 2537 很容易就可以因為分解,求得 p = 43 q = 59,繼而求出 ?(n) = 2436, d = 937,這樣就攻破了。但是在實際中,n 選的值一般為 1024位 的二進制整數,這么大的一個整數因式分解以目前的技術水平是不可能因式分解的,對加密要求更高的行為,n 則選為2048位的二進制整數。

RSA加密算法的正確性證明

正確性證明需要用到費馬小定理歐拉定理,表述如下

  • 費馬小定理:若 a p 互素,則 a^(p-1) ≡ 1(mod p)。另一種表示形式 a^p ≡ a(mod p),這種形式則不要求 a p 互素。
  • 歐拉定理:若 a n 互素,則 a^?(n) ≡ 1(mod n)。另一種表示形式 a^?(n) ≡ a(mod n),這種形式則不要求 a n 互素。

因為m < n,故解密算法 D(c) = c^d mod n ? c^d ≡ m(mod n),又因為加密算法 c = m^w mod n,故 c^d ≡ m(mod n) ? m^dw ≡ m(mod n)。又因為 dw ≡ 1(mod ?(n)),所以存在整數 k 使得 dw = k?(n) + 1。最終轉換為證明:m^(k?(n) + 1) ≡ m(mod n),其中k為整數。關于此證明可以分兩種情況討論:

mn 互素

由歐拉定理 m^?(n) ≡ 1(mod n) ? m^k?(n) ≡ 1(mod n) ? m^(k?(n) + 1) ≡ m(mod n) 命題得證

mn 不互素

由于 m < nn = pqpq 是素數且 p ≠ q,故 m 必含 pq 中的一個為因子,且只含其中的一個為因子。設 m = cp,由費馬小定理 m^(q - 1) ≡ 1(mod q) ? m^k?(n) ≡ m^(k(p-1)(q-1)) ≡ 1^k(p-1) ≡ 1(mod q),從而存在整數 h 使得 m^k?(n) = hq + 1,兩邊同乘于 m 得,m^(k?(n) + 1) = mhq + m = cphq + m = hcn + m ? m^(k?(n) + 1) ≡ m(mod n) 命題得證

總結

RSA加密,整個過程的計算量是很大的,只有特別敏感的信息才使用RSA加密。此文牽扯很多的數論的知識,也沒有講解的很詳細,只是用到的地方,直接給出了結論,其他一些,比如歐拉函數的通用公式,一次同余方程求解方法,費馬小定理和歐拉定理的證明過程,計算模冪乘運算的通用公式,都沒有做過多的詳解,因為這些不是此文的重點,如果你對這些感興趣,可以參考下面我列出來的這本參考書,或者和我交流溝通。這是一系列文章的其中一篇,你可以在這兒Encode & Decode集序找到他其他的兄弟。

參考

  • 屈婉玲,耿素云,張立昂. 離散數學:高等教育出版社
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,406評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,034評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,413評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,449評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,165評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,559評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,606評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,781評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,327評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,084評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,278評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,849評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,495評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,927評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,172評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,010評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,241評論 2 375

推薦閱讀更多精彩內容

  • 這是去年12月在CSDN寫的一篇加密算法文章 現在決定在簡書寫博客 移植過來方便復習再理解。 最近算法課老師要求小...
    icecrea閱讀 1,319評論 1 1
  • 必備數學知識 RSA加密算法中,只用到素數、互質數、指數運算、模運算等幾個簡單的數學知識。所以,我們也需要了解這幾...
    依然飯太稀閱讀 867評論 0 0
  • RSA是第一個比較完善的公開密鑰算法,它既能用于加密,也能用于數字簽名。RSA以它的三個發明者Ron Rivest...
    暗物質閱讀 1,717評論 0 0
  • 生成密鑰隨機選擇兩個不相等的質數p和q。例:61和53。(實際應用中,這兩個質數越大,就越難破解。)計算p和q的乘...
    未知代碼閱讀 549評論 0 1
  • 3.4 CSS3圓角邊框屬性 在web頁面上圓角效果很常見。圓角給頁面增添曲線之美,讓頁面不那么生硬,但是為了設計...
    白小蟲閱讀 478評論 0 0