iOS逆向 -- RSA加密探究

密碼學說起:

歷史:兩千年前 凱撒大帝發明

base64的雛形 

容易破解 【信息論】

間諜很危險

一直到1976年 迪菲、赫爾曼提出了一個構想 不通過密鑰交換  1977 rsa誕生

RSA加密探究

對稱加密的弊端 還有RSA的歷史不在這裏贅述,有興趣的同學課自行查閱資料

在開始之前需要一定的數學知識,在這裏跟大家一起復習一下:

取模運算

3%17= 3   、 3^2 %17= 9 、3^3 %17= 10 、3^4 %17= 13 、3^5 %17= 5  。。。

3^n % 17 = 12 請問n = ?,同學們可能發現了 取模的時候我們正向很容易算出答案,但是反向不好運算且有可能有多個解。

在這裏 我們管3 叫做 17的原根。

互質關係 (如果兩個正整數,除了1之外沒有其他公因數,我們就稱這兩個數爲互質關係)

例如 :1跟8、 3跟8 、5跟8、7跟8

有個小問題, 小於8的並且跟8爲互質關係的正整數有幾個,答案當然就是4

計算該值的方式就叫做歐拉函數(給定任意正整數n,在小於n的正整數之中有多少個與n爲互質關係)用φ(n)表示

φ(8) = 4;

那麼再來回憶一下質數的概念 - (在大於1的自然數中,除了1和它本身以外不再有其他因數。

所以我們就能得出結論:如果當n是質數  φ(n)=n-1 例如5: 與5互質的 1 、2、 3、4

上面就是歐拉函數的第一個特點 

另外歐拉函數還有個特點就是φ(A*B)=φ(A)* φ(B)  例如  φ(56) =  φ(8) *  φ(7) = 4 * 6 = 24

通過上面兩個特點 我就還能得出:

如果N是兩個質數P1 和 P2的乘積則

φ(N)=φ(P1)* φ(P2)=(P1-1)*(P2-1) 例如  φ(15) =  φ(3) *  φ(5) = 2 * 4 = 8

以上還算是比較簡單

接下來有了歐拉函數,我們再來看歐拉定理 (如果兩個正整數m和n互質,那麼m的φ(n)次方減去1,可以被n整除。 -- 這是定理,大家不用想着去論證,只要知道這是真的就可以,當然不信的話可以找幾個數據測試一下

也就是  (m^φ(n) - 1) % n ≡ 0    => 

m^φ(n) % n ≡ 1

因爲m 與n 互爲質數 所以m的k次方與n也互爲指數 於是

m^kφ(n) % n ≡ 1 =>

 m^kφ(n)+1 % n ≡ m

上面的等式先留着 一會兒要用

下面講一下模反元素的概念

如果兩個正整數e和x互質,那麼一定可以找到整數d,使得 ed-1 被x整除。

那麼d就是e對於x的“模反元素”  舉個例子5 和 3互質 (5*2 - 1) % 3 ≡ 0 那麼2 就是5相對3的模反元素,當然不止一個,可以有很多個

公式表達爲

e*d  mod  x ≡  1也就相當於  

e*d  ≡  k*x + 1 這時候我們再把上面的歐拉定理推導公式拿出來

 m^(kφ(n)+1) % n ≡ m

當 x = φ(n)的時候 也就是 m^e*d % n ≡ m

稍微理一下:

m < n , x = φ(n),e 與 x互質 d是e對於x的模反元素 的時候 等式成立

到這裏非對稱加密已經有了雛形,m經過一系列運算後還能得到m, 但是如何拆分這個公式呢

迪菲赫爾曼密鑰交換

來到最初的取模運算

3 ^13mod17  = 6

6^ 15 mod17 = 10 = 3 ^ 13 ^15 mod 17

接下來做一下等式對應 m = 3  n = 17 e  = 13  d = 15中間值 c = 6

於是 m^e mod n = c

c ^ d mod n = 10 = m^e^d mod n

也就是c ^d mod n = m^e^d mod n

再結合我們的推導公式m^e*d % n ≡ m

於是乎  m^e mod n = c    加密

c ^d mod n = m 解密

公鑰 n 和 e 

私鑰 n 和 d 

銘文m, 密文 c

 

說明:

1、n會非常大,長度一般爲1024個二進制位。(目前人類已經分解的最大整數,232個十進制位,768個二進制位)

2、由於需要求出φ(n),所以根據歐函數特點,最簡單的方式n 由兩個質數相乘得到: 質數:p1、p2

Φ(n) = (p1 -1) * (p2 - 1)

3、最終由φ(n)得到e 和 d 。

總共生成6個數字:p1、p2、n、φ(n)、e、d

關於RSA的安全:

除了公鑰用到了n和e 其餘的4個數字是不公開的。

目前破解RSA得到d的方式如下:

1、要想求出私鑰 d  。由於e*d = φ(n)*k + 1。要知道e和φ(n);

2、e是知道的,但是要得到 φ(n),必須知道p1 和 p2。

3、由於 n=p1*p2。只有將n因數分解才能算出。

 

大概原理就是這樣,mac上有自帶的OpenSSL 同學們可以根據指令自己耍一下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章