iOS逆向基礎(chǔ)-RSA

nx_001.jpeg

要講逆向,那么肯定少不了密碼學,數(shù)據(jù)加密、代碼簽名等都需要用到密碼學。所以我們必須初步了解加密的方式有哪些,畢竟知己知彼,才能百戰(zhàn)百勝。

接下來,我將從以下四方面來講述密碼學相關(guān)的內(nèi)容:
1、密碼學
2、RSA數(shù)學原理
3、RSA終端命令
4、RSA代碼演示

1.逆向基礎(chǔ)

1.什么是密碼學?

密碼學的歷史大致可以追溯到兩千年前,相傳古羅馬名將凱撒大帝為了防止敵方截獲情報,用密碼傳送情報。凱撒的做法很簡單,就是對二十幾個羅馬字母建立一張對應(yīng)表。這樣,如果不知道密碼本,即使截獲一段信息也看不懂。

從凱撒大帝時代到上世紀70年代這段很長的時間里,密碼學的發(fā)展非常的緩慢,因為設(shè)計者基本上靠經(jīng)驗。沒有運用數(shù)學原理。

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

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

1977年三位麻省理工學院的數(shù)學家 羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)倫納德·阿德曼(Leonard Adleman)一起設(shè)計了一種算法,可以實現(xiàn)非對稱加密。這個算法用他們?nèi)齻€人的名字命名,叫做RSA算法。

也就是說「迪菲赫爾曼密鑰交換」在密碼學歷史的車輪中成為了一個轉(zhuǎn)折點。

2、RSA數(shù)學原理

需要用到的數(shù)學公式:
1、取模運算
2、歐拉函數(shù)φ
3、歐拉定理,費馬小定理
4、模反元素
5、迪菲赫爾曼密鑰交換

2.1、取模運算

取模運算(“Modulo Operation”)和取余運算(“Complementation ”)兩個概念有重疊的部分但又不完全一致。主要的區(qū)別在于對負整數(shù)進行除法運算時操作不同。
在這列出各種負數(shù)情況的例子供大家理解:
7 mod 4 = 3(商 = 1 或 2,1<2,取商=1)
-7 mod 4 = 1(商 = -1 或 -2,-2<-1,取商=-2)
7 mod -4 = -1(商 = -1或-2,-2<-1,取商=-2)
-7 mod -4 = -3(商 = 1或2,1<2,取商=1)

函數(shù)值符號規(guī)律(余數(shù)的符號) mod(負,正)=正 mod(正,負)=負
結(jié)論:兩個整數(shù)求余時,其值的符號為除數(shù)的符號。

2.2、歐拉函數(shù)φ(讀fai,三聲)

可以簡單理解為:
如果n可以分解為兩個互質(zhì)(不一定是兩個質(zhì)數(shù))的數(shù)之積A和B,那么:
φ(n) = φ(A) * φ(B)
如果 A和B 又同時為質(zhì)數(shù),那么:
φ(n) = (A-1) * (B-1)

2.3、歐拉定理,費馬小定理

首先這里說一下,定制之所以是定理是被人證明過的

歐拉定理: 如果兩個正整數(shù)m和n互質(zhì),那么m的φ(n)次方減去1,可以被n整除。
公式表示為:

歐拉定理.jpeg

費馬小定理:歐拉定理的特殊情況:如果兩個正整數(shù)m和n互質(zhì),而且n為質(zhì)數(shù)!那么φ(n)結(jié)果就是n-1。
公式表示為:

費馬小定理.jpeg

2.4、模反元素

概念:如果兩個正整數(shù)e和x互質(zhì),那么一定可以找到整數(shù)d,使得 ed-1 被x整除,那么d就是e對于x的“模反元素”

公式轉(zhuǎn)換.png
模反元素.png
2.5、迪菲赫爾曼密鑰交換

迪菲赫爾曼密鑰交換.png

如上圖:
客戶端持有一個隨機數(shù)13 ,服務(wù)端持有隨機數(shù)15,再選一對特殊的數(shù),3是17的原根(啥是原根?)。
兩端交換的都是密文,就算中間被劫持,也不知道最后需要的傳輸?shù)膬?nèi)容是10
那么這個10就是最后真正的秘鑰。
如圖:
原理.png

證明過程:

1 3^(13 * 15) mod 17 = 3^(13 * 15) mod 17
2 根據(jù)模冪運算 ((m^e mod n)^d) mod n = m^(e*d) mod n
3 (3^13 mod 17)^13 mod 17 = (3^15 mod 17)^15 mod 17
4 由于 3^13 mod 17 = 12 , 3^15 mod 17 = 6
5 6^13 mod 17 = 12^15 mod 17 = 10

設(shè):

m=3 ,e=13 ,d=15 ,n=17 ,C=12

那么:

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

又由于上面模反元素 最后得出:

m^(e*d) mod n = m

所以得出最終結(jié)論:

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

2.6、RSA算法
原理2.png

說明:
公鑰: n和e
私鑰: n和d
明文: m
密文: c
d是e對于φ(n)的“模反元素”。

補充說明:

  1. n會非常大,長度一般為1024個二進制位。(目前人類已經(jīng)分解的最大整數(shù),232個十進制位,768個二進制位)
  2. 由于需要求出φ(n),所以根據(jù)歐函數(shù)特點,最簡單的方式n 由兩個質(zhì)數(shù)相乘得到: 質(zhì)數(shù):p1、p2
    Φ(n) = (p1 -1) * (p2 - 1)
  3. 最終由φ(n)得到e 和 d 。
    總共生成6個數(shù)字:p1、p2、n、φ(n)、e、d

關(guān)于RSA的安全:
除了公鑰用到了n和e 其余的4個數(shù)字是不公開的。
目前破解RSA得到d的方式如下:
1、要想求出私鑰 d 。由于ed = φ(n)k + 1。要知道e和φ(n);
2、e是知道的,但是要得到 φ(n),必須知道p1 和 p2。
3、由于 n=p1*p2。只有將n因數(shù)分解才能算出。

3、RSA終端命令 (Mac的終端可以直接使用OpenSSL進行RSA的命令運行.)

3.1 OpenSSL 使用RSA

由于Mac系統(tǒng)內(nèi)置OpenSSL(開源加密庫),所以我們可以直接在終端上使用命令來玩RSA. OpenSSL中RSA算法常用指令主要有三個:

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

3.2 OpenSSL 使用RSA 終端命令詳解

3.2.1 生成RSA私鑰,密鑰長度為1024bit

openssl genrsa -out private.pem 1024


生成RSA私鑰,密鑰長度為1024bit.png
3.2.2 從私鑰中提取公鑰

openssl rsa -in private.pem -pubout -out public.pem


從私鑰中提取公鑰.png
3.2.3 此時生成的文件是兩個,如下:
RSA.png
3.2.4 將私鑰轉(zhuǎn)換成為明文
  • openssl rsa -in private.pem -text -out private.txt
  • cat private.txt


    私鑰轉(zhuǎn)換成為明文.png
3.2.5 通過公鑰加密數(shù)據(jù),私鑰解密數(shù)據(jù)
1. 新建一個文件,在文件中隨意輸入內(nèi)容,比如輸入字符串”Hello“
2. vim message.txt  
3. 查看文件
4. cat message.txt  
5. 通過公鑰進行加密
6. openssl rsautl -encrypt -in message.txt -inkey public.pem -pubin -out enc.txt
7. 通過私鑰進行解密
8. openssl rsautl -decrypt -in enc.txt -inkey private.pem -out dec.txt
9. 查看加密后的文件
10. cat enc.txt  
11. 查看解密后的文件
12. cat dec.txt 
通過公鑰加密數(shù)據(jù),私鑰解密數(shù)據(jù)1.png
通過公鑰加密數(shù)據(jù),私鑰解密數(shù)據(jù)2.png
3.2.6 通過私鑰加密數(shù)據(jù),公鑰解密數(shù)據(jù)
私鑰加密
openssl rsautl -sign -in message.txt -inkey private.pem -out enc_2.txt

公鑰加密
openssl rsautl -verify -in enc_2.txt -inkey public.pem -pubin -out dec_2.txt

3.3 總結(jié)

1、由于RSA加密解密用的不是一套數(shù)據(jù),所以其保證了安全性。

2、由于私鑰過大,所以效率較低

3、如果有一天量子計算機被普及(計算速度極快),那么1024位已經(jīng)不足以讓RSA安全。

4 代碼演示

圖片編碼,解碼
base64 xxx.jpeg -o abc.txt
base64 abc.txt -o 123.png -D 

4.1 Base64 介紹

Base64 介紹
字母構(gòu)成
A-Z
a-z
0-9
/ + = (=號比較特殊)

24位,末位補0,0 轉(zhuǎn) 成 =

所以base64 一共有 65 個字符 ??

4.2 Base64 特點

1. 對一個二進制數(shù)據(jù)進行編碼,文件會變大! 原有文件的4/3 , 多了1/3
2. 不便于查看的二進制數(shù)據(jù),用base64進行表示。

4.3 RSA 準備 工作

4.3.1 證書生成步驟

3.2.1中我們得到了2個pem文件,在開發(fā)中我們是經(jīng)常直接使用pem文件的,所以我們要通過以下步驟轉(zhuǎn)換證書。

1. 從私鑰中獲取csr文件
openssl req -new -key private.pem -out rsacert.csr

2.需要填寫:國家、省、城市、公司、部門、部門名稱、郵箱、密碼(可不寫)

3.獲取證書 (從csr文件中獲取證書)
openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt

4.提取 文件(文件中主要包含公鑰+信息)
openssl x509 -outform der -in rsacert.crt -out rsacert.der

5.獲取私鑰(p.12)
openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt

RSA特點:1、效率低 2、加密小數(shù)據(jù)
RSA運用:1、加密KEY 2、數(shù)字簽名

不清楚的地方,歡迎留言評論
代碼地址 base64 & RSA

參考文章: 一縷清風揚萬里

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