• <samp id="8qo88"><tbody id="8qo88"></tbody></samp><ul id="8qo88"><pre id="8qo88"></pre></ul>
    <kbd id="8qo88"></kbd>
    <samp id="8qo88"><tbody id="8qo88"></tbody></samp>
  • <strike id="8qo88"><s id="8qo88"></s></strike>
    RSA加密算法是地球上最重要的算法
    2022-07-29 11:46:55 來源: 微軟智匯學院

    計算機領域常用的RSA加密算法具有非常高的穩定性,發明至今,世界上仍然沒有可靠的攻擊它的方法。有人說,RSA加密算法是地球上最重要的算法,如果沒有 RSA加密算法,現在的網絡世界將毫無安全可言,更不可能有現在的網上交易。

    今天,微軟智匯學院就將給大家講講RSA加密算法。其理論基礎是一系列嚴格的數學推導過程,但原理并不難懂,甚至主要和我們小學就學過的質數、約數和質因數分解有關。

    RSA加密算法

    RSA加密算法非常有名,在計算機領域的應用非常廣泛,幾乎是一般用戶在信息加密時的首選。

    它是一種非對稱加密演算法,名字來源于它的三個發明人——羅納德·李維斯特(RonRivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)——名字的首字母縮寫。

    這三人在1977年一起提出了RSA算法,當時他們都在麻省理工學院工作。

    雖然已經被發明了四十多年,但是至今世界上仍然沒有可靠的攻擊它的方法。在技術瞬息萬變的今天,這樣的穩定性尤其難能可貴。

    RSA為什么這么保險呢?當然和它的實現原理有關系,我們要了解RSA,就需要掌握它的理論基礎。

    作為加密算法,RSA的原理實際上就是一系列非常嚴格的數學推導過程。一說到數學可能有人又要頭疼了,數學啊,很難吧?

    其實,并不難。

    RSA算法背后的數學概念

    最近筆者給一位小學生檢查數學作業,由此得知他們已經在學習下面這些概念:

    余數:如果有兩個整數a和b,a除以b不能除盡,那么a中不能除盡的部分就是。比如11除以5,商是2,余數是1。

    MOD函數:求余數的函數,mod(11,5)就是對11除以5求余數。

    約數:又稱因數,如果有兩個整數a和b,a除以b能除盡,那么b就是a的約數,比如,2÷1=2,2÷2=1,2的約數就是1和2。

    因數分解:把一個正整數寫成幾個約數的乘積。

    公約數:有幾個整數,它們都有一個相同的約數,那么這個約數就是這幾個整數的公約數,比如2的約數是1和2,4的約數是1、2和4,6的約數是1、2、3、6,2、4和6的公約數就是1和2。

    質數:一個大于1的自然數,除了1和它本身,再沒有別的約數了,那么這個數就是質數。比如2,它大于1,只有1和2兩個約數,它就是質數。

    1)密鑰生成

    這里說的密鑰又分為公鑰和私鑰兩個部分,各對應兩個數字,公鑰為 n 和 e,私鑰為 n 和 d。

    因為公鑰和私鑰的 n 是同一個 n,因此,其實RSA的密鑰總共涉及三個數字:n,e 和 d,它們都是非常非常大的正整數。

    它們是通過以下步驟生成的:

    Step1.1:選擇兩個質數 p 和 q.

    Step1.2:計算出 p 和 q 的積 n:n = p·q。

    Step1.3:計算n的卡邁克爾函數λ(n)。

    卡邁克爾函數,n 的卡邁克爾函數計作 λ(n),定義為:對任意正整數 n,它的卡邁克爾函數λ(n) 是滿足如下條件的最小的正整數:這個正整數 m 使得 am ≡ 1 (mod n),其中 a 是 1 到 m 之間任意一個與 m 互質的整數。

    這里的 ≡ 是同余符號——同余是數論中的一種等價關系,當兩個整數除以同一個正整數,若得相同余數,則二整數同余。

    所以式子 am ≡ 1 (mod n) 表示:a的m次冪除以n之后的余數為1,又可以稱作:am 和1對于模n同余。

    在這里還需要了解另一個函數:

    歐拉函數,n的歐拉函數計作φ(n),定義為:對任意正整數n,它的歐拉函數就是在小于或等于n的正整數里與n互質的數字的個數。

    φ(n) 分不同情況來看:

    a) 如果n=1,那么φ(1)=1

    b) 如果n是質數,那么φ(n)=n-1

    c)如果n是一個質數p的k次方,即n=pk,那么φ(n)=φ(pk)= pk- pk-1

    d)如果n是兩個互質的數p和q的乘積,那么φ(n)=φ(p) ⋅φ(q)

    當 n 為1、2、4、奇質數的次冪、奇質數的次冪的兩倍時,λ(n) 為 φ(n),當 n 為2、4以外的2的次冪時,λ(n) 為 φ(n) 的一半:

    (i) 歐拉函數的情況 c);

    (ii)正整數 n 可寫作它的質因數的積。

    因此對于任意正整數n,它的卡邁克爾函數 λ(n )是 n 的質因數的卡邁克爾函數的最小公倍數,

    其中:p1 < p2 <... < pk 是質數,而 r1, r2,..., rk 是正整數。

    還有,因為 n 為兩個質數 p 和 q 的積,所以 n 的卡邁克爾函數等于 p 和 q 的卡邁克爾函數的最小公倍數,計作 λ(n) = lcm(λ(p), λ(q)) 。

    又因為根據 歐拉函數的情況 c)可得:λ(p) = φ(p) = p – 1且 λ(q) = φ(q) = q − 1。因此,λ(n) = lcm(p − 1, q − 1)。

    也就是說,這一步要計算 p-1 和 q-1 的最小公倍數。

    Step1.4:選擇一個正整數e,滿足:1 < e < λ(n) ,并且 e 和 λ(n) 互質。

    Step1.5:確定 e 的模反元素 d。

    模反元素:如果有兩個互質的正整數a和n,那一定可以找到一個整數b,能讓 ab - 1 能被 n 整除,也就是說ab除以n的余數是1,記作 ab ≡ 1(mod n)。數學家們已經利用歐拉定理也能證明模反元素的存在。

    也就是說 d 滿足:d ≡ e−1 (mod λ(n)) ,即 ed ≡ 1 (mod λ(n))。

    至此,第一階段完成。在這一階段,Step1.2 生成的 n 和 Step1.4 生成的 e 組成了公鑰:(n,e);而 Step1.2 生成的 n 和 Step1.5 生成的 d 組成了私鑰:(n,d)。

    2)密鑰發布

    密鑰生成之后,公鑰被公之于眾,任何人都可以獲取并使用,而私鑰則被保留在特定的,被允許解讀加密信息的人手中。

    3)加密

    加密只需要用到公鑰(n,e),當人們想要用RSA算法加密一段信息時,需要按以下步驟進行:

    Step 3.1:將信息按照約定的方法轉化為一個正整數m,滿足 0 ≤ m < n 。

    此處的將信息轉化為數字的方法也是公開的,如果信息實在太多也可以考慮分段,每段分別轉化為一個大于等于0,小于n的正整數。

    Step 3.2:計算c = mod(me, n),c就是加密后的密文。 加密完成,將生成的密文傳遞給要送達的人。

    4) 解密

    收到密文的人,如果手中有私鑰(n,d),就可以開始解密了,方法如下:

    Step 4.1:計算 m = mod(cd, n),m就是原本的原文。

    RSA加密全過程實例

    下面我們來看一個例子:

    1) 密鑰生成

    1.1:我們選擇 p = 61 和 q = 53.

    1.2:計算n = 61 × 53 =3233.

    1.3:計算λ(n) = λ(3233) = Icm(60, 52) = 780.

    1.4: 選擇 e,需滿足 1 < e <780,且 e 和780互質。

    我們選擇 e = 17.

    1.5:求e的模反元素d,使得 ed ≡ 1 mod λ(n),也就是17d ≡ 1 mod 780.

    求 17d = 780 h + 1 ,其中h為正整數。

    求得d = 413,驗算:413 ×17 = 780 × 9 + 1,d成立。

    我們生成了公鑰 (n = 3233, e =17),和私鑰 (n = 3233, d =413).

    2)密鑰發布

    公布公鑰,將密鑰交給我們要通信的朋友。

    3)加密

    原文為m(正整數),計算:c = mod(me, n).

    假設m = 65, 則c = mod(6517, 3233) = 2790.

    原文 65,通過公鑰加密得到密文 2790。將其交給有私鑰的人。

    4) 解密

    計算m = mod (cd, n) 得到原文。

    密文為2790,則m = mod(2790413, 3233) = 65

    密文為2790,通過私鑰解密得到原文65。

    以上就是RSA的整個運作過程。

    RSA算法原理推導

    為什么這個加密解密過程能夠有效?為什么當 c = mod (me,n) 時,就一定有m = mod(cd, n)呢?

    首先, 根據 Step 3.2 可知:me ≡ c (mod n),根據同余關系保持基本運算的性質,有 cd ≡ (me)d = med (mod n),也就是 cd ≡ med (mod n)

    其次,因為 ed ≡ 1 (mod λ(n)),即 ed - 1 ≡ 0 (mod λ(n)),也就是說ed - 1 可以被λ(n) 整除。

    又因為 λ(n) = lcm(p − 1, q − 1) ,也就是 λ(n) 可以被 p -1 和 q-1 整除,因此有 ed - 1 = h(p -1) = k(q-1), h和k都是非負整數。

    于是有:med = m⋅m (ed-1)= m (m (p-1) ) h

    根據Step1.3 中 φ(p) = p – 1,med = m (m (p-1) ) h = m (mφ (p) ) h

    因為 p 是質數,所以如果 m 要么是 p 的倍數,要么與 p 互質——

    i)若 m 是 p 的倍數,則 med 也是 p 的倍數, med ≡ 0 ≡ m (mod p) ;

    ii)若 m 與 p 互質,根據歐拉定理則有 mφ(p) ≡ 1 (mod p)

    歐拉定理:兩個互質的正整數 a 和 b, aφ(b) ≡1 (mod b)。

    于是,有 med = m · mφ (p) ≡ m (mod p),即 med ≡ m (mod p)

    綜合i)和ii)有:med ≡ m (mod p) .

    同理,可證明 med ≡ m (mod q).

    根據中國剩余定理,med ≡ m (mod p) 和 med ≡ m (mod q) 同時成立,等同于 med ≡ m (mod pq) 成立,又因為 pq = n,因此,我們得以證明:med ≡ m (mod n)

    然后,根據同余的傳遞性,有 cd ≡ med ≡ m (mod n)。且已知 m < n,所以mod(cd , n)= m,這也就是為什么 Step 4.1 能夠求出m的原因。

    為什么RSA難于破解?

    這件事我們不妨反過來想,如果我們要破解RSA加密文件,我們需要什么?

    我們需要私鑰,私鑰包括兩個部分:n 和 d,n 就是公鑰中的 n,所以我們唯一需要知道的就是 d。

    那么我們能不能自己把 d 求出來呢?理論上是可行的。

    因為 ed ≡ 1 mod λ(n),e 是已知的,且 λ(n) = lcm(p − 1, q − 1),因此,我們只需要知道 p - 1 和 q - 1 就好了。

    n = p·q,那么我們只要對 n 進行質因數分解,找到它的最大質因數就可以了。

    可是,實際操作起來,卻不那么容易。

    如果 p 和 q 很大,n 就會更大。而大整數的因數分解,是一件非常困難的事情。目前,除了暴力破解,還沒有發現別的有效方法。

    只有短的 RSA 鑰匙才可能被暴力方式破解。迄今為止,世界上還沒有任何可靠的攻擊RSA算法的方式。

    只要其鑰匙的長度足夠長,用 RSA 加密的信息,就可以認為在事實上是不能被破解的。

    沒想到吧,小學數學課上就學過的質數、余數、質因數分解竟然這么有用,居然就在生活中時時處處保護著我們的信息安全。

    責任編輯:zN_2949
      久久精品亚洲福利| 亚洲免费二区三区| 亚洲人成网站在线播放2019| 亚洲综合精品一二三区在线| 亚洲AV无码专区国产乱码电影| 亚洲中文字幕无码永久在线| 精品亚洲视频在线观看| 久久亚洲国产成人影院网站| 亚洲乱码日产精品a级毛片久久| 亚洲欧洲国产成人综合在线观看| 亚洲精品无码av天堂| 亚洲熟伦熟女新五十路熟妇 | 无码专区一va亚洲v专区在线| 亚洲av色香蕉一区二区三区| 性色av极品无码专区亚洲 | 亚洲色大成网站www| 亚洲精品无码久久久久A片苍井空 亚洲精品无码久久久久YW | 亚洲AV无码AV日韩AV网站| 国产精品国产亚洲区艳妇糸列短篇 | 国产亚洲精AA在线观看SEE| 亚洲乱码日产一区三区| 亚洲va无码手机在线电影| 亚洲天堂在线播放| 亚洲欧洲日本精品| 美女视频黄免费亚洲| 亚洲av最新在线观看网址| 天堂亚洲免费视频| 国内精品久久久久久久亚洲| 国产亚洲精品无码拍拍拍色欲| 国产亚洲精品自在久久| 久久99亚洲网美利坚合众国| 亚洲国产精品综合一区在线| 国产亚洲精品影视在线| 国产成人亚洲精品电影| 亚洲精品国产高清嫩草影院| 亚洲国产另类久久久精品黑人| 亚洲综合一区二区国产精品| 亚洲Av无码一区二区二三区| 亚洲av无码专区亚洲av不卡| 亚洲国产精品日韩专区AV| 国产亚洲一区二区三区在线|