本文首發於深刻淺出區塊鏈社區
原文連接:非對稱加密技術 - RSA算法數學原理分析原文已更新,請讀者前往原文閱讀非對稱加密技術,在如今網絡中,有很是普遍應用。加密技術更是數字貨幣的基礎。算法
所謂非對稱,就是指該算法須要一對密鑰,使用其中一個(公鑰)加密,則須要用另外一個(私鑰)才能解密。
可是對於其原理大部分同窗應該都是隻知其一;不知其二,今天就來分析下經典的非對稱加密算法 - RSA算法。
經過本文的分析,能夠更好的理解非對稱加密原理,可讓咱們更好的使用非對稱加密技術。安全
題外話:
本博客一直有打算寫一系列文章通俗的密碼學,昨天給站點上https, 因其中使用了RSA算法,就查了一下,發現如今網上介紹RSA算法的文章都寫的太難理解了,反正也準備寫密碼學,就先寫RSA算法吧,下面開始正文。網絡
RSA算法的基於這樣的數學事實:兩個大質數相乘獲得的大數難以被因式分解。
如:有很大質數p跟q,很容易算出N,使得 N = p * q,
但給出N, 比較難找p q(沒有很好的方式, 只有不停的嘗試)函數
這其實也是單向函數的概念
下面來看看數學演算過程:學習
一、 選取兩個大質數p,q,計算N = p q 及 φ ( N ) = φ (p) φ (q) = (p-1) * (q-1)區塊鏈
三個數學概念:
質數(prime numbe):又稱素數,爲在大於1的天然數中,除了1和它自己之外再也不有其餘因數。
互質關係:若是兩個正整數,除了1之外,沒有其餘公因子,咱們就稱這兩個數是互質關係(coprime)。
φ(N):叫作歐拉函數,是指任意給定正整數N,在小於等於N的正整數之中,有多少個與N構成互質關係。加密若是n是質數,則 φ(n)=n-1。
若是n能夠分解成兩個互質的整數之積, φ(n) = φ(p1p2) = φ(p1)φ(p2)。即積的歐拉函數等於各個因子的歐拉函數之積。
二、選擇一個大於1 小於φ(N)的數e,使得 e 和 φ(N)互質spa
e實際上是1和φ(N)以前的一個質數
三、 計算d,使得de=1 mod φ(N) 等價於方程式 ed-1 = k φ(N) 求一組解。code
d 稱爲e的模反元素,e 和 φ(N)互質就確定存在d。blog
模反元素是指若是兩個正整數a和n互質,那麼必定能夠找到整數b,使得ab被n除的餘數是1,則b稱爲a的模反元素。
可根據歐拉定理證實模反元素存在, 歐拉定理是指若n,a互質,則:
a^φ(n) ≡ 1(mod n) 及 a^φ(n) = a * a^(φ(n) - 1), 可得a的 φ(n)-1 次方,就是a的模反元素。
四、 (N, e)封裝成公鑰,(N, d)封裝成私鑰。
假設m爲明文,加密就是算出密文c:
m^e mod N = c (明文m用公鑰e加密並和隨機數N取餘獲得密文c)
解密則是:
c^d mod N = m (密文c用密鑰解密並和隨機數N取餘獲得明文m) > 私鑰解密這個是能夠證實的,這裏不展開了。
具體仍是來看看步驟,舉個例子,假設Alice和Bob又要相互通訊。
假如攻擊者能截取到公鑰n=3127,e=3及密文c=1394,是仍然沒法不經過d來進行密文解密的。
那麼,有無可能在已知n和e的狀況下,推導出d?
1. ed≡1 (mod φ(n))。只有知道e和φ(n),才能算出d。 2. φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。 3. n=pq。只有將n因數分解,才能算出p和q。
若是n能夠被因數分解,d就能夠算出,所以RSA安全性創建在N的因式分解上。大整數的因數分解,是一件很是困難的事情。
只要密鑰長度足夠長,用RSA加密的信息其實是不能被解破的。
☛ 深刻淺出區塊鏈 - 系統學習區塊鏈,打造最好的區塊鏈技術博客。
☛ 個人知識星球爲各位解答區塊鏈技術問題,歡迎加入討論。
☛ 關注公衆號「深刻淺出區塊鏈技術」第一時間獲取區塊鏈技術信息。