iOS逆向 06:RSA加密(上)

iOS 底層原理 + 逆向 文章匯總

本文主要介紹RSA的數學原理、以及RSA的代碼演示

引子

密碼學

是指研究信息加密、破解密碼的技術科學。最早可以追溯到追溯到2000年前。而當今的密碼學是以數學為基礎的。

密碼學發展史

  • 在1976年以前,所有的加密方法都是同一種模式:加密、解密使用同一種算法。在交互數據的時候,彼此通信的雙方就必須將規則告訴對方,否則沒法解密。那么加密和解密的規則(簡稱密鑰),它保護就顯得尤其重要。傳遞密鑰就成為了最大的隱患。這種加密方式被成為對稱加密算法(symmetric encryption algorithm)

  • 1976年,兩位美國計算機學家 迪菲(W.Diffie)、赫爾曼( M.Hellman ) 提出了一種嶄新構思,可以在不直接傳遞密鑰的情況下,完成密鑰交換。這被稱為“迪菲赫爾曼密鑰交換”算法。開創了密碼學研究的新方向

RSA數學原理

上世紀70年代產生的一種加密算法。其加密方式比較特殊,需要兩個密鑰:公開密鑰簡稱公鑰(publickey)和私有密鑰簡稱私鑰(privatekey)。公鑰加密,私鑰解密;私鑰加密,公鑰解密。這個加密算法被稱為的RSA

離散對數問題

現在想實現這一種 加密容易,但是破解很難的加密算法,利用數學運算,如mod取模,有如下方案:

  • 質數做模數,例如17

  • 找一個比17小的數作為n次方的基數,例如3

  • 找出基數的n次方 mod 質數 = 固定的數,求n

3^? mod 17 = 12,此時的`?`是多少呢?(mod -> 求余數,在西方被稱為時鐘算數)

從下方的規律中可以看出,3的1次方~16次方 mod 17 得到的結果都是不同的,且結果分布在 [1,17)上。此時將 3 稱為 17 的原根

原根

所以根據圖中所示,? 可能是13,可能是29等。即從這里可以看出:通過 12 去反推3的?次方是很難的。如果質數加大,反推的難度也會加大。

質數:公約數只有1和自己,其中2是一個特殊質數

歐拉函數φ(讀 fai)

定義

任意給定正整數n,請問在小于等于n的正整數之中,有多少個與n構成互質關系?計算這個值的方式就叫做歐拉函數,使用Φ(n)表示

互質關系

如果兩個正數,除了1以外,沒有其他公因數,就稱這兩個數是互質關系(comprime)

歐拉函數特點

  • 1、當n是質數時,Φ(n) = n - 1

  • 2、如果n可以分解成兩個互質的整數之積,例如 n = A * B,則Φ(A * B) = Φ(A) * Φ(B)

所以,根據歐拉函數的以上兩個特點,可以得到如下結論:

  • 如果N是兩個互質數P1和P2乘積,則Φ(N) = Φ(P1 * P2) = Φ(P1) * Φ(P2) = (P1-1) * (P2-1)

練習

  • 計算8的歐拉函數:和8互質的有4個,即Φ(8) = 4( 1,2,3,4,5,6,7,8 - 1-8中有4個數和8互質)

  • 計算7的歐拉函數:和7互質的有6個,即Φ(7) = 6(12345,6,7 - 1-7中有6個數和7互質)

  • 計算56的歐拉函數:Φ(56) = Φ(7 * 8) = Φ(7) * Φ(8) = 6 * 4 = 24

歐拉定理

歐拉定理

如果兩個正整數 m 和 n 互質,那么 m 的Φ(n)次方減去1,可以被n整除。即 (m^Φ(n) - 1) / n ≡ 0 ==> m^Φ(n) mod n ≡ 1

費馬小定理(歐拉定理的特殊情況)

如果兩個正整數 m 和 n 互質,而且 n 為質數,那么 Φ(n) 結果就是 n-1,即 m^(n-1) mod n = 1

  • 例如 m=6,n=5,那么 6^(5-1) mod 5 = 1

公式轉換

前提:m和n互為質數,且n為質數,有公式m^Φ(n) mod n ≡ 1

  • 由于1^k ≡ 1 ==> m^k*Φ(n) mod n ≡ 1
    • 推導:將x = m^Φ(n) mod n 看作一個整體 ==> x^k = m^(Φ(n)*k) mod n(是一個定理) 成立

    • 例如:m=6,n=7,則6^(7-1) mod 7 = 1 ==> 6^(6*2) mod 7 = 1

  • 由于1*m ≡ m ==> m^(k*Φ(n)+1) mod n ≡ m(成立條件:m 要比 n小
    • 例如:m=6,n=7,則6^(6*3+1) mod 7 = m

模反元素

如果兩個正整數 e 和 x 互質,那么一定就可以找到整數d,使得 ed - 1 被x整除(即 (ed - 1)/x = 1),那么 d 就是 e 對于 x模反元素

  • e * d mod x = 1
    • 理解: e * d - 1 = x * k ==> e * d ≡ k*x + 1
  • e * d ≡ k*x + 1 ===> m^(e*d) mod n = m(條件:d 是相對于 Φ(n) 的模反元素)
    • kx + 1 = kΦ(n)+1 ==> m^(e*d) mod n = m

    • 例如:

- m :4
- n :15
- Φ(n):8
- e:(和Φ(n)互質)3
- d:3d-1=8k ==> d=(8k+1)/3 ==> d=11 19
- 4**(3*11)%5 = 4
- 4**(3*19)%5 = 4

迪菲赫爾曼密鑰交換

如下圖所示,是一個典型的迪菲赫爾曼密鑰交換過程


迪菲赫爾曼密鑰交換過程
  • 1、服務端先取一個隨機數15,通過 3^15 mod 17 = 6,將6傳給客戶端(第三方可以竊取這個6)

  • 2、客戶端通用的取一個隨機數13,通過3^13 mod 17 = 12,將12傳給服務器(第三方同樣可以竊取這個12)

  • 3、客戶端拿到服務器傳過來的6,通過6^13 mod 17 = 10,得到10

  • 4、服務端拿到客戶端傳過來的12,通過12^15 mod 17 = 10,得到10

  • 所以綜上所述,服務端和客戶端想交換的數字是 10

以下是迪菲赫爾曼密鑰交換的原理,最終經過兩次計算,客戶端和服務端都會得到一個相同的數字,用于數據的傳輸

迪菲赫爾曼密鑰交換原理

  • 客戶端:3 ^ 15 mod 17 = 6 + 6^13 mod 17 = 10 ==> 3 ^ (15 * 13) mod 17 = 10

  • 服務端:3 ^ 13 mod 17 = 12 + 12^15 mod 17 = 10 ==> 3 ^ (13 * 15) mod 17 = 10

RSA的誕生

由上面的迪菲赫爾曼密鑰交換原理可知,由以下三個公式

- 1、m^e mod n = C
- 2、C^d mod n = m^(e*d) mod n
- 3、m^(e*d) mod n = m

其中c^d mod n = m ,主要是源于 c^d mod n = m^(e*d)mod n = m ,且d 是 e 相對于 φ(n)的模反元素。需要注意的是:m 和 n 既為互質,也為原根,即m 是n的原根

RSA算法

所以最終RSA算法的加解密公式為:

  • 加密:m^e mod n = c

  • 解密:c^d mod n = m

  • 公鑰:n和e

  • 私鑰:n和d

  • 明文:m

  • 密文:c

其中涉及的公鑰、私鑰、密文、明文有如下說明

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

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

    • Φ(n) = (p1 -1) * (p2 - 1)
  • 3、最終由 Φ(n) 得到 e 和 d

  • 所以綜上所述,總共生成6個數字:p1、p2、n、Φ(n)、e、d

算法演示

m:取值 3 或 12
n:3*5(兩個質數相乘)

- φ(n) = (3-1)*(5-1)= 8
- e:3(e和Φ(n)互質)
- d:3d-1=8k ==> d = 11 / 19(由公式 e * d mod x = 1 求解)
- 加密:`m^e mod n = c` ==> 3^3 mod 8 = 3
- 解密:`c^d mod n = m` ==> 3^11 mod 8 = 3

關于RSA的安全說明
除了公鑰用到了ne,其余的4個數字是不公開的,目前破解RSA得到d的方式如下:

  • 1、要想求出私鑰 d,由于 e*d = φ(n)*k + 1。要知道eφ(n)

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

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

RSA算法說明

  • RSA效率不高,因為是數學運算,且m不能大于n,大數據不適合用RSA加密,一般用對稱加密(用key)
    • 交換key時,用RSA加密

    • 大數據傳遞,其中大數據用key(即對稱算法)加密

RSA終端命令

由于Mac系統內置OpenSSL(開源加密庫),所以在mac的終端可以直接使用OpenSSl玩RSA,OpenSSL中RSA算法常用命令有3個

命令 含義
genrsa 生成并輸入一個RSA私鑰
rsautl 使用RSA密鑰進行加密、解密、簽名和驗證等運算
rsa 處理RSA密鑰的格式轉換等問題

終端演示

  • 1、生成RSA私鑰,密鑰成都為1024bit

    • 命令:openssl genrsa -out private.pem 1024
      RSA終端演示-01
    • 查看 cat private.pem文件,其中是base64編碼
      RSA終端演示-02
  • 2、從私鑰中提取公鑰(即 n和e)

    • 命令:openssl rsa -in private.pem -pubout -out public.pem
      RSA終端演示-03
    • 查看公鑰:cat public.pem
      RSA終端演示-04
  • 3、生成的文件如下


    RSA終端演示-05
  • 4、將私鑰轉換為明文

    • 命令:openssl rsa -in private.pem -text -out private.txt
      RSA終端演示-06
  • 5、通過公鑰加密數據,私鑰解密數據


    RSA終端演示-07
    • 生成明文文件: vi message.txt

    • 查看文件內容:cat message.txt

    • 通過公鑰進行加密:openssl rsautl -encrypt -in message.txt -inkey public.pem -pubin -out enc.txt

    • 通過私鑰進行解密:openssl rsautl -decrypt -in enc.txt -inkey private.pem -out dec.txt
      生成的文件如下所示

      RSA終端演示-08

  • 6、通過私鑰加密數據,公鑰解密數據

    • 通過私鑰進行加密(簽名): openssl rsautl -sign -in message.txt -inkey private.pem -out enc.txt

    • 通過公鑰進行解密(驗證):openssl rsautl -verify -in enc.txt -inkey public.pem -pubin -out dec.txt

總結

  • 對稱加密(傳統加密算法):公鑰、私鑰采用同一個key

  • RSA非對稱加密(現代加密算法):加解密原理來源迪菲赫爾曼密鑰交換

    • 歐拉函數:如果N是兩個互質數P1和P2乘積,則Φ(N) = Φ(P1 * P2) = Φ(P1) * Φ(P2) = (P1-1) * (P2-1)

    • 歐拉定理:如果兩個正整數 m 和 n 互質,那么 m 的Φ(n)次方減去1,可以被n整除。即 (m^Φ(n) - 1) / n ≡ 0 ==> m^Φ(n) mod n ≡ 1

    • 費馬小定理:如果兩個正整數 m 和 n 互質,而且 n 為質數,那么 Φ(n) 結果就是 n-1,即 m^(n-1) mod n = 1

    • 迪菲赫爾曼密鑰交換原理

      • m^e mod n = C

      • C^d mod n = m^(e*d) mod n

      • m^(e*d) mod n = m

  • RSA算法

    • RSA原理:拆解兩個(大)質數的乘積很難,所以RSA相對安全

    • 加密:M ^ e % N = C

    • 解密:C ^ d % N = M

    • 密文(加密后的):C

    • 明文(解密后的):M

    • 公鑰:N 和 E

    • 私鑰:N 和 D

    • RSA成立條件(總共有6個數字):

      • N 是由兩個很大的質數(P1、P2)相乘得到!為了方便求出φ(N)(其中φ(n) = (p1-1)*(p2-1)
      • DE (一般是65537,0x10001(從終端演示中得出)) 相對于φ(N)模反元素
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,034評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,327評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,337評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,883評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,114評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,625評論 1 332
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,555評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,737評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,973評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,343評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,699評論 2 370

推薦閱讀更多精彩內容

  • IOS 逆向開發(一)密碼學 RSA 1. 密碼學發展簡介 密碼學是指研究信息加密,破解密碼的技術科學。密碼學的起...
    孔雨露閱讀 838評論 0 3
  • 推薦閱讀:iOS開發——BAT面試題合集(持續更新中) 要講逆向,那么肯定少不了密碼學,因為所有的逆向(攻防)都是...
    iOS開發之家閱讀 775評論 0 0
  • 要講逆向,那么肯定少不了密碼學,數據加密、代碼簽名等都需要用到密碼學。所以我們必須初步了解加密的方式有哪些,畢竟知...
    螞蟻也瘋狂閱讀 501評論 0 1
  • 密碼學概述 密碼學是指研究信息加密,破解密碼的技術科學。密碼學的起源可追溯到2000年前。而當今的密碼學是以數學為...
    帥駝駝閱讀 289評論 0 4
  • 今天感恩節哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會,身份的轉變要...
    迷月閃星情閱讀 10,587評論 0 11