RSA算法原理2
日期: 2013年7月 4日
上一次,我介紹了一些數(shù)論知識(shí)。
有了這些知識(shí),我們就可以看懂RSA算法。這是目前地球上最重要的加密算法。
六、密鑰生成的步驟
我們通過(guò)一個(gè)例子,來(lái)理解RSA算法。假設(shè)愛(ài)麗絲要與鮑勃進(jìn)行加密通信,她該怎么生成公鑰和私鑰呢?
第一步,隨機(jī)選擇兩個(gè)不相等的質(zhì)數(shù)p和q。
愛(ài)麗絲選擇了61和53。(實(shí)際應(yīng)用中,這兩個(gè)質(zhì)數(shù)越大,就越難破解。)
第二步,計(jì)算p和q的乘積n。
愛(ài)麗絲就把61和53相乘。
n = 61×53 = 3233
n的長(zhǎng)度就是密鑰長(zhǎng)度。3233寫成二進(jìn)制是110010100001,一共有12位,所以這個(gè)密鑰就是12位。實(shí)際應(yīng)用中,RSA密鑰一般是1024位,重要場(chǎng)合則為2048位。
第三步,計(jì)算n的歐拉函數(shù)φ(n)。
根據(jù)公式:
φ(n) = (p-1)(q-1)
愛(ài)麗絲算出φ(3233)等于60×52,即3120。
第四步,隨機(jī)選擇一個(gè)整數(shù)e,條件是1< e < φ(n),且e與φ(n) 互質(zhì)。
愛(ài)麗絲就在1到3120之間,隨機(jī)選擇了17。(實(shí)際應(yīng)用中,常常選擇65537。)
第五步,計(jì)算e對(duì)于φ(n)的模反元素d。
所謂"模反元素"就是指有一個(gè)整數(shù)d,可以使得ed被φ(n)除的余數(shù)為1。
ed ≡ 1 (mod φ(n))
這個(gè)式子等價(jià)于
ed - 1 = kφ(n)
于是,找到模反元素d,實(shí)質(zhì)上就是對(duì)下面這個(gè)二元一次方程求解。
ex + φ(n)y = 1
已知 e=17, φ(n)=3120,
17x + 3120y = 1
這個(gè)方程可以用"擴(kuò)展歐幾里得算法"求解,此處省略具體過(guò)程。總之,愛(ài)麗絲算出一組整數(shù)解為 (x,y)=(2753,-15),即 d=2753。
至此所有計(jì)算完成。
第六步,將n和e封裝成公鑰,n和d封裝成私鑰。
在愛(ài)麗絲的例子中,n=3233,e=17,d=2753,所以公鑰就是 (3233,17),私鑰就是(3233, 2753)。
實(shí)際應(yīng)用中,公鑰和私鑰的數(shù)據(jù)都采用ASN.1格式表達(dá)(實(shí)例)。
七、RSA算法的可靠性
回顧上面的密鑰生成步驟,一共出現(xiàn)六個(gè)數(shù)字:
p
q
n
φ(n)
e
d
這六個(gè)數(shù)字之中,公鑰用到了兩個(gè)(n和e),其余四個(gè)數(shù)字都是不公開(kāi)的。其中最關(guān)鍵的是d,因?yàn)閚和d組成了私鑰,一旦d泄漏,就等于私鑰泄漏。
那么,有無(wú)可能在已知n和e的情況下,推導(dǎo)出d?
(1)ed≡1 (mod φ(n))。只有知道e和φ(n),才能算出d。
(2)φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。
(3)n=pq。只有將n因數(shù)分解,才能算出p和q。
結(jié)論:如果n可以被因數(shù)分解,d就可以算出,也就意味著私鑰被破解。
可是,大整數(shù)的因數(shù)分解,是一件非常困難的事情。目前,除了暴力破解,還沒(méi)有發(fā)現(xiàn)別的有效方法。維基百科這樣寫道:
"對(duì)極大整數(shù)做因數(shù)分解的難度決定了RSA算法的可靠性。換言之,對(duì)一極大整數(shù)做因數(shù)分解愈困難,RSA算法愈可靠。
假如有人找到一種快速因數(shù)分解的算法,那么RSA的可靠性就會(huì)極度下降。但找到這樣的算法的可能性是非常小的。今天只有短的RSA密鑰才可能被暴力破解。到2008年為止,世界上還沒(méi)有任何可靠的攻擊RSA算法的方式。
只要密鑰長(zhǎng)度足夠長(zhǎng),用RSA加密的信息實(shí)際上是不能被解破的。"
舉例來(lái)說(shuō),你可以對(duì)3233進(jìn)行因數(shù)分解(61×53),但是你沒(méi)法對(duì)下面這個(gè)整數(shù)進(jìn)行因數(shù)分解。
12301866845301177551304949
58384962720772853569595334
79219732245215172640050726
36575187452021997864693899
56474942774063845925192557
32630345373154826850791702
61221429134616704292143116
02221240479274737794080665
351419597459856902143413
它等于這樣兩個(gè)質(zhì)數(shù)的乘積:
33478071698956898786044169
84821269081770479498371376
85689124313889828837938780
02287614711652531743087737
814467999489
×
36746043666799590428244633
79962795263227915816434308
76426760322838157396665112
79233373417143396810270092
798736308917
事實(shí)上,這大概是人類已經(jīng)分解的最大整數(shù)(232個(gè)十進(jìn)制位,768個(gè)二進(jìn)制位)。比它更大的因數(shù)分解,還沒(méi)有被報(bào)道過(guò),因此目前被破解的最長(zhǎng)RSA密鑰就是768位。
八、加密和解密
有了公鑰和密鑰,就能進(jìn)行加密和解密了。
(1)加密要用公鑰 (n,e)
假設(shè)鮑勃要向愛(ài)麗絲發(fā)送加密信息m,他就要用愛(ài)麗絲的公鑰 (n,e) 對(duì)m進(jìn)行加密。這里需要注意,m必須是整數(shù)(字符串可以取ascii值或unicode值),且m必須小于n。
所謂"加密",就是算出下式的c:
me ≡ c (mod n)
愛(ài)麗絲的公鑰是 (3233, 17),鮑勃的m假設(shè)是65,那么可以算出下面的等式:
6517 ≡ 2790 (mod 3233)
于是,c等于2790,鮑勃就把2790發(fā)給了愛(ài)麗絲。
(2)解密要用私鑰(n,d)
愛(ài)麗絲拿到鮑勃發(fā)來(lái)的2790以后,就用自己的私鑰(3233, 2753) 進(jìn)行解密。可以證明,下面的等式一定成立:
cd ≡ m (mod n)
也就是說(shuō),c的d次方除以n的余數(shù)為m。現(xiàn)在,c等于2790,私鑰是(3233, 2753),那么,愛(ài)麗絲算出
27902753 ≡ 65 (mod 3233)
因此,愛(ài)麗絲知道了鮑勃加密前的原文就是65。
至此,"加密--解密"的整個(gè)過(guò)程全部完成。
我們可以看到,如果不知道d,就沒(méi)有辦法從c求出m。而前面已經(jīng)說(shuō)過(guò),要知道d就必須分解n,這是極難做到的,所以RSA算法保證了通信安全。
你可能會(huì)問(wèn),公鑰(n,e) 只能加密小于n的整數(shù)m,那么如果要加密大于n的整數(shù),該怎么辦?有兩種解決方法:一種是把長(zhǎng)信息分割成若干段短消息,每段分別加密;另一種是先選擇一種"對(duì)稱性加密算法"(比如DES),用這種算法的密鑰加密信息,再用RSA公鑰加密DES密鑰。
九、私鑰解密的證明
最后,我們來(lái)證明,為什么用私鑰解密,一定可以正確地得到m。也就是證明下面這個(gè)式子:
cd ≡ m (mod n)
因?yàn)?#xff0c;根據(jù)加密規(guī)則
me ≡ c (mod n)
于是,c可以寫成下面的形式:
c = me - kn
將c代入要我們要證明的那個(gè)解密規(guī)則:
(me - kn)d ≡ m (mod n)
它等同于求證
med ≡ m (mod n)
由于
ed ≡ 1 (mod φ(n))
所以
ed = hφ(n)+1
將ed代入:
mhφ(n)+1 ≡ m (mod n)
接下來(lái),分成兩種情況證明上面這個(gè)式子。
(1)m與n互質(zhì)。
根據(jù)歐拉定理,此時(shí)
mφ(n) ≡ 1 (mod n)
得到
(mφ(n))h × m ≡ m (mod n)
原式得到證明。
(2)m與n不是互質(zhì)關(guān)系。
此時(shí),由于n等于質(zhì)數(shù)p和q的乘積,所以m必然等于kp或kq。
以 m = kp為例,考慮到這時(shí)k與q必然互質(zhì),則根據(jù)歐拉定理,下面的式子成立:
(kp)q-1 ≡ 1 (mod q)
進(jìn)一步得到
[(kp)q-1]h(p-1) × kp ≡ kp (mod q)
即
(kp)ed ≡ kp (mod q)
將它改寫成下面的等式
(kp)ed = tq + kp
這時(shí)t必然能被p整除,即 t=t'p
(kp)ed = t'pq + kp
因?yàn)?m=kp,n=pq,所以
med ≡ m (mod n)
原式得到證明。
(完)
留言(124條)
數(shù)學(xué)乃萬(wàn)物之源吶
2013年7月 4日 12:47 | # | 引用
第一時(shí)間過(guò)來(lái)感謝阮先生無(wú)私奉獻(xiàn)如此易懂的算法原理!
2013年7月 4日 12:52 | # | 引用
終于體會(huì)到什么叫“深入淺出”
2013年7月 4日 12:53 | # | 引用
受益匪淺,謝謝!
2013年7月 4日 14:10 | # | 引用
又一篇好文,感謝阮兄的無(wú)私分享!
2013年7月 4日 15:47 | # | 引用
如果量子計(jì)算機(jī)實(shí)現(xiàn)的話是不是就能破解了?
2013年7月 4日 17:33 | # | 引用
引用Du的發(fā)言:
如果量子計(jì)算機(jī)實(shí)現(xiàn)的話是不是就能破解了?
RSA的困難性是基于大整數(shù)因子分解在計(jì)算上不可行,如果計(jì)算能力上去的話,當(dāng)然是可以破解現(xiàn)有的密碼。
2013年7月 5日 02:38 | # | 引用
引用楊琪的發(fā)言:
數(shù)學(xué)乃萬(wàn)物之源吶
數(shù)學(xué)自有其獨(dú)特的魅力。
2013年7月 5日 08:46 | # | 引用
九的子標(biāo)題(2)m與n不是互質(zhì)關(guān)系中
考慮到這時(shí)k與q必然互質(zhì)應(yīng)該是“m與q必然互質(zhì)”。
另外,數(shù)學(xué)公式用mathjax會(huì)更好看一些。
2013年7月 5日 16:56 | # | 引用
[(kp)q-1]h(p-1) × kp ≡ kp (mod q)
可以直接一步得到結(jié)論了,何必之后那幾步推導(dǎo)?
2013年7月 5日 18:48 | # | 引用
沒(méi)看懂好傷心。
2013年7月 7日 08:33 | # | 引用
不太明白,繼續(xù)琢磨一下!
2013年7月 8日 10:34 | # | 引用
第四步計(jì)算模反元素下面這倆式子貌似符號(hào)弄錯(cuò)了~
ex + φ(n)y = 1
已知 e=17, φ(n)=3120,
17x + 3120y = 1
2013年7月 9日 00:06 | # | 引用
當(dāng)年數(shù)學(xué)沒(méi)學(xué)好,看得快哭了。
2013年7月17日 09:42 | # | 引用
只看懂了個(gè)大概,不過(guò)對(duì)RSA算法有一個(gè)很好的印象了。這真是一篇好文章呀,阮兄的文章沒(méi)有白付費(fèi)呀。
2013年8月10日 16:56 | # | 引用
別說(shuō)DES……這個(gè)加密算法因?yàn)樘菀妆黄平庠缇捅粡U除了,建議改成3DES或AES.
2013年8月14日 10:57 | # | 引用
精彩啊,這兩篇文章
2013年8月14日 13:16 | # | 引用
精彩!!!
2013年8月16日 12:02 | # | 引用
謝謝你的文章。想問(wèn)個(gè)問(wèn)題,那個(gè)鮑勃向愛(ài)麗絲發(fā)消息的例子是單向的,如果愛(ài)麗絲想回復(fù)的話該怎么辦呢?這時(shí)候是不是必須先協(xié)商一個(gè)密鑰然后對(duì)稱加密?
2013年9月10日 12:15 | # | 引用
引用asdf的發(fā)言:
[(kp)q-1]h(p-1) × kp ≡ kp (mod q)
可以直接一步得到結(jié)論了,何必之后那幾步推導(dǎo)?
為了讓mod作用于n,而不是q。
2013年9月10日 17:17 | # | 引用
引用STL的發(fā)言:
謝謝你的文章。想問(wèn)個(gè)問(wèn)題,那個(gè)鮑勃向愛(ài)麗絲發(fā)消息的例子是單向的,如果愛(ài)麗絲想回復(fù)的話該怎么辦呢?這時(shí)候是不是必須先協(xié)商一個(gè)密鑰然后對(duì)稱加密?
根本沒(méi)有協(xié)商過(guò)程啊。都是用對(duì)方的公鑰加密
2013年9月10日 17:19 | # | 引用
謝謝博主的文章。
請(qǐng)問(wèn)一下,
m^e ≡ c (mod n)這公式怎么來(lái)的?
只是e跟φ(n)互質(zhì)啊
2013年9月24日 15:42 | # | 引用
想到這個(gè)算發(fā)的人太偉大了,這是一個(gè)回答純數(shù)學(xué)有什么用的最好案例。還有沒(méi)有其他的像RSA這樣簡(jiǎn)單有效的非對(duì)稱加密方法呢?恐怕像找外星人一樣難了。
2013年10月 9日 14:16 | # | 引用
引用felix021的發(fā)言:
別說(shuō)DES……這個(gè)加密算法因?yàn)樘菀妆黄平庠缇捅粡U除了,建議改成3DES或AES.
DES廢除的原因一個(gè)是密鑰位數(shù)太少,在現(xiàn)在的計(jì)算能力下,已經(jīng)無(wú)法保證安全,第二個(gè)原因是,DES是為硬件加密設(shè)計(jì)的,對(duì)于現(xiàn)在軟件來(lái)說(shuō)計(jì)算效率不夠好,第三個(gè)原因是,一直有人懷疑DES的S盒中隱藏著后門,而這個(gè)后門被美國(guó)安全局掌握。所以提出了AES
3DES理論密鑰長(zhǎng)度為56*3=168bits,但是,在受到中間人攻擊的條件下,退化為112bits。其安全性仍然不夠好
2013年10月15日 22:52 | # | 引用
寫的很不錯(cuò),淺顯易懂,但看完,覺(jué)得最后一段有個(gè)疑惑,請(qǐng)教一下:(kp)ed = tq + kp
這時(shí)t必然能被p整除,即 t=t'p,這個(gè)必然性是如何證明的?請(qǐng)指導(dǎo)下~~謝謝
2013年10月28日 21:44 | # | 引用
為什么公匙不能猜測(cè)的進(jìn)行解密呢。。。
2013年11月 2日 23:14 | # | 引用
正在做加密產(chǎn)品,以應(yīng)對(duì)來(lái)自霉國(guó)的竊聽(tīng)威脅,感謝樓主的理論分析。
2013年11月 3日 03:51 | # | 引用
這兩篇文章寫的太好了,對(duì)RSA算法淺入深出,讓我明白很多。但有一個(gè)地方?jīng)]看明白:博主寫道
加密就是算出 me ≡ c (mod n)中的c
我想問(wèn)一下,為什么要這樣做?和上篇文章中什么地方有聯(lián)系?還是就是這么規(guī)定的?
2013年11月11日 07:27 | # | 引用
此時(shí),由于n等于質(zhì)數(shù)p和q的乘積,所以m必然等于kp或kq
這個(gè)怎麼得來(lái)的?
m不是明文嗎,明文爲(wèi)什麼一定等於kp或者kq?
2013年11月11日 16:35 | # | 引用
引用STL的發(fā)言:
謝謝你的文章。想問(wèn)個(gè)問(wèn)題,那個(gè)鮑勃向愛(ài)麗絲發(fā)消息的例子是單向的,如果愛(ài)麗絲想回復(fù)的話該怎么辦呢?這時(shí)候是不是必須先協(xié)商一個(gè)密鑰然后對(duì)稱加密?
想雙向通信的話肯定要定義兩套公鑰和秘鑰了,都用對(duì)方的公鑰加密發(fā)送,然后接收方用自己的秘鑰解密就OK了!
2013年11月19日 20:29 | # | 引用
終于明白rsa是怎么一回事了,thanks!!
2013年11月26日 16:15 | # | 引用
引用Ray的發(fā)言:
RSA的困難性是基于大整數(shù)因子分解在計(jì)算上不可行,如果計(jì)算能力上去的話,當(dāng)然是可以破解現(xiàn)有的密碼。
量子計(jì)算機(jī)是并行的,1024位的密碼用1024個(gè)量子處理單元做計(jì)算,只要1秒。只是現(xiàn)在技術(shù)最多能做到8位量子處理單元的級(jí)別。so...
2013年12月12日 19:54 | # | 引用
引用Martin.Hsuching的發(fā)言:
寫的很不錯(cuò),淺顯易懂,但看完,覺(jué)得最后一段有個(gè)疑惑,請(qǐng)教一下:(kp)ed = tq + kp
這時(shí)t必然能被p整除,即 t=t'p,這個(gè)必然性是如何證明的?請(qǐng)指導(dǎo)下~~謝謝
兩邊同時(shí)整除p,又p、q互質(zhì),于是t必定是p的整數(shù)倍。
2013年12月30日 21:08 | # | 引用
引用哇哈哈的發(fā)言:
此時(shí),由于n等于質(zhì)數(shù)p和q的乘積,所以m必然等于kp或kq
這個(gè)怎麼得來(lái)的?
m不是明文嗎,明文爲(wèi)什麼一定等於kp或者kq?
數(shù)學(xué)角度:m、n不是互質(zhì)關(guān)系,說(shuō)明m、n必定含有非1公因子,而n等于質(zhì)數(shù)p和q的乘積,因此m必然等于kp或kq。
2013年12月30日 21:16 | # | 引用
一直在使用RSA,但是不是很清楚RSA的數(shù)學(xué)原理,今天一看,勝讀幾年書!!!
1、to 哇哈哈:
此時(shí),由于n等于質(zhì)數(shù)p和q的乘積,所以m必然等于kp或kq
因?yàn)閙與n不是互質(zhì)關(guān)系,說(shuō)明m與n有共同的公因子g,假設(shè)m=hg,由于n=pq,p與q互質(zhì),n只有p和q兩個(gè)因子,所以g和h必然有一個(gè)等于q或者p, 所以才有結(jié)論“m必然等于kp或kq”
2、to Martin.Hsuching :
因?yàn)?kp)ed = tq + kp,=>(p)ed*(k)ed = tq + kp,=>
(p)ed*(k)ed - kp = tq,=>
p[(p)(ed-1)*(k)ed - k ] = tq,
左邊是p的倍數(shù),那右邊必然也是p的倍數(shù)。因?yàn)閜與q互質(zhì),所以t必然是p倍數(shù),即 t=t'p
3、
2013年12月31日 16:43 | # | 引用
引用Gavin的發(fā)言:
一直在使用RSA,但是不是很清楚RSA的數(shù)學(xué)原理,今天一看,勝讀幾年書!!!
1、to 哇哈哈:
此時(shí),由于n等于質(zhì)數(shù)p和q的乘積,所以m必然等于kp或kq
因?yàn)閙與n不是互質(zhì)關(guān)系,說(shuō)明m與n有共同的公因子g,假設(shè)m=hg,由于n=pq,p與q互質(zhì),n只有p和q兩個(gè)因子,所以g和h必然有一個(gè)等于q或者p, 所以才有結(jié)論“m必然等于kp或kq”
2、toMartin.Hsuching :
因?yàn)?kp)ed = tq + kp,=>(p)ed*(k)ed = tq + kp,=>
(p)ed*(k)ed - kp = tq,=>
p[(p)(ed-1)*(k)ed - k ] = tq,
左邊是p的倍數(shù),那右邊必然也是p的倍數(shù)。因?yàn)閜與q互質(zhì),所以t必然是p倍數(shù),即 t=t'p
3、
幫我理解了不少,感謝!還有一點(diǎn)向您請(qǐng)教下:1.“(1)m與n互質(zhì)。根據(jù)歐拉定理,此時(shí)mφ(n) ≡ 1 (mod n)得到(mφ(n))h × m ≡ m (mod n)”這個(gè)是怎么得到啊?(mφ(n))h≡1(mod n)這樣寫,對(duì)嗎?接著,后面又多乘以個(gè)m,就能變成這樣啦(mφ(n))h × m ≡ m (mod n),這個(gè)是為什么呢?2.這個(gè)跟1.應(yīng)該是同樣的問(wèn)題“(kp)q-1 ≡ 1 (mod q)進(jìn)一步得到[(kp)q-1]h(p-1) × kp ≡ kp (mod q)”這個(gè)也是,左右都乘以kp,這是為什么呢?3.這個(gè)是我看RSA算法原理(一)中的疑問(wèn):“因此,7的任意次方的個(gè)位數(shù)(例如7的222次方),心算就可以算出來(lái)”這是怎么得到的呢?我只想到了:7的222次方=7的2次方*7的(4*55)次方,下面就不知道了。還望解惑,不勝感激~2014年1月 2日 15:19 | # | 引用
引用Gavin的發(fā)言:
一直在使用RSA,但是不是很清楚RSA的數(shù)學(xué)原理,今天一看,勝讀幾年書!!!
1、to 哇哈哈:
此時(shí),由于n等于質(zhì)數(shù)p和q的乘積,所以m必然等于kp或kq
因?yàn)閙與n不是互質(zhì)關(guān)系,說(shuō)明m與n有共同的公因子g,假設(shè)m=hg,由于n=pq,p與q互質(zhì),n只有p和q兩個(gè)因子,所以g和h必然有一個(gè)等于q或者p, 所以才有結(jié)論“m必然等于kp或kq”
2、toMartin.Hsuching :
因?yàn)?kp)ed = tq + kp,=>(p)ed*(k)ed = tq + kp,=>
(p)ed*(k)ed - kp = tq,=>
p[(p)(ed-1)*(k)ed - k ] = tq,
左邊是p的倍數(shù),那右邊必然也是p的倍數(shù)。因?yàn)閜與q互質(zhì),所以t必然是p倍數(shù),即 t=t'p
3、
幫我理解了不少,感謝!還有一點(diǎn)向您請(qǐng)教下:
1.“(1)m與n互質(zhì)。
根據(jù)歐拉定理,此時(shí)mφ(n) ≡ 1 (mod n)
得到(mφ(n))h × m ≡ m (mod n)”這個(gè)是怎么得到啊?(mφ(n))h≡1(mod n)這樣寫,對(duì)嗎?接著,后面又多乘以個(gè)m,就能變成這樣啦(mφ(n))h × m ≡ m (mod n),這個(gè)是為什么呢?
2.這個(gè)跟1.應(yīng)該是同樣的問(wèn)題“(kp)q-1 ≡ 1 (mod q)
進(jìn)一步得到[(kp)q-1]h(p-1) × kp ≡ kp (mod q)”這個(gè)也是,左右都乘以kp,這是為什么呢?
3.這個(gè)是我看RSA算法原理(一)中的疑問(wèn):“因此,7的任意次方的個(gè)位數(shù)(例如7的222次方),心算就可以算出來(lái)”這是怎么得到的呢?我只想到了:7的222次方=7的2次方*7的(4*55)次方,下面就不知道了。還望解惑,不勝感激~
2014年1月 2日 17:52 | # | 引用
如果量子計(jì)算機(jī)可以破解1024bit的RSA,那么可以用量子計(jì)算機(jī)做更長(zhǎng)bit位的加密,比如2048bit...,直到無(wú)法破解
2014年1月 5日 17:07 | # | 引用
to:趙三
1,(mφ(n))h≡1(mod n)這樣寫是對(duì)的,這個(gè)可以通過(guò)≡的含義,然后通過(guò)一個(gè)推導(dǎo)(也就是從h-1到h的推導(dǎo))可以看出是正確的。比如設(shè)(mφ(n))h=r1*n+1,然后(mφ(n))h*m=(r1*n+1)*m,這個(gè)和n的余數(shù)就是m。
2,RSA算法原理(1)中回復(fù)里面有這個(gè)問(wèn)題。7的(4*55)的余數(shù)就是1,然后7的2次方的余數(shù)為9,那結(jié)果就是9
2014年1月 7日 21:26 | # | 引用
證明
(m^e - kn)^d ≡ m (mod n)
等同于證明
m^ed ≡ m (mod n)
卡住在這里了,麻煩幫忙解釋一下。
2014年1月12日 10:40 | # | 引用
相當(dāng)詳實(shí)生動(dòng),非常感謝,,,,就是舉例子的數(shù)字有點(diǎn)大了,,普通計(jì)算機(jī)直接正無(wú)窮大了,,,
2014年1月12日 22:59 | # | 引用
問(wèn)個(gè)問(wèn)題,
1,這個(gè)巨大的質(zhì)數(shù)或那兩個(gè)相乘質(zhì)數(shù)從哪來(lái)的,2048位的從哪來(lái)的。RSA算法的可靠性依賴于大整數(shù)的因數(shù)分解,是一件非常困難的事情,那大整數(shù)現(xiàn)在最大到多少了,2048位以上的現(xiàn)在有么,好像還有什么美國(guó)輸出限制。
2,如果分解困難,用現(xiàn)在產(chǎn)生大質(zhì)數(shù)的算法,是否可以反推出來(lái)大質(zhì)數(shù),產(chǎn)生一個(gè)對(duì)應(yīng)列表,就像md5的彩虹表,是否就可以破解。
謝謝
2014年1月13日 15:32 | # | 引用
你好,我覺(jué)得第五步驟里面:
所謂"模反元素"就是指有一個(gè)整數(shù)d,可以使得ed被φ(n)除的余數(shù)為1。
這句話后半句,應(yīng)該是使得 φ(n) 被ed除的余數(shù)為1。
這是來(lái)自wiki的除法舉例:
15 可以被 5 整除,記作 5|15。
文章中本意應(yīng)該是ed除以φ(n)的余數(shù)是1的邏輯。
2014年1月14日 10:37 | # | 引用
其它都很清晰,第5步跳的太快了:
ed ≡ 1 (mod φ(n))
怎么就得到
ed - 1 = kφ(n)? K從哪里來(lái)?是不是從第一篇中這里來(lái)(b+kn 都是a的模反元素)?
再變成
ex + φ(n)y = 1,這時(shí)候K是不是就是Y了?X就是D了?
2014年1月19日 22:57 | # | 引用
引用luke的發(fā)言:
其它都很清晰,第5步跳的太快了:
ed ≡ 1 (mod φ(n))
怎么就得到
ed - 1 = kφ(n)? K從哪里來(lái)?是不是從第一篇中這里來(lái)(b+kn 都是a的模反元素)?
再變成
ex + φ(n)y = 1,這時(shí)候K是不是就是Y了?X就是D了?
問(wèn)了一下同事,明白了!!! ed ≡ 1 (mod φ(n)) 意味著,ed除以φ(n)余1,于是,ed-1就能被φ(n)整除。能被整除就意味著 ed-1=kφ(n),k是任意一個(gè)整數(shù)。
2014年1月20日 17:53 | # | 引用
引用colde的發(fā)言:
證明
(m^e - kn)^d ≡ m (mod n)
等同于證明
m^ed ≡ m (mod n)
卡住在這里了,麻煩幫忙解釋一下。
唉,我也卡在這里了。求高人繼續(xù)。
2014年1月21日 15:48 | # | 引用
引用luke的發(fā)言:
唉,我也卡在這里了。求高人繼續(xù)。
想通了。(m^e - kn)^d 等同于 m^(ed)-kn而 (m^e - kn)^d ≡ m (mod n)
意味著,(m^e-kn)^d - m = kn
所以,m^(ed)-kn - m = kn
得到,m^(ed) - m = 2kn => m^(ed) - m = kn (這里k只是代表一個(gè)整數(shù)倍的關(guān)系,值并不重要)
而 m^(ed) - m = kn 正意味著 m^(ed) ≡ m (mod n)
2014年1月21日 17:23 | # | 引用
引用ssapym的發(fā)言:
問(wèn)個(gè)問(wèn)題,
1,這個(gè)巨大的質(zhì)數(shù)或那兩個(gè)相乘質(zhì)數(shù)從哪來(lái)的,2048位的從哪來(lái)的。RSA算法的可靠性依賴于大整數(shù)的因數(shù)分解,是一件非常困難的事情,那大整數(shù)現(xiàn)在最大到多少了,2048位以上的現(xiàn)在有么,好像還有什么美國(guó)輸出限制。
2,如果分解困難,用現(xiàn)在產(chǎn)生大質(zhì)數(shù)的算法,是否可以反推出來(lái)大質(zhì)數(shù),產(chǎn)生一個(gè)對(duì)應(yīng)列表,就像md5的彩虹表,是否就可以破解。
謝謝
2^1024大約是10^308這個(gè)數(shù)量級(jí),包含的素?cái)?shù)可以由素?cái)?shù)定理知道大約是x/ln(x)這個(gè)數(shù)量級(jí),可選的素?cái)?shù)p和q太多了,p*q的組合就更多了,怎么做彩虹表?
彩虹表是基于有一些常用的密碼(比如password, 123456)算出來(lái)的,你隨機(jī)選一個(gè)密碼,多半不會(huì)出現(xiàn)在彩虹表中。同理,你隨機(jī)選兩個(gè)p,q,怎么查彩虹表?
2014年1月24日 11:23 | # | 引用
找到高人了,寫得清楚,有例子,每步都寫出原理。
2014年2月14日 22:00 | # | 引用
謝謝阮老師深入淺出的講解,我知道了RSA算法是怎么回事兒了。
我感覺(jué)那些嚴(yán)謹(jǐn)?shù)淖C明過(guò)程不必細(xì)致追究,主要是搞清楚RSA算法是什么,除非那些數(shù)學(xué)專業(yè)的。
2014年2月18日 21:47 | # | 引用
我無(wú)法讀懂上面的數(shù)學(xué)公式.
請(qǐng)問(wèn),高中水平的我,需要學(xué)習(xí)那些書本,才能看懂上面的公式呢?
謝謝各位.
我懂質(zhì)數(shù)
2014年2月24日 14:57 | # | 引用
引用介木的發(fā)言:
我無(wú)法讀懂上面的數(shù)學(xué)公式.
請(qǐng)問(wèn),高中水平的我,需要學(xué)習(xí)那些書本,才能看懂上面的公式呢?
謝謝各位.
我懂質(zhì)數(shù)
高中確實(shí)不涉及這方面的知識(shí)。找點(diǎn)關(guān)于余數(shù)的數(shù)論書看,知道基本的同余定理就行了。
2014年2月24日 20:38 | # | 引用
我有個(gè)問(wèn)題
根據(jù) c^d ≡ m (mod n)
加密者不知道私鑰d,但是他知道明文m,密文c,以及n,是否可以推算出私鑰d
2014年3月 4日 13:57 | # | 引用
還有一個(gè)問(wèn)題,我是做金融的,在金融領(lǐng)域經(jīng)常用到轉(zhuǎn)加密這個(gè)概念
1. 老張先用公鑰e1對(duì)明文m加密得到密文c1,然后將密文c1傳遞給老王
2. 老王收到密文c1后,用公鑰e2替換公鑰e1,得到密文c2
我想知道公鑰e2替換公鑰e1的具體過(guò)程
是先用私鑰d1解密密文c1,還原出明文m以后,再用公鑰e2對(duì)明文m加密得到密文c2
還是在一個(gè)原子過(guò)程中,直接就可以用私鑰d1,公鑰e2,密文c1計(jì)算出新密文c2,在計(jì)算過(guò)程中可以避免出現(xiàn)明文m?
2014年3月 4日 14:38 | # | 引用
您好,以前看過(guò)你的這篇文章了,最近在看一個(gè)系統(tǒng)teamcity的登錄過(guò)程,它會(huì)先給用戶發(fā)一個(gè)公鑰,然后用這個(gè)公鑰對(duì)密碼進(jìn)行加密,發(fā)給服務(wù)器,從我看來(lái),好像每次它發(fā)過(guò)來(lái)的公鑰都是同一個(gè)串,是不是說(shuō)只要有足夠的計(jì)算力和足夠的時(shí)間,我從這個(gè)公鑰推出了其中的私鑰,就可以破解用戶發(fā)給它的所有密碼?
我比較困惑的是,如果一個(gè)系統(tǒng)的安全系數(shù)要求很高的話,不需要經(jīng)常更換公鑰嗎?
有沒(méi)有可能一個(gè)經(jīng)常破解密碼的人,在一個(gè)地方看到一個(gè)公鑰正好是他之前破解過(guò)的,那他也就能輕易破解新系統(tǒng)的密碼? 我們所能使用的公鑰理論上市無(wú)限的嗎?
希望能夠解答,謝謝
2014年3月 7日 16:54 | # | 引用
第四步,隨機(jī)選擇一個(gè)整數(shù)e,條件是1
e不一定要小于φ(n)吧,根據(jù)歐拉定律,e只要跟φ(n) 互質(zhì)就可以了
求大神解惑
2014年5月 9日 11:09 | # | 引用
引用袁定平的發(fā)言:
您好,以前看過(guò)你的這篇文章了,最近在看一個(gè)系統(tǒng)teamcity的登錄過(guò)程,它會(huì)先給用戶發(fā)一個(gè)公鑰,然后用這個(gè)公鑰對(duì)密碼進(jìn)行加密,發(fā)給服務(wù)器,從我看來(lái),好像每次它發(fā)過(guò)來(lái)的公鑰都是同一個(gè)串,是不是說(shuō)只要有足夠的計(jì)算力和足夠的時(shí)間,我從這個(gè)公鑰推出了其中的私鑰,就可以破解用戶發(fā)給它的所有密碼?
我比較困惑的是,如果一個(gè)系統(tǒng)的安全系數(shù)要求很高的話,不需要經(jīng)常更換公鑰嗎?
有沒(méi)有可能一個(gè)經(jīng)常破解密碼的人,在一個(gè)地方看到一個(gè)公鑰正好是他之前破解過(guò)的,那他也就能輕易破解新系統(tǒng)的密碼? 我們所能使用的公鑰理論上市無(wú)限的嗎?
希望能夠解答,謝謝
個(gè)人觀點(diǎn):
1,公鑰本來(lái)就是公開(kāi)的,沒(méi)有必要更換;
2,公鑰不可能(所需時(shí)間和計(jì)算力無(wú)比的巨大)推算出私鑰;
3,首先一個(gè)人不可能破解過(guò)一個(gè)公鑰。其次是簡(jiǎn)單的算法,私鑰對(duì)應(yīng)一個(gè)確定的公鑰,這是有風(fēng)險(xiǎn)的,所以現(xiàn)在的加密算法還使用了隨機(jī)數(shù),破解不可能,運(yùn)氣更不可能。
2014年6月 5日 17:46 | # | 引用
引用STL的發(fā)言:
謝謝你的文章。想問(wèn)個(gè)問(wèn)題,那個(gè)鮑勃向愛(ài)麗絲發(fā)消息的例子是單向的,如果愛(ài)麗絲想回復(fù)的話該怎么辦呢?這時(shí)候是不是必須先協(xié)商一個(gè)密鑰然后對(duì)稱加密?
每個(gè)個(gè)體都有自己的公鑰和私鑰,在通信中,故愛(ài)麗絲也有自己的公鑰和私鑰。
2014年6月 8日 16:18 | # | 引用
引用Martin.Hsuching的發(fā)言:
寫的很不錯(cuò),淺顯易懂,但看完,覺(jué)得最后一段有個(gè)疑惑,請(qǐng)教一下:(kp)ed = tq + kp
這時(shí)t必然能被p整除,即 t=t'p,這個(gè)必然性是如何證明的?請(qǐng)指導(dǎo)下~~謝謝
(kp)^ed = tq + kp => tq = (kp)(kp^ed-1 - 1)
因?yàn)閜,q是互質(zhì),所以kp必然不能整除q,那么就必然整除t,t=t'p
2014年6月26日 15:32 | # | 引用
引用ssapym的發(fā)言:
問(wèn)個(gè)問(wèn)題,
1,這個(gè)巨大的質(zhì)數(shù)或那兩個(gè)相乘質(zhì)數(shù)從哪來(lái)的,2048位的從哪來(lái)的。RSA算法的可靠性依賴于大整數(shù)的因數(shù)分解,是一件非常困難的事情,那大整數(shù)現(xiàn)在最大到多少了,2048位以上的現(xiàn)在有么,好像還有什么美國(guó)輸出限制。
2,如果分解困難,用現(xiàn)在產(chǎn)生大質(zhì)數(shù)的算法,是否可以反推出來(lái)大質(zhì)數(shù),產(chǎn)生一個(gè)對(duì)應(yīng)列表,就像md5的彩虹表,是否就可以破解。
謝謝
引用mine260309的發(fā)言:2^1024大約是10^308這個(gè)數(shù)量級(jí),包含的素?cái)?shù)可以由素?cái)?shù)定理知道大約是x/ln(x)這個(gè)數(shù)量級(jí),可選的素?cái)?shù)p和q太多了,p*q的組合就更多了,怎么做彩虹表?
彩虹表是基于有一些常用的密碼(比如password, 123456)算出來(lái)的,你隨機(jī)選一個(gè)密碼,多半不會(huì)出現(xiàn)在彩虹表中。同理,你隨機(jī)選兩個(gè)p,q,怎么查彩虹表?
我的看法:
p*q的積的二進(jìn)制的位數(shù)如果固定并確定為1024,則p和q的取值只能在一定范圍內(nèi)取,這在RSA密鑰生成軟件中自然會(huì)有指定。如果所有的密鑰生成機(jī)制都按同一規(guī)定,那么由于素?cái)?shù)資源不是隨機(jī)無(wú)限的(有素?cái)?shù)生成機(jī)制的限制,有隨意取兩個(gè)素?cái)?shù)的乘積的二進(jìn)制位數(shù)的限制),設(shè)素?cái)?shù)資源的個(gè)數(shù)為n,在有限的素?cái)?shù)資源中取出兩個(gè)數(shù)的可能組合將是C|(2,n)。將每個(gè)組合的乘積一一列出,就可以組成彩虹表,可以從乘積列表中查找出對(duì)應(yīng)的素?cái)?shù)組合,進(jìn)而推出公鑰和私鑰。素?cái)?shù)資源不夠的軟件產(chǎn)生的密鑰,尤其具有這樣的隱患,看似很安全,實(shí)際上人家大的機(jī)構(gòu)很容易破解出私鑰來(lái)。所以,生產(chǎn)大素?cái)?shù)的機(jī)構(gòu)就像開(kāi)礦公司,也像數(shù)字銀行,擁有的素?cái)?shù)資源越多越安全。不知是否可以這樣理解?
不同機(jī)構(gòu)產(chǎn)生的證書(包括私鑰、公鑰)的質(zhì)量(指安全保證)是良莠不齊的。
我想ssapym彩虹表的本意即在如此。
2014年7月21日 12:40 | # | 引用
引用luke的發(fā)言:
唉,我也卡在這里了。求高人繼續(xù)。
(m^e - kn)^d ≡ m (mod n)
分解下左邊公式
(m^e - kn)^d = m^ed + [(m^e)^d-1]*kn + [(m^e)^d-2]*kn^2 + ....
除了第一個(gè)m^ed,后面的數(shù)都含有XXX*kn,所以都能被n整除
2014年7月22日 16:23 | # | 引用
受益匪淺
2014年7月24日 11:28 | # | 引用
大哥,那個(gè)模反元素有問(wèn)題
一說(shuō):
a* a的[φ(n)-1] % n = 1
二說(shuō):
a* a的[φ(n)-1] % φ(n) = 1
明顯不一樣了丫、。。。。
2014年7月24日 21:41 | # | 引用
這步mφ(n) ≡ 1 (mod n)
到
(mφ(n))h × m ≡ m (mod n)
實(shí)在看不懂,能否詳細(xì)解釋下?
2014年7月31日 10:09 | # | 引用
引用shindo的發(fā)言:
這步mφ(n) ≡ 1 (mod n)
到
(mφ(n))h × m ≡ m (mod n)
實(shí)在看不懂,能否詳細(xì)解釋下?
我懂了, mφ(n) ≡ 1 (mod n) => mφ(n) = K n +1 , k為自然數(shù)
(kn + 1)^h 展開(kāi)多項(xiàng)式,除了1以外,全部含有kn, 所以其他項(xiàng)都能被n整除而余1..
也就是能推出 (mφ(n))h ≡ 1 (mod n)
然后m 這個(gè)中間數(shù)學(xué)gap還是挺大的...
2014年7月31日 14:26 | # | 引用
調(diào)理清晰,把一個(gè)復(fù)雜難懂的數(shù)學(xué)問(wèn)題,一步一步分解,深入淺出,容易理解,學(xué)習(xí)了!
2014年8月23日 19:07 | # | 引用
文章超贊……
要是你能加上怎么快速生成的方法,相信對(duì)讀者更有幫助,因?yàn)槲艺业竭@篇文章是因?yàn)槲蚁肟焖偕晒€私鑰來(lái)用,而我又是剛接觸linux:
ssh-keygen -t rsa
2014年9月 4日 10:42 | # | 引用
RSA加密解密算法中,已知公鑰和密匙n,e,d,是否能將合數(shù)n=p*q分解?
先溫故一下RSA算法:
1、兩個(gè)大質(zhì)數(shù)p,q。
2、模數(shù)n=p*q。
3、歐拉函數(shù)f=(p-1)(q-1)。
4、隨機(jī)數(shù)e,15、模逆d,即最小整數(shù)d,e*d=1 mod f。
也就是說(shuō):
知道了p,q也就知道了n,f;
知道了f,e也就知道了d。
下面溫故一下加密解密算法:
已知明文m,滿足m加密:密文c=m^e mod n。
解密:明文x=c^d mod n。
證明一下解密得到的明文x=m:
由c=m^e mod n,得c=m^e+k*n。
代入x=c^d mod n,得x=(m^e+k*n)^d mod n。
于是x=m^e^d mod n,即x=m^(e*d) mod n。
由于e^d=1 mod f,得e*d=k*f+1。
代入得x=m^(kf+1) mod n,x=m*m^(kf) mod n。
當(dāng)m與n互質(zhì)時(shí),x=m*(m^f)^k mod n,由歐拉定理可知x=m mod n。
又m當(dāng)m與n不互質(zhì)時(shí),由于n=p*q且m若m=kp,則m^(q-1)=(k*p)^(q-1)=1 mod q。
接著[(k*p)^(q-1)]^[k*(p-1)]*kp=kp mod q,即(k*p)^(e*d)=k*p mod q。
又由于(k*p)^(ed)=k*q+k*p,(k*p)^(ed)=k*q*p+k*p,。
所以m^(ed)=m mod n,x=m。
即證。
2014年9月 9日 22:05 | # | 引用
現(xiàn)在考慮以下問(wèn)題:
已知n和d,是否能將n分解?
可將這個(gè)問(wèn)題分為幾個(gè)問(wèn)題:
1、已知n和f,是否能將n分解?
2、已知n,e和d,是否能得到f?
3、已知n和d,是否能得到e?
4、已知d和f,是否能得到e?
對(duì)于問(wèn)題1的回答是肯定的。
n-f+1=sum=p+q,用二分法厲遍p,得p(sum-p)和n比較大小,即可快速確定p,q的值。
所以知道了n,f,就知道了p和q。也就是說(shuō),p,q,n,f四個(gè)數(shù)知道任意兩個(gè)就可以知道全部。
那么,問(wèn)題2就來(lái)了。如果p,q,n,f只知其一,又知道了e和d,是否能知道其它三個(gè)數(shù)呢?
最常見(jiàn)的情況就是知道了n,e和d。
由e*d=1 mod f,知e*d=k*f+1。
根據(jù)的同余方程定理可以知道存在k并且d,k始終互質(zhì),由e,f互質(zhì)又可推出e,k互質(zhì)和f,d互質(zhì)。
現(xiàn)在的問(wèn)題又變?yōu)?#xff0c;e,d,f三個(gè)數(shù)各知道兩個(gè),能否知道第三個(gè)數(shù)?在已知n的情況下又是如何呢?
已知e,f可知道d,已知e,d不可知道f。
已知d,f,因?yàn)閐,f互質(zhì),所以模逆e必存在,e必然在f的同余類中。又e也就是說(shuō),e,f求d和d,f求e的過(guò)程是相同的。
這樣,問(wèn)題4的回答就是肯定的。
我們還可以發(fā)現(xiàn),問(wèn)題3的回答是否定的。
e和d對(duì)于f的地位是等價(jià)的,我們顯然不可能用公匙n,e得到密匙n,d,所以反之亦然。
于是我們發(fā)現(xiàn),f是十分重要的。知道了f,那么e和d就能互求。知道了f,那么n,p,q就能互求。
最后我們回到問(wèn)題2。由于n,p,q的地位是等價(jià)的,我們可以換個(gè)死路考慮。
在已知p,e,d的情況下能否知道f和n?由e*d=k*f+1可以算出k*f。
然后又知道了p,可以算出k*(p-1)(q-1)/(p-1)=k*(q-1)。
然而這樣組合的數(shù)量是很多的,如果不知打k,我們不可能知道q。所以知道p,e,d不能知道f或n。
那么知道n,e,d,也就是知道n和k*f,也就是知道p*q和k(p-1)(q-1)的情況下呢?
由于k是不可知的,k值的不同會(huì)導(dǎo)致f產(chǎn)生很大的變化。
我們雖然知道上限n,但直接拿f去除以n顯然不能得到正確的k。
由于p和q的差值可能很大也可能很小,所以除出來(lái)的結(jié)果可能十分接近k也可能和k差很多。
于是無(wú)法縮小搜索p和q的范圍,也無(wú)從使用二分法。
所以我認(rèn)為,已知n,e,d是無(wú)法得到f的,同樣也無(wú)法得到p和q。
如果大家有辦法分解n的話,求詳細(xì)的算法。
2014年9月 9日 22:05 | # | 引用
正在查rsa的資料,又回到了這里,想自己實(shí)現(xiàn)一個(gè)簡(jiǎn)易的rsa。
2014年9月 9日 22:50 | # | 引用
引用Leon的發(fā)言:
兩邊同時(shí)整除p,又p、q互質(zhì),于是t必定是p的整數(shù)倍。
這種解釋說(shuō)法就是“雞生蛋,蛋生雞”問(wèn)題,拿著要證明的結(jié)果作為證明的已知條件來(lái)證明問(wèn)題!!!
2014年9月13日 23:15 | # | 引用
第一次看懂了rsa算法, 真是好文章
2014年9月13日 23:24 | # | 引用
引用shindo的發(fā)言:
我懂了, mφ(n) ≡ 1 (mod n) => mφ(n) = K n +1 , k為自然數(shù)
(kn + 1)^h 展開(kāi)多項(xiàng)式,除了1以外,全部含有kn, 所以其他項(xiàng)都能被n整除而余1..
也就是能推出 (mφ(n))h ≡ 1 (mod n)
然后m
這個(gè)中間數(shù)學(xué)gap還是挺大的...
去看數(shù)論中同余性質(zhì)吧,
性質(zhì)5:若a≡b(mod m),c≡d(mod m),那么ac≡bd(mod m)(可乘性)。
性質(zhì)6:若a≡b(mod m),那么an≡bn(mod m)(其中n為自然數(shù))。
可以看成是
由h個(gè)式子相乘,然后再與m≡m(mod n)相乘,這里m得到。。。
[(kp)q-1]h(p-1) × kp ≡ kp (mod q)
可以直接一步得到結(jié)論了,何必之后那幾步推導(dǎo)?
對(duì)頭,到這就可以截止了,況且后面證明的很亂
2014年9月14日 00:28 | # | 引用
好像和CLRS算法差不多,但是各有各的特點(diǎn)及其長(zhǎng)處.
2014年9月14日 03:09 | # | 引用
突然發(fā)現(xiàn),雙方的公鑰和私鑰對(duì)換,還是能夠順利加密和解密的。
2014年9月19日 07:49 | # | 引用
以 m = kp為例,考慮到這時(shí)k與q必然互質(zhì)。
這句話不對(duì)吧,比如說(shuō)m=3n=3qp不行嗎,那么k=3q,哪來(lái)必然互質(zhì)?應(yīng)該再細(xì)分
2014年9月30日 16:52 | # | 引用
引用NeroLee的發(fā)言:
以 m = kp為例,考慮到這時(shí)k與q必然互質(zhì)。
這句話不對(duì)吧,比如說(shuō)m=3n=3qp不行嗎,那么k=3q,哪來(lái)必然互質(zhì)?應(yīng)該再細(xì)分
根據(jù)RSA規(guī)范,要加密的信息m,范圍為0~n-1,所以你說(shuō)的不成立。
5.1.1 RSAEP
RSAEP ((n, e), m)
Input: (n, e) RSA public key
m message representative, an integer between 0 and n– 1
Output: c ciphertext representative, an integer between 0 and n– 1
2014年10月23日 11:42 | # | 引用
引用zoudaokou2006的發(fā)言:
根據(jù)RSA規(guī)范,要加密的信息m,范圍為0~n-1,所以你說(shuō)的不成立。
5.1.1RSAEP
RSAEP ((n, e), m)
Input: (n, e) RSA public key
m message representative, an integer between 0 and n– 1
Output: c ciphertext representative, an integer between 0 and n– 1
Thanks. 現(xiàn)在懂了。
2014年10月27日 14:49 | # | 引用
我看到了未來(lái)的密鑰是1mb起碼。。。。。。
2014年11月11日 09:48 | # | 引用
65^17 ≡ c (mod 3233)
說(shuō)等于
65^17 ≡ 2790 (mod 3233)
即c等于2790
想請(qǐng)問(wèn)下,這里的2790是怎么算出來(lái)的??
2014年11月26日 14:46 | # | 引用
引用t.k.的發(fā)言:
九的子標(biāo)題(2)m與n不是互質(zhì)關(guān)系中
應(yīng)該是“m與q必然互質(zhì)”。
另外,數(shù)學(xué)公式用mathjax會(huì)更好看一些。
“m與q必然互質(zhì)”沒(méi)錯(cuò),因?yàn)閙=kq
2014年11月26日 14:49 | # | 引用
65^17 ≡ c (mod 3233)
說(shuō)等于
65^17 ≡ 2790 (mod 3233)
即c等于2790
想請(qǐng)問(wèn)下,這里的2790是怎么算出來(lái)的??
我指的是口算或者筆算 不是利用計(jì)算機(jī)算65的17次方除以3233
有沒(méi)有簡(jiǎn)單算法 如果筆算65的17次方 會(huì)死人的。。。
2014年11月26日 15:59 | # | 引用
一口氣看完兩篇, 果然精彩
2014年11月30日 02:07 | # | 引用
k與q必然互質(zhì)
卡在這里了
2014年12月18日 16:36 | # | 引用
你好,請(qǐng)教一下:像12306這樣的網(wǎng)站,在使用時(shí)要下載他的證書并導(dǎo)入,這時(shí)下載的證書是證書請(qǐng)求文件CSR嗎?還是已經(jīng)經(jīng)過(guò)簽名的公鑰了?
2014年12月22日 12:49 | # | 引用
終于搞懂了,非常感謝!
2014年12月26日 10:54 | # | 引用
剛接觸RSA時(shí)看過(guò)其他網(wǎng)上的微博,要么是粘貼過(guò)來(lái)的,要么是片面不詳細(xì)。今天看了阮先生描寫的原理,頓時(shí)醍醐灌頂,把我所有沒(méi)有搞懂的、有疑問(wèn)的統(tǒng)統(tǒng)說(shuō)清楚了,特別是數(shù)論原理,推導(dǎo)的過(guò)程描述的很詳細(xì)。還結(jié)合實(shí)際中的密鑰的長(zhǎng)度、實(shí)際當(dāng)中的數(shù)值,這些是剛接觸加密算法的時(shí)候都有的疑問(wèn),這兩篇文章都描寫的非常詳細(xì),真的受益匪淺,而且特別欣賞這種寫作風(fēng)格,嚴(yán)謹(jǐn)、有據(jù)。真的謝謝
2015年1月 8日 10:45 | # | 引用
博主寫的文章讓人漲知識(shí)!
2015年1月14日 21:38 | # | 引用
這是我見(jiàn)過(guò)的最通俗易懂的解釋!!
2015年1月27日 19:52 | # | 引用
謝謝lz。
但有個(gè)問(wèn)題,“如果私鑰被攻破,那么消息就會(huì)被破解”。這里是不是隱含了解密算法或者是加密算法,可以認(rèn)為是公開(kāi)的了,至少是容易獲得的。
如果是這樣,為什么不能從加密算法和已知的公鑰已經(jīng)加密后的信息,反推出原始信息呢?
2015年2月 3日 14:42 | # | 引用
您好,我看了網(wǎng)易公開(kāi)課中的現(xiàn)代密碼學(xué),再看了您的文章感覺(jué)清晰很多,但有一點(diǎn)一直不大懂,求d時(shí)用到“拓展歐幾里得算法”具體應(yīng)該怎么算?
我對(duì)這方面很有興趣,高中數(shù)學(xué)競(jìng)賽也學(xué)過(guò)一些數(shù)論知識(shí)(現(xiàn)在大一),但受專業(yè)限制接觸不到這方面知識(shí),打算通過(guò)網(wǎng)易公開(kāi)課自學(xué),純粹出于興趣。希望有機(jī)會(huì)與您多交流學(xué)習(xí)。
2015年2月27日 15:29 | # | 引用
引用傅琦佳的發(fā)言:
您好,我看了網(wǎng)易公開(kāi)課中的現(xiàn)代密碼學(xué),再看了您的文章感覺(jué)清晰很多,但有一點(diǎn)一直不大懂,求d時(shí)用到“拓展歐幾里得算法”具體應(yīng)該怎么算?
我對(duì)這方面很有興趣,高中數(shù)學(xué)競(jìng)賽也學(xué)過(guò)一些數(shù)論知識(shí)(現(xiàn)在大一),但受專業(yè)限制接觸不到這方面知識(shí),打算通過(guò)網(wǎng)易公開(kāi)課自學(xué),純粹出于興趣。希望有機(jī)會(huì)與您多交流學(xué)習(xí)。
百度百科里關(guān)于擴(kuò)展歐幾里得算法有講具體怎么做。
2015年3月11日 15:17 | # | 引用
豁然開(kāi)朗,十分感謝
2015年4月16日 15:47 | # | 引用
有一個(gè)疑問(wèn),就是在加密的時(shí)候 用的這個(gè)式子:m的e次方 ≡ c (mod n) 來(lái)計(jì)算出的c ,然后之后是把c給了愛(ài)麗絲讓愛(ài)麗絲拿私鑰去解m,我想問(wèn)的是這時(shí)候知道c,可不可以還用之前那個(gè)得出c的式子: m的e次方 ≡ c (mod n) 再反過(guò)去解出m,因?yàn)檫@時(shí)候n,c,e都已知。m就等于 c (mod n)再開(kāi)e次方了。 大神快粗來(lái),急,在線等~~
2015年4月25日 14:42 | # | 引用
第二次看了,還是沒(méi)看太懂。下次繼續(xù)學(xué)習(xí)。謝謝阮老師
2015年4月29日 17:13 | # | 引用
65^17 ≡ 2790 (mod 3233) 這個(gè)式子成立嗎?
2790 mod 3233 = 2790
65^17 mod 3233 = 887 (matlab得到的結(jié)果)
另外 2790^2753 ≡ 65 (mod 3233) 這個(gè)式子中的 2790^2753 這個(gè)值,計(jì)算機(jī)可以算出來(lái)嗎?
謝謝
2015年5月29日 18:11 | # | 引用
還是有個(gè)疑問(wèn):
alice 回信的時(shí)候,咋整?
bob發(fā)信: bob(公鑰加密) -> alice (私鑰解密),這個(gè)邏輯我明白
alice 回信, 這個(gè)怎么處理?求解!!
2015年6月12日 20:54 | # | 引用
引用luke的發(fā)言:
想通了。
(m^e - kn)^d 等同于 m^(ed)-kn
而 (m^e - kn)^d ≡ m (mod n)
意味著,(m^e-kn)^d - m = kn
所以,m^(ed)-kn - m = kn
得到,m^(ed) - m = 2kn => m^(ed) - m = kn (這里k只是代表一個(gè)整數(shù)倍的關(guān)系,值并不重要)
而 m^(ed) - m = kn 正意味著 m^(ed) ≡ m (mod n)
把(m^e - kn)^d 完全展開(kāi)后只有一項(xiàng)不包含n的項(xiàng) m^ed m^ed對(duì)n取余就等于 (m^e - kn)^d 對(duì)n取余
2015年6月15日 18:49 | # | 引用
引用Codisan的發(fā)言:
還是有個(gè)疑問(wèn):
alice 回信的時(shí)候,咋整?
bob發(fā)信: bob(公鑰加密) -> alice (私鑰解密),這個(gè)邏輯我明白
alice 回信, 這個(gè)怎么處理?求解!!
bob給alice發(fā)信,用的是Alice的公鑰,Alice用自己的私鑰解密;如果Alice要給bob回信,就換成bob的公鑰加密,bob用自己的私鑰解密。
2015年6月18日 13:16 | # | 引用
怒贊!!!!
2015年7月10日 11:32 | # | 引用
引用王軍的發(fā)言:
65^17 ≡ c (mod 3233)
說(shuō)等于
65^17 ≡ 2790 (mod 3233)
即c等于2790
想請(qǐng)問(wèn)下,這里的2790是怎么算出來(lái)的??
我指的是口算或者筆算不是利用計(jì)算機(jī)算65的17次方除以3233
有沒(méi)有簡(jiǎn)單算法 如果筆算65的17次方 會(huì)死人的。。。
模冪法:
依次計(jì)算65^2 mod 3233, 65^4 mod 3233, 65^8 mod 3233, 65^16 mod 3233,最后再將65^16 mod 3233的結(jié)果和65相乘再mod 3233,這樣可以保證最多只要做2*log3(n)次大數(shù)乘法和大數(shù)取模運(yùn)算就可以得出結(jié)果了。
2015年7月13日 19:50 | # | 引用
感謝博主,雖然對(duì)數(shù)學(xué)的還沒(méi)有完全搞懂,但是基本上能淺顯理解RSA的理論基礎(chǔ)了,感謝感謝。
2015年7月17日 16:24 | # | 引用
阮先生好,我在看的時(shí)候也會(huì)有@袁宇陽(yáng) 的問(wèn)題,可以直接拿公鑰和加密后的數(shù)據(jù)反推出加密之前的數(shù)據(jù)嗎?
2015年8月16日 17:48 | # | 引用
"以 m = kp為例,考慮到這時(shí)k與q必然互質(zhì),則根據(jù)歐拉定理,下面的式子成立:"
這一句疑似應(yīng)為
"考慮到這時(shí)kp與q必然互質(zhì)"
2015年8月19日 13:56 | # | 引用
引用王軍的發(fā)言:
65^17 ≡ c (mod 3233)
說(shuō)等于
65^17 ≡ 2790 (mod 3233)
即c等于2790
想請(qǐng)問(wèn)下,這里的2790是怎么算出來(lái)的??
我指的是口算或者筆算不是利用計(jì)算機(jī)算65的17次方除以3233
有沒(méi)有簡(jiǎn)單算法 如果筆算65的17次方 會(huì)死人的。。。
請(qǐng)自行百度快速冪取模算法,這是CS算法中一個(gè)比較基本的算法。
2015年10月 7日 16:59 | # | 引用
太棒!!!!邏輯清晰,描述清楚!感謝博主!真的是三言兩語(yǔ)我完全看懂了!還有當(dāng)時(shí)一直就在想能不能由n反推私鑰的問(wèn)題,還有私鑰一定能解的證明,真是好感謝!
教材和老師巴拉了一堆我什么都不知道
2015年10月18日 07:31 | # | 引用
以 m = kp為例,考慮到這時(shí)k與q必然互質(zhì)這塊為什么??
2015年10月22日 17:21 | # | 引用
如果事先能找到的目前發(fā)現(xiàn)的質(zhì)數(shù)數(shù)據(jù)集,進(jìn)行計(jì)算出數(shù)據(jù)庫(kù),這樣的數(shù)據(jù)庫(kù)會(huì)有多大。
2015年11月 9日 16:13 | # | 引用
引用nkAmerica的發(fā)言: 根本沒(méi)有協(xié)商過(guò)程啊。都是用對(duì)方的公鑰加密
你的意思是在我們生成的密鑰對(duì)里,并將公鑰給了鮑勃,然后鮑勃也將自己生成的密鑰對(duì)里的公鑰給了愛(ài)麗絲?
但我們?cè)谟?SSH-KEYGEN生成密鑰對(duì)時(shí),給了鮑勃公鑰,鮑勃是怎么將自己的密鑰對(duì)里的公鑰給愛(ài)麗絲的?
2015年11月28日 20:58 | # | 引用
文章很好,學(xué)到了,真心感謝,但里面一些圖片顯示不出來(lái),是否是來(lái)源網(wǎng)站被墻的問(wèn)題呢?
2015年12月12日 16:57 | # | 引用
引用我誰(shuí)也不是的發(fā)言:
bob給alice發(fā)信,用的是Alice的公鑰,Alice用自己的私鑰解密;如果Alice要給bob回信,就換成bob的公鑰加密,bob用自己的私鑰解密。
2015年12月29日 17:54 | # | 引用
博主高人也!
2016年1月20日 17:18 | # | 引用
引用zz的發(fā)言:
第四步計(jì)算模反元素下面這倆式子貌似符號(hào)弄錯(cuò)了~
ex + φ(n)y = 1
已知 e=17, φ(n)=3120,
17x + 3120y = 1
應(yīng)為: 17x-3120y=1
2016年1月23日 06:52 | # | 引用
引用zzzp的發(fā)言:
應(yīng)為: 17x-3120y=1
d=2753 k=15.
2016年1月23日 06:53 | # | 引用
引用zzzp的發(fā)言:
d=2753 k=15.
y = -k
兩項(xiàng)相加的話好像才可以滿足擴(kuò)展歐幾里德算法的要求 ax+by = gcd(a, b)
2016年1月25日 09:43 | # | 引用
引用scateu的發(fā)言:
"以 m = kp為例,考慮到這時(shí)k與q必然互質(zhì),則根據(jù)歐拉定理,下面的式子成立:"
這一句疑似應(yīng)為
"考慮到這時(shí)kp與q必然互質(zhì)"
k與q必然互質(zhì),
原因是m小于n,m取整數(shù),所以m必然為kp或是kq
同時(shí)得到m為kp(k小于q),n為kq(k小于p)
取m為kp,由于q是質(zhì)數(shù),k小于q,k與q互質(zhì)
我的理解
2016年2月16日 18:37 | # | 引用
阮老師,你看云文檔有處公式寫錯(cuò)了:使用公鑰加密的公式.
2016年3月12日 11:21 | # | 引用
有個(gè)問(wèn)題:
因?yàn)闆Q定是否能夠破解的關(guān)鍵在分解n=p×q,而您提到目前最大的是破解到768位,是否意味著768位(包括768)位以下RSA加密的都已經(jīng)是不安全的了?
2016年4月13日 14:42 | # | 引用
看懂了原理,數(shù)論知識(shí)也看懂了大概,不過(guò)博主真牛!
2016年4月28日 10:48 | # | 引用
引用Caleb的發(fā)言:
65^17 ≡ 2790 (mod 3233) 這個(gè)式子成立嗎?
2790 mod 3233 = 2790
65^17 mod 3233 = 887 (matlab得到的結(jié)果)
另外 2790^2753 ≡ 65 (mod 3233) 這個(gè)式子中的 2790^2753 這個(gè)值,計(jì)算機(jī)可以算出來(lái)嗎?
謝謝
我用python算 65^17 mod 3233 = 2790 你matlab用錯(cuò)了吧
2790^2753 這個(gè)值計(jì)算機(jī)當(dāng)然算的出來(lái),python算了一下,結(jié)果占了我半個(gè)屏幕。。。
2016年5月13日 15:52 | # | 引用
這個(gè)不對(duì)稱算法絕對(duì)是有漏洞的!根據(jù)已知e17和n模3233可以算得d=1193 雖然我不知道真的d為3233但是可以等效算出加密值!其實(shí)這個(gè)基于的是素?cái)?shù)的耦合!既自然數(shù)的n次冪mod一個(gè)素?cái)?shù)=自然數(shù)本身 而求出那個(gè)幕與素?cái)?shù)的關(guān)系的這個(gè)數(shù)學(xué)推論我感覺(jué)可以寫個(gè)猜想
2016年5月18日 10:34 | # | 引用
好文章,感謝。
2016年6月27日 14:12 | # | 引用
引用colde的發(fā)言:
證明
(m^e - kn)^d ≡ m (mod n)
等同于證明
m^ed ≡ m (mod n)
卡住在這里了,麻煩幫忙解釋一下。
你可以把 (m^e -kn)^d 這個(gè)等式展開(kāi),形式為: C(d,0) * m^ed * (kn)^0 + C(d,1) * m^e(d-1) * (kn)^1 + ...
所以只有一項(xiàng)是不包含kn的,而所有包含n的項(xiàng)在對(duì)n取余的操作中都可以消掉。因此得出了那個(gè)結(jié)論
2016年8月10日 11:29 | # | 引用
在第二種m與n不互質(zhì)的情況下,只有當(dāng)m小于n時(shí),才會(huì)有k與q互質(zhì)。否則若m大于n,則k值可取成q的倍數(shù),這時(shí)卻也依然滿足m與n不互質(zhì)的前提條件。
2016年8月13日 22:52 | # | 引用
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
- 上一篇: 干货整理 Unity3D资源汇总
- 下一篇: 3个著名加密算法(MD5、RSA、DES