iOS逆向基礎(chǔ)04-密碼學(xué)

一. 加密常識

1.1 對稱加密和非對稱加密

對稱加密

  • DES:加密標(biāo)準(zhǔn)
  • 3DES:加強(qiáng)版DES
  • AES:現(xiàn)在的加密標(biāo)準(zhǔn)iOS系統(tǒng)的加密方式

非對稱加密

  • ECC(橢圓加密算法吓歇,Elliptic Curve Cryptography)推薦
  • RSA
  • Elgamal

1.2 密鑰配送問題

  • 事先共享密鑰
  • 公鑰密碼(rsa等非對稱加密)

1.3 加密方式

  • ECB:將每一個數(shù)據(jù)塊單獨(dú)加密
  • CBC:加密每一個數(shù)據(jù)塊,都會與上一個數(shù)據(jù)塊之間有聯(lián)系.能夠保證密文的完整性,任何一個數(shù)據(jù)塊改變了,都會對后面的數(shù)據(jù)造成破壞.(推薦)

1.4 單向散列函數(shù)(hash函數(shù))

  • MD5 ---------- 128bit,不安全
  • SHA-1---------160bit,不安全
  • SHA-2
  • SHA-256 -------256bit,安全推薦
  • SHA-384 ,,,,,,SHA-512
  • 在具體算法的選取上,你只需要記着佳:對稱加密用 AES-CTR颖杏、非對稱加密用 ECC纯陨、散列算法用 SHA256 加鹽。這些算法就能夠滿足大部分的使用場景了留储,并且在未來很長一段時間內(nèi)翼抠,都可以保持一個較高的安全強(qiáng)度。

二. 證書

  • CA機(jī)構(gòu) : 證書授權(quán)中心获讳,是電子商務(wù)交易中受信任的第三方阴颖,承擔(dān)公鑰體系中公鑰的合法性檢驗(yàn)的責(zé)任。
  • 證書 : 是CA機(jī)構(gòu)用自己的私鑰將用戶的公鑰進(jìn)行簽名,保證用戶的公鑰不被篡改.
  • CA的數(shù)字簽名,主要是為了證明你拿到的CA證書確實(shí)是CA機(jī)構(gòu)頒發(fā)的.
  1. 服務(wù)器申請一個CA證書.
  2. CA機(jī)構(gòu)拿到服務(wù)器的公鑰丐膝、信息,用hash算法得到一個信息摘要并用自己的私鑰進(jìn)行簽名.然后把服務(wù)器的公鑰量愧、信息簽名組合成一個證書給服務(wù)器.
  3. 客戶端發(fā)送請求到服務(wù)器,服務(wù)器會將自己的公鑰、信息返回給客戶端,客戶端拿到服務(wù)器的公鑰帅矗、信息,用hash算法得到一個信息摘要;
    然后在CA機(jī)構(gòu)拿到公鑰解密CA的證書可以拿到CA認(rèn)證的服務(wù)器的公鑰偎肃、信息進(jìn)行hash算法也會得到一個信息摘要.
  4. 如果兩個信息摘要是一樣的,就說明信息卻是來自于真正的服務(wù)器,沒有中間人攻擊.

三. SSL/TLS

3.1 SSL(Secure Sockets Layer 安全套接字協(xié)議)的作用

  • 機(jī)密性:SSL協(xié)議使用密鑰加密通信數(shù)據(jù)。
  • 可靠性:服務(wù)器和客戶都會被認(rèn)證浑此,客戶的認(rèn)證是可選的累颂。
  • 完整性:SSL協(xié)議會對傳送的數(shù)據(jù)進(jìn)行完整性檢查。

3.2 SSL 基本原理

  1. 客戶端向服務(wù)器發(fā)送Client Hello 消息,包含隨機(jī)數(shù)凛俱、加密方法等參數(shù)
  2. 服務(wù)端收到ClientHello消息后紊馏,再發(fā)送ServerHello消息回應(yīng)客戶端
  3. 服務(wù)器將公鑰發(fā)送給客戶端,客戶端通過證書驗(yàn)證服務(wù)器的真假性單向認(rèn)證完成
  4. (可選):服務(wù)器如果開啟了雙向認(rèn)證,那么就需要客戶端將自己的證書發(fā)送給服務(wù)器
  5. 兩端使用協(xié)商好的加密算法進(jìn)行通訊

四. HTTPS

HTTPS是以安全為目標(biāo)的HTTP通道,簡單講是HTTP的安全版最冰。即HTTP下加入SSL層瘦棋,https的安全基礎(chǔ)是SSL,因此加密的詳細(xì)內(nèi)容請看SSL暖哨。

五. 中間人攻擊

5.1 公鑰私鑰問題

私鑰只有自己知道,公鑰可以分發(fā)給其他人

  • 公鑰加密,私鑰解密,可以用來傳遞消息(加密).(任何人都可以用公鑰加密東西發(fā)給alice,因?yàn)橹挥衋lice有私鑰,所以只有alice能解密)
  • 私鑰加密,公鑰解密,可以用來驗(yàn)證(簽名).(alice用私鑰加密東西,有alice公鑰的就可以解密.如果bob想冒充alice,因?yàn)閎ob不知道alice的私鑰,那么bob只能用自己的私鑰進(jìn)行加密,但是別人還是用alice的公鑰進(jìn)行解密,就會出錯)
  • 傳遞消息驗(yàn)證簽名 是相反的.

5.2 安全隱患

alice要給bob發(fā)消息.
需要拿到bob的公鑰,加密消息然后發(fā)給bob.
bob再用自己的私鑰進(jìn)行解密.
-----warning------
如果alice拿到的公鑰不是bob的,而是中間人的呢?
所以,確定拿到的公鑰必須是bob的,才是安全的.
這時候就需要CA機(jī)構(gòu)的證書來做安全保障.

六.charles

平時我們總會用charles抓包,只要給手機(jī)設(shè)置了代理,就能在電腦端看到charles攔擊的app和服務(wù)器的通訊包,下面就圍繞charles來看看iOS逆向相關(guān)的東西.

charles官網(wǎng)介紹:
Charles can be used as a man-in-the-middle HTTPS proxy, enabling you to view in plain text the communication between web browser and SSL web server.

Charles does this by becoming a man-in-the-middle. Instead of your browser seeing the server’s certificate, Charles dynamically generates a certificate for the server and signs it with its own root certificate (the Charles CA Certificate). Charles receives the server’s certificate, while your browser receives Charles’s certificate. Therefore you will see a security warning, indicating that the root authority is not trusted. If you add the Charles CA Certificate to your trusted certificates you will no longer see any warnings – see below for how to do this.

6.1 charles的使用

  1. mac端下載一個charles作為手機(jī)的代理使用
  2. 選擇安裝一個手機(jī)或者遠(yuǎn)端瀏覽器的證書
安裝證書.png
  1. 手機(jī)和電腦連接同一個wifi,點(diǎn)擊該wift的設(shè)置,配置代理,服務(wù)器為電腦的IP地址,端口號為8888
設(shè)置代理
  1. 打開safari輸入chls.pro/ssl下載charles的證書,打開設(shè)置,安裝該證書.
  2. 打開charles,就可以看到你app的所有網(wǎng)絡(luò)請求了.

6.2 charles的原理

為啥charels能攔截app的網(wǎng)絡(luò)請求呢?
很多人聽說https是安全的,自己公司用了https后為啥還能被charles攔截明文請求呢?

  • ??其實(shí)是概念用混了.
  • https確實(shí)是安全的,app和charles通信是安全的,charles和服務(wù)器通訊也是安全的.
  • 但是app到服務(wù)器不是安全的,因?yàn)橛辛?code>man-in-the-middle身份的charles這個代理.

簡單看下charles的工作過程吧.

  1. 客戶端向服務(wù)器發(fā)起HELLO WORLD的HTTPS請求,客戶端使用charles的公鑰加密HELLO WORLD
  2. 因?yàn)榭蛻舳嗽O(shè)置了代理,所以charles接收到請求
  3. charles使用自己的私鑰解密HELLO WORLD
  4. 如果服務(wù)器沒有對客戶端做雙向認(rèn)證,那么charles就可以拿著客戶端的請求向服務(wù)器發(fā)送請求
  5. 服務(wù)器將公鑰發(fā)送給charles
  6. charles作為中間人,解密服務(wù)器的數(shù)據(jù)然后用自己的私鑰加密發(fā)送給客戶端,客戶端使用charles的公鑰進(jìn)行解密.

N. 答疑

  • MD5絕對安全嗎?
    答案是NO,md5為32位,也就是說它能表示的最多的可能為36(26個字母加10個數(shù)字)的32次方,而地球上有那么多的東西可以加密.所以有可能不同的東西的MD5值是一樣的
  • base64是加密方式嗎?
    base64只是對二進(jìn)制進(jìn)行編碼解碼的方式,不能用來加密. base64依次截取6bit然后用64種字符表示,如果最后為000 000,那么用=表示. 所以base64其實(shí)共有65種字符.
  • 使用https就安全了嗎
    https本身是安全的,因?yàn)閔ttps內(nèi)置了SSL協(xié)議,可以使得兩端通訊完全使用的是密文傳輸.
    但是https只是整個通訊環(huán)節(jié)的一部分,如果沒有設(shè)置好可能會受到中間人攻擊,所以還需要進(jìn)行單向認(rèn)證或者雙向認(rèn)證設(shè)置,才能更為安全.

1.如果客戶端沒有做認(rèn)證
黑客可以直接抓包,可以修改通信內(nèi)容

2.如果客戶端做了單向認(rèn)證
黑客可以逆向客戶端,并修改客戶端的認(rèn)證方式,然后就可以進(jìn)行上步的操作

所以為了更加的安全,我們可以給傳輸?shù)臄?shù)據(jù)自己加一次密.這樣的話就算有中間人攻擊,拿到的卻是我們加密過的東西,那么中間人還得再破解一次,相當(dāng)難了.

  • 我們在使用md5的時候,可以自己加鹽.(通過服務(wù)器下發(fā)不同的鹽,不同的用戶不同的鹽)
  • hmac: MD5升級版,通過加鹽來增強(qiáng)密碼強(qiáng)度,鹽在用戶注冊的時候下發(fā),并把每個用戶不同的鹽存在服務(wù)器.(加時間戳,服務(wù)器向前驗(yàn)證1分鐘,這樣黑客破解就只有1分鐘)
  • 為了防止加密方式被破解,服務(wù)器可以用當(dāng)前時間往前推1分鐘然后在本地MD5,判斷是否和客戶端傳過來的一樣?如果一樣則說明是客戶端傳過來的值,而不是中間人.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赌朋,一起剝皮案震驚了整個濱河市凰狞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沛慢,老刑警劉巖赡若,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異团甲,居然都是意外死亡逾冬,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門躺苦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來身腻,“玉大人,你說我怎么就攤上這事匹厘∴痔耍” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵愈诚,是天一觀的道長她按。 經(jīng)常有香客問我,道長炕柔,這世上最難降的妖魔是什么酌泰? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮匕累,結(jié)果婚禮上陵刹,老公的妹妹穿的比我還像新娘。我一直安慰自己哩罪,他們只是感情好授霸,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布巡验。 她就那樣靜靜地躺著际插,像睡著了一般。 火紅的嫁衣襯著肌膚如雪显设。 梳的紋絲不亂的頭發(fā)上框弛,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音捕捂,去河邊找鬼瑟枫。 笑死,一個胖子當(dāng)著我的面吹牛指攒,可吹牛的內(nèi)容都是我干的慷妙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼允悦,長吁一口氣:“原來是場噩夢啊……” “哼膝擂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤架馋,失蹤者是張志新(化名)和其女友劉穎狞山,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叉寂,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萍启,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了屏鳍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勘纯。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖钓瞭,靈堂內(nèi)的尸體忽然破棺而出屡律,到底是詐尸還是另有隱情,我是刑警寧澤降淮,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布超埋,位于F島的核電站,受9級特大地震影響佳鳖,放射性物質(zhì)發(fā)生泄漏霍殴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一系吩、第九天 我趴在偏房一處隱蔽的房頂上張望来庭。 院中可真熱鬧,春花似錦穿挨、人聲如沸月弛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帽衙。三九已至,卻和暖如春贞绵,著一層夾襖步出監(jiān)牢的瞬間厉萝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工榨崩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谴垫,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓母蛛,卻偏偏與公主長得像翩剪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子彩郊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容