iOS 底層原理 + 逆向 文章匯總
注:大家可以關(guān)-注 Wei-Xin 公-眾-號 :Style月月專欄
本文主要介紹對稱算法
的基本概念
對稱加密
對稱加密
- 加密峭火、解密使用的是同一個key紧显,即使用同一個密鑰加密的方式
對稱加密過程
明文通過密鑰
加密
得到密文密文通過密鑰
解密
得到明文
對稱加密優(yōu)點
加密計算量小
速度快
適合對大數(shù)據(jù)進行加密的場景
對稱加密的缺點
密鑰傳輸問題
:因為加解密使用的是同一個密鑰,所以如何安全的把密鑰傳輸?shù)浇饷苷呤掷锸且粋€關(guān)鍵誊抛。在實際應(yīng)用中狈蚤,一般是客戶端想服務(wù)器請求對稱加密的密鑰困肩,而且密鑰還需要使用非對稱加密后再傳輸
密鑰管理問題
:因為每個用戶都會有一個單獨的密鑰,所以隨著用戶的增多脆侮,密鑰的管理也是一個問題锌畸。
常見的對稱加密算法
在上節(jié)iOS逆向 07:Hash算法中我們利用了Hash算法加密,還可以使用對稱加密
靖避,對稱加密主要有以下 DES潭枣、3DES比默、 AES
等,下面會分別進行介紹
DES
DES (Data Encryption Standard) 是 1977 年美國聯(lián)邦信息處理標(biāo)準(zhǔn)(FIPS)中所采用的一種對稱密碼
(FIPS 46-3)卸耘。DES 一直以來被美國以及其他國家的政府和銀行所使用
DES 是一種把 64 位明文加密成 64 位密文的對稱加密算法
退敦。它的密鑰
長度為 64 比特
粘咖,但是除去每 7 個二進制位會設(shè)置一個用于錯誤檢測的位以外蚣抗,實際上密鑰為 56 比特
。
-
DES 會以 64 個二進制為一個分組進行加密瓮下。DES一次性只能加密64位明文翰铡,如果明文超過了64位,就要進行分組加密
-
DES解密也是64位分組解密讽坏,解密密鑰實質(zhì)也是 56 位锭魔。
3DES
三重 DES (triple-DES) 是為了增加 DES 強度,所以將 DES 重復(fù) 3 次得到的一種算法路呜。也稱為 TDEA (Triple Data Encryption Algorithm)迷捧,通常縮寫為 3DES
-
加密:進行
3次DES加密
(即加密-解密-加密
)胀葱,DES的密鑰長度為56位漠秋,所以3DES的密鑰長度為 56 * 3 = 168 位
-
解密:解密的過程正好與加密過程相反,按照密鑰的逆序解密(即
解密-加密-解密
)
缺點:3DES 由于處理速度不高抵屿,除了兼容之前的 DES 以外庆锦,目前基本不再使用它了
AES
AES (Advanced Encrytion Standard) 是取代前任標(biāo)準(zhǔn) DES 而成為新標(biāo)準(zhǔn)的一種對稱密碼算法。在全世界的范圍內(nèi)征集 AES 加密算法轧葛,最終于 2000 年從候選中選出了 Rijndael 算法
搂抒,確定它為新的 AES
。
Rijndael 的分組長度和密鑰長度可以分別以 32 位比特為單位在 128 比特到 256 比特的范圍內(nèi)進行選擇尿扯。不過在 AES 的規(guī)范中求晶,分組長度
被固定在 128 比特
,密鑰長度只有 128衷笋、192 和 256
比特三種芳杏。
加密:AES的加密是由多個輪組成,主要分為4輪
1右莱、SubBytes 字節(jié)變換
2蚜锨、ShiftRows 移行操作
3、MixColumns 混行操作
4慢蜓、AddRoundKey 異或運算
解密:AES的解密是加密的逆過程亚再。
所以,在 Rijndael 加密
過程中晨抡,每一輪處理的順序為:
- SubBytes -> ShiftRows -> MixColumns -> AddRoundKey
在 Rijndael 解密
過程中氛悬,每一輪處理的順序為:
- AddRoundKey -> InvMixColumns -> InvShiftRows -> InvSubBytes
解密過程中除了第一步和加密完全一樣则剃,其他三步都為加密的逆過程。
優(yōu)點
- 加密效率更高
- 目前還沒有針對AES有效的攻擊破譯方式
參考鏈接
注:對稱算法這里也只是簡單介紹如捅,更為詳細的了解可以參考以下鏈接
分組模式
由于DES和AES一次加密都只能加密固定長度的明文棍现,如果需要加密任意長度的明文,就需要對分組密碼進行迭代
镜遣。其中分組密碼的迭代方式
就稱為分組密碼
的模式
常用的分組模式主要有ECB己肮、CBC
,下面來分別進行介紹
ECB
ECB
模式全稱“Electronic CodeBook”模式悲关,在 ECB 模式中谎僻,將明文分組加密之后的結(jié)果直接就是密文分組,中間不做任何的變換寓辱。
簡單來說艘绍,ECB就是一個電子密碼本模式
,每一塊數(shù)據(jù)秫筏,獨立加密诱鞠,獨立解密
,如果其中一塊丟失这敬,并不會影響其他數(shù)據(jù)塊航夺。如下圖所示
ECB是最基本的加密模式
,即通常理解的加密鹅颊,相同的明文將永遠加密成相同的密文敷存,無初始向量,容易受到密碼本重放攻擊堪伍,一般情況下很少用
缺點
由于ECB的加密和解密都非常直接锚烦,所以可以根據(jù)密文中存在多少種重復(fù)的組合就能以此推測明文,來破譯密碼帝雇。所以ECB模式存在安全風(fēng)險
涮俄,使用的人很少。
CBC
CBC
模式的全稱是 Cipher Block Chaining 模式尸闸,密文分組鏈接模式
彻亲。名字中也展示它的實質(zhì),像鏈條一樣相互鏈接在一起吮廉。使用一個密鑰和一個初始化向量[IV]
對數(shù)據(jù)執(zhí)行加密
簡單理解就是苞尝,同ECB一樣,也是一塊一塊的加密宦芦,但是后一塊數(shù)據(jù)的加密與前一塊數(shù)據(jù)室友關(guān)聯(lián)的
宙址,解密也是如此,如下所示
明文被加密前要與前面的密文進行異或運算后再加密
调卑,因此只要選擇不同的初始向量抡砂,相同的密文加密后會形成不同的密文大咱,這是目前引用最廣泛的模式
,CBC加密后的密文是上下文相關(guān)
的注益,但明文的錯誤不會傳遞到后續(xù)分組碴巾,但如果一個分組丟失,后面的分組將全部作廢(同步錯誤)
ECB與CBC對比
ECB模式只進行了
加密
-
CBC模式則是在
加密之前進行了一次 XOR(即異或)
丑搔,這樣就完美了克服了 ECB 的缺點了
優(yōu)點
CBC模式采用鏈接模式厦瓢,可以有效的保證密文的完整性
,如果一個數(shù)據(jù)塊在傳遞是丟失還是改變低匙,后面的數(shù)據(jù)將無法正常解密
缺點
一個比特位的缺失就會導(dǎo)致整個密文無法解析旷痕。這算是 CBC 鏈?zhǔn)降囊粋€“小缺點”碳锈。相對ECB而言顽冶,更安全
總結(jié)
對稱算法:加解密使用同一個key
-
常用的對稱算法
DES
:數(shù)據(jù)加密標(biāo)準(zhǔn),因為強度不夠售碳,所以使用很少3DES
:使用3個密鑰强重,多相同的數(shù)據(jù)進行加密,相比DES而言贸人,強度增強AES
:高級密碼標(biāo)準(zhǔn)
-
常用的分組模式
ECB
:電子密碼本模式间景,每一塊數(shù)據(jù)獨立加密、獨立解密CBC
:分組密碼采用鏈接模式艺智,使用一個密鑰和一個初始化向量[IV]
對數(shù)據(jù)執(zhí)行加密倘要,即上下文是關(guān)聯(lián)的