RSA加密算法原理

  學(xué)過(guò)算法的朋友都知道划栓,計(jì)算機(jī)中的算法其實(shí)就是數(shù)學(xué)運(yùn)算忠荞。所以,再講解RSA加密算法之前碧绞,有必要了解一下一些必備的數(shù)學(xué)知識(shí)头遭。我們就從數(shù)學(xué)知識(shí)開始講解。

必備數(shù)學(xué)知識(shí)

RSA加密算法中鲫惶,只用到素?cái)?shù)欠母、互質(zhì)數(shù)、指數(shù)運(yùn)算六水、模運(yùn)算等幾個(gè)簡(jiǎn)單的數(shù)學(xué)知識(shí)掷贾。所以场靴,我們也需要了解這幾個(gè)概念即可旨剥。

素?cái)?shù)

素?cái)?shù)又稱質(zhì)數(shù)泞边,指在一個(gè)大于1的自然數(shù)中,除了1和此整數(shù)自身外烟具,不能被其他自然數(shù)整除的數(shù)。這個(gè)概念冀痕,我們?cè)谏铣踔醒陨撸踔列W(xué)的時(shí)候都學(xué)過(guò)了,這里就不再過(guò)多解釋了婿斥。

互質(zhì)數(shù)

百度百科上的解釋是:公因數(shù)只有1的兩個(gè)數(shù)民宿,叫做互質(zhì)數(shù)活鹰。蕊蝗;維基百科上的解釋是:互質(zhì),又稱互素子漩。若N個(gè)整數(shù)的最大公因子是1幢泼,則稱這N個(gè)整數(shù)互質(zhì)。

  常見的互質(zhì)數(shù)判斷方法主要有以下幾種:

兩個(gè)不同的質(zhì)數(shù)一定是互質(zhì)數(shù)。例如别厘,2與7触趴、13與19。

一個(gè)質(zhì)數(shù)批狐,另一個(gè)不為它的倍數(shù),這兩個(gè)數(shù)為互質(zhì)數(shù)食零。例如娜搂,3與10百宇、5與 26携御。

相鄰的兩個(gè)自然數(shù)是互質(zhì)數(shù)。如 15與 16誓军。

相鄰的兩個(gè)奇數(shù)是互質(zhì)數(shù)。如 49與 51债查。

較大數(shù)是質(zhì)數(shù)的兩個(gè)數(shù)是互質(zhì)數(shù)征绸。如97與88管怠。

小數(shù)是質(zhì)數(shù)祝拯,大數(shù)不是小數(shù)的倍數(shù)的兩個(gè)數(shù)是互質(zhì)數(shù)。例如 7和 16康嘉。

2和任何奇數(shù)是互質(zhì)數(shù)敷钾。例如2和87阻荒。

1不是質(zhì)數(shù)也不是合數(shù),它和任何一個(gè)自然數(shù)在一起都是互質(zhì)數(shù)。如1和9908舶掖。

輾轉(zhuǎn)相除法。

指數(shù)運(yùn)算

指數(shù)運(yùn)算又稱乘方計(jì)算鲫售,計(jì)算結(jié)果稱為冪。nm指將n自乘m次秦效。把nm看作乘方的結(jié)果,叫做”n的m次冪”或”n的m次方”。其中夜惭,n稱為“底數(shù)”,m稱為“指數(shù)”若皱。

模運(yùn)算

模運(yùn)算即求余運(yùn)算晦譬。“南穹”是“Mod”的音譯。和模運(yùn)算緊密相關(guān)的一個(gè)概念是“同余”。數(shù)學(xué)上柔纵,當(dāng)兩個(gè)整數(shù)除以同一個(gè)整數(shù),若得相同余數(shù)进苍,則二整數(shù)同余加缘。

兩個(gè)整數(shù)a,b觉啊,若它們除以正整數(shù)m所得的余數(shù)相等,則稱a沈贝,b對(duì)于模m同余,記作:?a ≡ b (mod m)宋下;讀作:a同余于bm嗡善,或者,ab關(guān)于模m同余学歧。例如:26 ≡ 14 (mod 12)罩引。

RSA加密算法

RSA加密算法簡(jiǎn)史

  RSA是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的枝笨。當(dāng)時(shí)他們?nèi)硕荚诼槭±砉W(xué)院工作袁铐。RSA就是他們?nèi)诵帐祥_頭字母拼在一起組成的揭蜒。

公鑰與密鑰的產(chǎn)生

假設(shè)Alice想要通過(guò)一個(gè)不可靠的媒體接收Bob的一條私人訊息。她可以用以下的方式來(lái)產(chǎn)生一個(gè)公鑰和一個(gè)私鑰

隨意選擇兩個(gè)大的質(zhì)數(shù)pq剔桨,p不等于q屉更,計(jì)算N=pq

根據(jù)歐拉函數(shù)洒缀,求得r = (p-1)(q-1)

選擇一個(gè)小于 r 的整數(shù)?e瑰谜,求得 e 關(guān)于模 r 的模反元素,命名為d树绩。(模反元素存在萨脑,當(dāng)且僅當(dāng)e與r互質(zhì))

?p??q?的記錄銷毀。

(N,e)是公鑰饺饭,(N,d)是私鑰渤早。Alice將她的公鑰(N,e)傳給Bob,而將她的私鑰(N,d)藏起來(lái)砰奕。

加密消息

假設(shè)Bob想給Alice送一個(gè)消息m蛛芥,他知道Alice產(chǎn)生的Ne。他使用起先與Alice約好的格式將m轉(zhuǎn)換為一個(gè)小于N的整數(shù)n军援,比如他可以將每一個(gè)字轉(zhuǎn)換為這個(gè)字的Unicode碼仅淑,然后將這些數(shù)字連在一起組成一個(gè)數(shù)字。假如他的信息非常長(zhǎng)的話胸哥,他可以將這個(gè)信息分為幾段涯竟,然后將每一段轉(zhuǎn)換為n。用下面這個(gè)公式他可以將n加密為c

ne≡ c (mod N)

計(jì)算c并不復(fù)雜空厌。Bob算出c后就可以將它傳遞給Alice庐船。

解密消息

Alice得到Bob的消息c后就可以利用她的密鑰d來(lái)解碼。她可以用以下這個(gè)公式來(lái)將c轉(zhuǎn)換為n

cd≡ n (mod N)

得到n后嘲更,她可以將原來(lái)的信息m重新復(fù)原筐钟。

解碼的原理是:

cd≡ ne·d(mod N)

以及ed≡ 1 (modp-1)和ed≡ 1 (modq-1)。由費(fèi)馬小定理可證明(因?yàn)?i>p和q是質(zhì)數(shù))

ne·d≡ n (mod p)?  和? ne·d≡ n (mod q)

這說(shuō)明(因?yàn)?i>p和q不同的質(zhì)數(shù)赋朦,所以pq互質(zhì))

ne·d≡ n (mod pq)

簽名消息

RSA也可以用來(lái)為一個(gè)消息署名篓冲。假如甲想給乙傳遞一個(gè)署名的消息的話,那么她可以為她的消息計(jì)算一個(gè)散列值(Message digest)宠哄,然后用她的密鑰(private key)加密這個(gè)散列值并將這個(gè)“署名”加在消息的后面壹将。這個(gè)消息只有用她的公鑰才能被解密。乙獲得這個(gè)消息后可以用甲的公鑰解密這個(gè)散列值毛嫉,然后將這個(gè)數(shù)據(jù)與他自己為這個(gè)消息計(jì)算的散列值相比較诽俯。假如兩者相符的話,那么他就可以知道發(fā)信人持有甲的密鑰承粤,以及這個(gè)消息在傳播路徑上沒(méi)有被篡改過(guò)暴区。

編程實(shí)踐

  下面闯团,開始我們的重點(diǎn)環(huán)節(jié):編程實(shí)踐。在開始編程前颜启,我們通過(guò)計(jì)算偷俭,來(lái)確定公鑰和密鑰。

計(jì)算公鑰和密鑰

假設(shè)p = 3缰盏、q = 11(p涌萤,q都是素?cái)?shù)即可。)口猜,則N = pq = 33负溪;

r = (p-1)(q-1) = (3-1)(11-1) = 20;

根據(jù)模反元素的計(jì)算公式济炎,我們可以得出川抡,e·d ≡ 1 (mod 20),即e·d = 20n+1 (n為正整數(shù));我們假設(shè)n=1须尚,則e·d = 21崖堤。e、d為正整數(shù)耐床,并且e與r互質(zhì)密幔,則e = 3,d = 7撩轰。(兩個(gè)數(shù)交換一下也可以胯甩。)

  到這里,公鑰和密鑰已經(jīng)確定堪嫂。公鑰為(N, e) = (33, 3)偎箫,密鑰為(N, d) = (33, 7)。

編程實(shí)現(xiàn)

  下面我們使用Java來(lái)實(shí)現(xiàn)一下加密和解密的過(guò)程皆串。具體代碼如下:

RSA算法實(shí)現(xiàn):


[java]?view plain?copy

package?security.rsa;????public?class?RSA?{????????????/**??????*??加密淹办、解密算法??????*?@param?key?公鑰或密鑰??????*?@param?message?數(shù)據(jù)??????*?@return??????*/??????public?static?long?rsa(int?baseNum,?int?key,?long?message){??????????if(baseNum?<?1?||?key?<?1){??????????????return?0L;??????????}??????????//加密或者解密之后的數(shù)據(jù)??????????long?rsaMessage?=?0L;????????????????????//加密核心算法??????????rsaMessage?=?Math.round(Math.pow(message,?key))?%?baseNum;??????????return?rsaMessage;??????}????????????????????????public?static?void?main(String[]?args){??????????//基數(shù)??????????int?baseNum?=?3?*?11;??????????//公鑰??????????int?keyE?=?3;??????????//密鑰??????????int?keyD?=?7;??????????//未加密的數(shù)據(jù)??????????long?msg?=?24L;??????????//加密后的數(shù)據(jù)??????????long?encodeMsg?=?rsa(baseNum,?keyE,?msg);??????????//解密后的數(shù)據(jù)??????????long?decodeMsg?=?rsa(baseNum,?keyD,?encodeMsg);????????????????????System.out.println("加密前:"?+?msg);??????????System.out.println("加密后:"?+?encodeMsg);??????????System.out.println("解密后:"?+?decodeMsg);????????????????}??????????????}??

RSA算法結(jié)果:

加密前:24

加密后:30

解密后:24

(看程序最清楚了,對(duì)于要加密的數(shù)字m, m^e%N=c, c就是加密之后的密文恶复。c^d%N=m, 就能解密得到m)

RSA加密算法的安全性

  當(dāng)p和q是一個(gè)大素?cái)?shù)的時(shí)候娇唯,從它們的積pq去分解因子p和q,這是一個(gè)公認(rèn)的數(shù)學(xué)難題寂玲。然而,雖然RSA的安全性依賴于大數(shù)的因子分解梗摇,但并沒(méi)有從理論上證明破譯RSA的難度與大數(shù)分解難度等價(jià)拓哟。

1994年彼得·秀爾(Peter Shor)證明一臺(tái)量子計(jì)算機(jī)可以在多項(xiàng)式時(shí)間內(nèi)進(jìn)行因數(shù)分解。假如量子計(jì)算機(jī)有朝一日可以成為一種可行的技術(shù)的話伶授,那么秀爾的算法可以淘汰RSA和相關(guān)的衍生算法断序。(即依賴于分解大整數(shù)困難性的加密算法)

另外流纹,假如N的長(zhǎng)度小于或等于256,那么用一臺(tái)個(gè)人電腦在幾個(gè)小時(shí)內(nèi)就可以分解它的因子了汛蝙。1999年瘦癌,數(shù)百臺(tái)電腦合作分解了一個(gè)512位長(zhǎng)的N誓沸。1997年后開發(fā)的系統(tǒng),用戶應(yīng)使用1024位密鑰茸炒,證書認(rèn)證機(jī)構(gòu)應(yīng)用2048位或以上。

RSA加密算法的缺點(diǎn)

  雖然RSA加密算法作為目前最優(yōu)秀的公鑰方案之一阵苇,在發(fā)表三十多年的時(shí)間里壁公,經(jīng)歷了各種攻擊的考驗(yàn),逐漸為人們接受绅项。但是紊册,也不是說(shuō)RSA沒(méi)有任何缺點(diǎn)。由于沒(méi)有從理論上證明破譯RSA的難度與大數(shù)分解難度的等價(jià)性快耿。所以囊陡,RSA的重大缺陷是無(wú)法從理論上把握它的保密性能如何。在實(shí)踐上掀亥,RSA也有一些缺點(diǎn):

產(chǎn)生密鑰很麻煩撞反,受到素?cái)?shù)產(chǎn)生技術(shù)的限制,因而難以做到一次一密铺浇;

分組長(zhǎng)度太大痢畜,為保證安全性,n 至少也要 600 bits 以上鳍侣,使運(yùn)算代價(jià)很高丁稀,尤其是速度較慢,倚聚。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末线衫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子惑折,更是在濱河造成了極大的恐慌授账,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惨驶,死亡現(xiàn)場(chǎng)離奇詭異白热,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)粗卜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門屋确,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事攻臀』朗” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵刨啸,是天一觀的道長(zhǎng)堡赔。 經(jīng)常有香客問(wèn)我,道長(zhǎng)设联,這世上最難降的妖魔是什么善已? 我笑而不...
    開封第一講書人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮仑荐,結(jié)果婚禮上雕拼,老公的妹妹穿的比我還像新娘。我一直安慰自己粘招,他們只是感情好啥寇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著洒扎,像睡著了一般辑甜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上袍冷,一...
    開封第一講書人閱讀 51,231評(píng)論 1 299
  • 那天磷醋,我揣著相機(jī)與錄音,去河邊找鬼胡诗。 笑死邓线,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的煌恢。 我是一名探鬼主播骇陈,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瑰抵!你這毒婦竟也來(lái)了你雌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤二汛,失蹤者是張志新(化名)和其女友劉穎婿崭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肴颊,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡氓栈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了婿着。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颤绕。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡幸海,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出奥务,到底是詐尸還是另有隱情,我是刑警寧澤袜硫,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布氯葬,位于F島的核電站,受9級(jí)特大地震影響婉陷,放射性物質(zhì)發(fā)生泄漏帚称。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一秽澳、第九天 我趴在偏房一處隱蔽的房頂上張望闯睹。 院中可真熱鬧,春花似錦担神、人聲如沸楼吃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)孩锡。三九已至,卻和暖如春亥贸,著一層夾襖步出監(jiān)牢的瞬間躬窜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工炕置, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荣挨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓朴摊,卻偏偏與公主長(zhǎng)得像默垄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仍劈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 必備數(shù)學(xué)知識(shí) RSA加密算法中厕倍,只用到素?cái)?shù)、互質(zhì)數(shù)贩疙、指數(shù)運(yùn)算讹弯、模運(yùn)算等幾個(gè)簡(jiǎn)單的數(shù)學(xué)知識(shí)。所以这溅,我們也需要了解這幾...
    依然飯?zhí)?/span>閱讀 852評(píng)論 0 0
  • 姓名:于川皓 學(xué)號(hào):16140210089 轉(zhuǎn)載自:https://baike.baidu.com/item/RS...
    道無(wú)涯_cc76閱讀 2,547評(píng)論 0 1
  • 前言 RSA算法是現(xiàn)今使用最廣泛的公鑰密碼算法组民,也是號(hào)稱地球上最安全的加密算法。本文主要參考了參考資料中的文章悲靴,加...
    賣糖果的小傻嘟閱讀 771評(píng)論 0 0
  • RSA是第一個(gè)比較完善的公開密鑰算法臭胜,它既能用于加密,也能用于數(shù)字簽名。RSA以它的三個(gè)發(fā)明者Ron Rivest...
    暗物質(zhì)閱讀 1,700評(píng)論 0 0
  • 歌舞升平的城市 寡恩薄義的街道 啖以重利的背后 弱肉強(qiáng)食的社會(huì) 人生于世 是為了什么? 金錢還是美色 我們只是這個(gè)...
    半生云水閱讀 175評(píng)論 0 0