RSA 數學原理

提起RSA你們必定不陌生,在開發中常常使用,也常常聽同事說道。算法

前奏

對稱加密

話說好久之前,人們就懂的了加密這個技術。在戰爭時期,間諜就會拿着 密文密匙 來對信息就行傳遞。 這種簡單的 密文 + 密匙(key) 就是 對稱加密安全

加密: 明文 + 密匙bash

解密: 密文 + 密匙函數

非對稱加密

因爲這種加密方式過於簡單,因此後來引入了數學算法。 RSA 就是由特殊的數學算法構成的,也是非對稱加密算法。非對稱加密須要兩個密鑰:公鑰(public key) + 私鑰(private key)加密

用公鑰加密,私鑰解密spa

私鑰加密,公鑰解密code

相關數學原理

歐拉定理

若是兩個正整數m和n互質,那麼m的φ(n)次方減去1,能夠被n整除。 cdn

一下是幾種狀況

  • 定理0 算術函數f若是知足對於任意兩個互質的正整數m和n,均有f(mn)=f(m)f(n),就稱f爲積性函數(或乘性函數)。 若是對於任意兩個正整數m和n,均有f(mn)=f(m)f(n),就稱爲徹底積性函數。blog

  • 定理1 對於素數p,ϕ(p)=p−1。開發

  • 定理2 ϕ(pn)=pn−pn−1,由於素數冪pn不互質的只有p的倍數,一共有pn/p=pn−1個。

  • 定理3 若m、n互質,ϕ(mn)=ϕ(m)ϕ(n),因此歐拉函數是積性函數。 由於mn互質NN,和m互質的數乘上和n互質的數就會和mn互質。

  • 定理4 設n=p1a1p2a2...pkak爲正整數n的素數冪分解,那麼ϕ(n)=n(1−1/p1)(1−1/p2)...(1−1/pk)。 由定理2,ϕ(pn)=pn−pn−1=pn (1-1/p),又由定理3,ϕ(n)=p1a1p2a2...pkak(1−1/p1)(1−1/p2)...(1−1/pk)=n(1−1/p1)(1−1/p2)...(1−1/pk)

例如: 
ϕ(8) = ϕ(2^3) = 2^3 - 2^(2-1) = 8 - 4 = 4
ϕ(15) = ϕ(3) * ϕ(5) = 2 * 4 = 8
複製代碼

費馬小定律

歐拉定理的特殊狀況:若是兩個正整數m和n互質,並且n爲質數!那麼φ(n)結果就是n-1。

模反元素

若是兩個正整數e和x互質,那麼必定能夠找到整數d,使得 ed-1 被x整除。 那麼d就是e對於x的「模反元素」

迪菲赫爾曼密匙交換原理

那麼,經過一系列的數學轉換,最終得出了RSA算法

公鑰:e 和 n
私鑰:d 和 n
明文:m
密文:c
複製代碼

說明:

  • n會很是大,長度通常爲1024個二進制位。(目前人類已經分解的最大整數,232個十進制位,768個二進制位)
  • 因爲須要求出φ(n),因此根據歐函數特色,最簡單的方式n 由兩個質數相乘獲得: 質數:p一、p2 Φ(n) = (p1 -1) * (p2 - 1)
  • 最終由φ(n)獲得e 和 d 。

總共生成6個數字:p一、p二、n、φ(n)、e、d

關於RSA的安全:

除了公鑰用到了n和e 其他的4個數字是不公開的。 目前破解RSA獲得d的方式以下:

  • 要想求出私鑰 d 。因爲e*d = φ(n)*k + 1。要知道e和φ(n);
  • e是知道的,可是要獲得 φ(n),必須知道p1 和 p2。
  • 因爲 n=p1*p2。只有將n因數分解才能算出。

那麼RSA有優勢和弊端是什麼了?

優勢

  • 相對安全

缺點

  • 速度慢,耗時(由於,起內部原理是一系列的數學計算)
  • 加密數據量小
相關文章
相關標籤/搜索