国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

RSA加密算法中的數(shù)學(xué)

?xiaoxiao, / 1315人閱讀

摘要:背景不對(duì)稱加密算法可是算是世界上最重要的加密算法,其中包括我們熟悉的的加密。現(xiàn)在我們分步來看,這個(gè)全球最重要的加密算法,都需要哪些數(shù)學(xué)知識(shí)。我們常說的算法中的多少位,就是用二進(jìn)制表示后的位數(shù),在我們例子就是位。其中表示兩個(gè)數(shù)的最大公約數(shù)。

背景

RSA不對(duì)稱加密算法可是算是世界上最重要的加密算法,其中包括我們熟悉的https的加密。為了完全弄明白他的實(shí)現(xiàn)原理,我們需要對(duì)數(shù)論這門學(xué)科,有一定的了解。現(xiàn)在我們分步來看,這個(gè)全球最重要的加密算法,都需要哪些數(shù)學(xué)知識(shí)。

第一步:獲取兩個(gè)不相等的質(zhì)數(shù),p=61和q=53

數(shù)學(xué)知識(shí):質(zhì)數(shù)

質(zhì)數(shù)又稱素?cái)?shù),在自然數(shù)中,除了1和自身外,不能被其他自然數(shù)整除。比如10以內(nèi)的質(zhì)數(shù)有:1,2,3,5,7。那么在程序中,我們?nèi)绾闻袛嘁粋€(gè)數(shù)是不是質(zhì)數(shù)呢?
方案一:

function isPrimeNum() {
    let n = 7
    for (let i = 2; i < n; i++) {
        if (n % i === 0) {
            return false
        }
    }
    return true
}

這種方案是最直觀的,也是效率最低的,因?yàn)橐袛鄋是不是質(zhì)數(shù),我們需要運(yùn)算n-2次
方案二:

...
    for (let i = 2; i < n / 2; i++)
...

我們把for循環(huán)中的n改成n/2,這樣運(yùn)算量上能減少一半(因?yàn)? frac n2 $后一半的數(shù)都可以通過$ frac n2 $前一半的數(shù)$ imes 2$得到,所以沒必要參加運(yùn)算)
方案三:

...
    for (let i = 2; i < Math.sqrt(n); i++)
...

我們把$ frac n2 $改成 $ sqrt n $之后,我們的運(yùn)算量就不是減少一半了,而是減少一個(gè)數(shù)量級(jí),數(shù)字越大,效果越明顯。我們以1萬為例,使用此方案只需要計(jì)算98次即可。

ts實(shí)現(xiàn)-有詳細(xì)注釋:是否為質(zhì)數(shù)
第二步:把p和q相乘,得到n。其中n=61*53=3233,用二進(jìn)制表示為:110010100001。

我們常說的RSA算法中的多少位,就是n用二進(jìn)制表示后的位數(shù),在我們例子就是12位。目前商用中一般都是2048位,比如我們的segmentfault

第三步:計(jì)算出小于n的自然數(shù)中,有多少數(shù)與n互質(zhì)

數(shù)學(xué)知識(shí)1:互質(zhì)

如果兩個(gè)數(shù)的最大公約數(shù)為1,那么我們說這兩個(gè)數(shù)互質(zhì),記:GCD(a,b)=1。其中GCD表示兩個(gè)數(shù)的最大公約數(shù)。
我們來看幾組互質(zhì)的例子:13、14 | 7、9 | 4、7 | 6、35 | ...
我們可以得到如下結(jié)論:如果兩個(gè)數(shù)是質(zhì)數(shù),那么這兩個(gè)數(shù)肯定互質(zhì);兩個(gè)數(shù)如果互質(zhì),那么這兩個(gè)數(shù)不一定是質(zhì)數(shù)。比如:6和35都不是質(zhì)數(shù),但是他們互質(zhì)。

ts實(shí)現(xiàn)-有詳細(xì)注釋:取互質(zhì)元素

數(shù)學(xué)知識(shí)2:歐拉函數(shù)

我們要計(jì)算10以內(nèi)有多少與10互質(zhì)呢,我們可以得到:1、3、7、9這4個(gè)數(shù)。如果是一個(gè)大數(shù),我們用腦子想可能就想不出來了,所以我們需要使用歐拉函數(shù)來算出來,記作φ(n)。
歐拉函數(shù)分為幾種情況:

情況1:如果n=1,那么與n互質(zhì)的自然數(shù)只有1

$$ φ(n)=1 $$

情況2:如果n是質(zhì)數(shù),那么與n互質(zhì)的自然數(shù)有n-1個(gè),

$$ φ(n)=n-1 $$
$$ 例:φ(7)=6 $$

情況3:如果n可以因式分解為兩個(gè)互質(zhì)數(shù)的乘積,則

$$ φ(n)=φ(p) imes φ(q)=(p-1) imes (q-1)$$
$$ 例:φ(56)=φ(7)*φ(8) = 6 * 7 = 42 $$

情況4:如果n可以寫成某個(gè)數(shù)的質(zhì)數(shù)次冪(其中k為質(zhì)數(shù)),則

$$ φ(n)=φ(p^k)=p^k-p^{k-1}=p^k(1-frac 1p) $$
$$ 例:φ(49)=φ(7^2)=7^2 - 7^1 = 42 $$

情況5:根據(jù)以上規(guī)律,總結(jié)出一個(gè)通用的公式:

$ qquad n=p_1^{k^1} imes p_2^{k^2} ldots p_r^{k^r} quad 注:任意一個(gè)整數(shù),都可以寫成兩個(gè)質(zhì)數(shù)的乘積$
$ qquad Downarrow $
$ qquad φ(n)=φ(p_1^{k^1}) imes φ(p_2^{k^2})ldots φ(p_r^{k^r})$
$ qquad Downarrow $
$ qquad φ(n)= p_1^{k^1}(1- frac 1p_1) imes p_2^{k^2}(1- frac 1p_2) ldots p_r^{k^r}(1- frac 1p_r)$
$ qquad Downarrow $
$ qquad φ(n)=p_1^{k^1} imes p_2^{k^2}ldots p_r^{k^r} imes (1- frac 1p_1) imes(1- frac 1p_2)ldots(1- frac 1p_n) $
$ qquad Downarrow $
$ qquad φ(n)=n imes(1- frac 1p_1) imes(1- frac 1p_2)ldots(1- frac 1p_n) $

總結(jié):通過歐拉函數(shù)最后的通式,我們發(fā)現(xiàn)最后的結(jié)果只和n和p有關(guān),和p的冪無關(guān),這點(diǎn)很重要,在我們用程序?qū)崿F(xiàn)時(shí),能夠大大的簡化我們的邏輯代碼。

回到算法中,我們需要計(jì)算與n互質(zhì)的個(gè)數(shù),也就是求φ(n),根據(jù)歐拉函數(shù),計(jì)算過程如下:
$$ φ(n)=φ(3233)=φ(61) imes φ(53)=60 imes52=3120 $$

ts實(shí)現(xiàn)-有詳細(xì)注釋:歐拉函數(shù)
第四步:在1和φ(n)之間,選取一個(gè)隨機(jī)質(zhì)數(shù)e,即在1~3120中選取e=17 第五步:求e和φ(n)的模反元素d

數(shù)學(xué)知識(shí)1:使用輾轉(zhuǎn)相除法求最大公約數(shù)

我們先看兩個(gè)例子,
例1:求47和30的最大公約數(shù):
$ 47 = 30 imes 1 + 17 $
$ 30 = 17 imes 1 + 13 $
$ 17 = 13 imes 1 + 4 $
$ 13 = 4 imes 3 + 1 $
$ 4 = 1 imes 4 + 0 $

我們得到:GCD(47, 30) = 1

例2:求50和35的最大公約數(shù):
$ 50 = 35 imes 1 + 15 $
$ 35 = 15 imes 2 + 5 $
$ 15 = 5 imes 3 + 0 $

我們得到:GCD(50, 35) = 5

聰明的你看完這兩個(gè)例子可以知道如何計(jì)算了吧。通俗的講,如果最后的多項(xiàng)式可以寫成:a = bx + c。 當(dāng)c=0時(shí),b就是兩數(shù)的最大公約數(shù)。

ts實(shí)現(xiàn)-有詳細(xì)注釋:求最大公約數(shù)

數(shù)學(xué)知識(shí)2:模反元素

定義:如果兩個(gè)正整數(shù)a和n互質(zhì),那么一定可以找到整數(shù)b,使得a*b與n相除,余數(shù)為1,記作:$ (a imes b) \% n = 1 Rightarrow frac {(a imes b) - 1} n = 1 $

例:求3和11的模反元素
$$ frac {(3 imes b) - 1} {11} = 1 $$

心算我們可以算出來其中一個(gè)值: $ b=4 $

數(shù)學(xué)知識(shí)3:裴蜀定理

通過上面的運(yùn)算,我們可以算出一些簡單數(shù)的模反元素,對(duì)于較大的數(shù)來說,我們需要引入新的計(jì)算工具:裴蜀定理,通過它,我們可以通過一個(gè)二元一次方程來得出模反元素

定義:如果a與b互質(zhì),即GCD(a, b) = 1,二元一次方程$ ax + by = 1 $有一對(duì)正整數(shù)解,其中x即為a、b的模反元素。同理,上面的例子我們可以化簡成這樣:3x + 11y = 1

疑惑:對(duì)于二元一次方程,好像不可解(也可以說有無窮多個(gè)解),我們之前都是解方程組。即然定理已經(jīng)解決,兩個(gè)互素(質(zhì))數(shù)組成的二元一次方程有一對(duì)整數(shù)解,那肯定是能解,解法我們需要引入另一個(gè)數(shù)學(xué)工具:擴(kuò)展歐幾里得算法

數(shù)學(xué)知識(shí)4:擴(kuò)展歐幾里得算法

這個(gè)算法其實(shí)就是上面我們求最大公約數(shù)時(shí),用到的輾轉(zhuǎn)相除法+它的逆運(yùn)算,我們看個(gè)例子就明白是什么意思了

例1:求$ 47x + 30y = 1 $的解
解:使用輾轉(zhuǎn)相除法,我們可以得到:
$ 47 = 30 imes 1 + 17 $
$ 30 = 17 imes 1 + 13 $
$ 17 = 13 imes 1 + 4 $
$ 13 = 4 imes 3 + 1 $
對(duì)最后一行,我們移項(xiàng)處理:
$ 1 = 13 - 4 imes 3 $
$ 4 = 17 - 13 imes 1 $
$ 13 = 30 - 17 imes 1 $
$ 17 = 47 - 30 imes 1 $
我們把第二行代入第一行中:
$ 1 = 13 - overbrace{(17 - 13 imes 1)}^4 imes 3 $
$ Downarrow $
$ 1 = 4 imes 13 - 3 imes 17 $
$ Downarrow $
$ 1 = 4 imes overbrace{(30 - 17)}^{13} - 3 imes s17 $
$ Downarrow $
$ ldots $
$ 1 = (-7) imes 47 + 11 imes 30 $

$ 解得:x=-7(即為我們要求的模反元素d) quad y = 11 $

回到算法中,我們根據(jù)e=17和φ(n)=3120,得到一個(gè)二元一次方程:$ 17x + 3120y = 1 $,再根據(jù)擴(kuò)展歐幾里得算法,我們可以得到方程的解:$x = 2753 quad 即:d = 2753$

ts實(shí)現(xiàn)-有詳細(xì)注釋:擴(kuò)展歐幾里德算法求方程的解
第六步:我們把n和e封裝成公鑰,n和d封裝成私鑰

公鑰:$ (3233, 17) $

私鑰:$ (3233, 2753) $

到此,我們的公私鑰分配成功!

總結(jié):RSA加密算法,雖說是一個(gè)程序問題,但終歸還是一個(gè)數(shù)學(xué)問題!

查看所有函數(shù)的運(yùn)行效果,點(diǎn)我點(diǎn)我!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/90170.html

相關(guān)文章

  • 非對(duì)稱加密技術(shù)- RSA算法數(shù)學(xué)原理分析

    摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接非對(duì)稱加密技術(shù)算法數(shù)學(xué)原理分析原文已更新,請(qǐng)讀者前往原文閱讀非對(duì)稱加密技術(shù),在現(xiàn)在網(wǎng)絡(luò)中,有非常廣泛應(yīng)用。加密技術(shù)更是數(shù)字貨幣的基礎(chǔ)。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:非對(duì)稱加密技術(shù) - RSA算法數(shù)學(xué)原理分析原文已更新,請(qǐng)讀者前往原文閱讀非對(duì)稱加密技術(shù),在現(xiàn)在網(wǎng)絡(luò)中,有非常廣泛應(yīng)用。加密技術(shù)更是數(shù)字貨幣的基礎(chǔ)。 所謂非對(duì)稱,就是指該算法需要一...

    maxmin 評(píng)論0 收藏0
  • 區(qū)塊鏈之非對(duì)稱加密算法

    摘要:二如何理解公鑰和私鑰非對(duì)稱加密算法需要兩個(gè)密鑰公開密鑰和私有密鑰。因?yàn)榧用芎徒饷苁褂玫氖莾蓚€(gè)不同的密鑰,所以這種算法叫作非對(duì)稱加密算法。三非對(duì)稱加密解密原理非對(duì)稱加密算法中,常用的就是算法了,以下就以算法為例來講解非對(duì)稱加密算法的實(shí)現(xiàn)原理。 非對(duì)稱加密,在現(xiàn)在網(wǎng)絡(luò)應(yīng)用中,有這非常廣泛的場(chǎng)景,更是加密貨幣的基礎(chǔ)。本文主要介紹非對(duì)稱加密、解密的原理和過程,以及在區(qū)塊鏈中的使用。 一、非對(duì)稱...

    mcterry 評(píng)論0 收藏0
  • 漫談 | “黎曼猜想”和區(qū)塊鏈加密算法到底有什么關(guān)系?

    摘要:假如黎曼猜想被證實(shí),區(qū)塊鏈將毀滅近日,黎曼猜想四個(gè)字瘋狂刷屏。黎曼猜想由數(shù)學(xué)家波恩哈德黎曼于年提出。因此,黎曼猜想一旦被證明,則意味著素?cái)?shù)之密被解開,算法也就將被攻破了。而大多數(shù)區(qū)塊鏈所用的加密算法不是,而是橢圓曲線加密算法。 瑪麗女王的密碼之生死命懸一線 showImg(https://segmentfault.com/img/bVbhD7s?w=740&h=876); 16世紀(jì)伊麗...

    tracymac7 評(píng)論0 收藏0
  • 沒那么淺地談?wù)凥TTP與HTTPS【三】

    摘要:公開密鑰加密的出現(xiàn)大大減輕了交換對(duì)稱密鑰的困難,公鑰可以公開透過不安全可被竊聽的渠道發(fā)送,用以加密明文。當(dāng)與配合使用,稱之為,與配合則稱為,以此類推。這步?jīng)]有簽名,服務(wù)端收到數(shù)據(jù)后不會(huì)發(fā)現(xiàn)被篡改。對(duì)于認(rèn)證機(jī)構(gòu),一旦私鑰外泄,將可能導(dǎo)致整未濟(jì),亨。小狐汔濟(jì),濡其尾,無攸利。——《易》六、密鑰管理當(dāng)不再擔(dān)心身份會(huì)被冒充、篡改之后,我們?cè)賮碓敿?xì)談?wù)劸W(wǎng)絡(luò)通信中對(duì)于加密算法的密鑰管理。在密鑰被簽發(fā)后,...

    Tecode 評(píng)論0 收藏0
  • 非對(duì)稱加密算法-RSA

    摘要:非對(duì)稱加密,加密與解密使用的密鑰不是同一密鑰,對(duì)中一個(gè)對(duì)外公開,稱為公鑰,另一個(gè)只有所有者知道,稱為私鑰。對(duì)稱加密算法不能實(shí)現(xiàn)簽名,因此簽名只能非對(duì)稱算法。正因?yàn)椋@種加密是單向的,所以被稱為非對(duì)稱加密算法。 非對(duì)稱加密,加密與解密使用的密鑰不是同一密鑰,對(duì)中一個(gè)對(duì)外公開,稱為公鑰,另一個(gè)只有所有者知道,稱為私鑰。用公鑰加密的信息只有私鑰才能解開,反之,用私鑰加密的信息只有公鑰才能解開...

    gggggggbong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<