iOS 底層原理 + 逆向 文章匯總
注:大家可以關-注 Wei-Xin 公-眾-號 :Style月月專欄
本文主要介紹對稱算法
的基本概念
對稱加密
對稱加密
- 加密、解密使用的是同一個key,即使用同一個密鑰加密的方式
對稱加密過程
明文通過密鑰
加密
得到密文密文通過密鑰
解密
得到明文
對稱加密優點
加密計算量小
速度快
適合對大數據進行加密的場景
對稱加密的缺點
密鑰傳輸問題
:因為加解密使用的是同一個密鑰,所以如何安全的把密鑰傳輸到解密者手里是一個關鍵。在實際應用中,一般是客戶端想服務器請求對稱加密的密鑰,而且密鑰還需要使用非對稱加密后再傳輸
密鑰管理問題
:因為每個用戶都會有一個單獨的密鑰,所以隨著用戶的增多,密鑰的管理也是一個問題。
常見的對稱加密算法
在上節iOS逆向 07:Hash算法中我們利用了Hash算法加密,還可以使用對稱加密
,對稱加密主要有以下 DES、3DES、 AES
等,下面會分別進行介紹
DES
DES (Data Encryption Standard) 是 1977 年美國聯邦信息處理標準(FIPS)中所采用的一種對稱密碼
(FIPS 46-3)。DES 一直以來被美國以及其他國家的政府和銀行所使用
DES 是一種把 64 位明文加密成 64 位密文的對稱加密算法
。它的密鑰
長度為 64 比特
,但是除去每 7 個二進制位會設置一個用于錯誤檢測的位以外,實際上密鑰為 56 比特
。
-
DES 會以 64 個二進制為一個分組進行加密。DES一次性只能加密64位明文,如果明文超過了64位,就要進行分組加密
DES加密 -
DES解密也是64位分組解密,解密密鑰實質也是 56 位。
DES解密
3DES
三重 DES (triple-DES) 是為了增加 DES 強度,所以將 DES 重復 3 次得到的一種算法。也稱為 TDEA (Triple Data Encryption Algorithm),通常縮寫為 3DES
-
加密:進行
3次DES加密
(即加密-解密-加密
),DES的密鑰長度為56位,所以3DES的密鑰長度為 56 * 3 = 168 位
image -
解密:解密的過程正好與加密過程相反,按照密鑰的逆序解密(即
解密-加密-解密
)
image
缺點:3DES 由于處理速度不高,除了兼容之前的 DES 以外,目前基本不再使用它了
AES
AES (Advanced Encrytion Standard) 是取代前任標準 DES 而成為新標準的一種對稱密碼算法。在全世界的范圍內征集 AES 加密算法,最終于 2000 年從候選中選出了 Rijndael 算法
,確定它為新的 AES
。
Rijndael 的分組長度和密鑰長度可以分別以 32 位比特為單位在 128 比特到 256 比特的范圍內進行選擇。不過在 AES 的規范中,分組長度
被固定在 128 比特
,密鑰長度只有 128、192 和 256
比特三種。
加密:AES的加密是由多個輪組成,主要分為4輪
1、SubBytes 字節變換
2、ShiftRows 移行操作
3、MixColumns 混行操作
4、AddRoundKey 異或運算
解密:AES的解密是加密的逆過程。
所以,在 Rijndael 加密
過程中,每一輪處理的順序為:
- SubBytes -> ShiftRows -> MixColumns -> AddRoundKey
在 Rijndael 解密
過程中,每一輪處理的順序為:
- AddRoundKey -> InvMixColumns -> InvShiftRows -> InvSubBytes
解密過程中除了第一步和加密完全一樣,其他三步都為加密的逆過程。
優點
- 加密效率更高
- 目前還沒有針對AES有效的攻擊破譯方式
參考鏈接
注:對稱算法這里也只是簡單介紹,更為詳細的了解可以參考以下鏈接
分組模式
由于DES和AES一次加密都只能加密固定長度的明文,如果需要加密任意長度的明文,就需要對分組密碼進行迭代
。其中分組密碼的迭代方式
就稱為分組密碼
的模式
常用的分組模式主要有ECB、CBC
,下面來分別進行介紹
ECB
ECB
模式全稱“Electronic CodeBook”模式,在 ECB 模式中,將明文分組加密之后的結果直接就是密文分組,中間不做任何的變換。
簡單來說,ECB就是一個電子密碼本模式
,每一塊數據,獨立加密,獨立解密
,如果其中一塊丟失,并不會影響其他數據塊。如下圖所示
ECB是最基本的加密模式
,即通常理解的加密,相同的明文將永遠加密成相同的密文,無初始向量,容易受到密碼本重放攻擊,一般情況下很少用
缺點
由于ECB的加密和解密都非常直接,所以可以根據密文中存在多少種重復的組合就能以此推測明文,來破譯密碼。所以ECB模式存在安全風險
,使用的人很少。
CBC
CBC
模式的全稱是 Cipher Block Chaining 模式,密文分組鏈接模式
。名字中也展示它的實質,像鏈條一樣相互鏈接在一起。使用一個密鑰和一個初始化向量[IV]
對數據執行加密
簡單理解就是,同ECB一樣,也是一塊一塊的加密,但是后一塊數據的加密與前一塊數據室友關聯的
,解密也是如此,如下所示
明文被加密前要與前面的密文進行異或運算后再加密
,因此只要選擇不同的初始向量,相同的密文加密后會形成不同的密文,這是目前引用最廣泛的模式
,CBC加密后的密文是上下文相關
的,但明文的錯誤不會傳遞到后續分組,但如果一個分組丟失,后面的分組將全部作廢(同步錯誤)
ECB與CBC對比
ECB模式只進行了
加密
-
CBC模式則是在
加密之前進行了一次 XOR(即異或)
,這樣就完美了克服了 ECB 的缺點了
ECB與CBC對比
優點
CBC模式采用鏈接模式,可以有效的保證密文的完整性
,如果一個數據塊在傳遞是丟失還是改變,后面的數據將無法正常解密
缺點
一個比特位的缺失就會導致整個密文無法解析。這算是 CBC 鏈式的一個“小缺點”。相對ECB而言,更安全
總結
對稱算法:加解密使用同一個key
-
常用的對稱算法
DES
:數據加密標準,因為強度不夠,所以使用很少3DES
:使用3個密鑰,多相同的數據進行加密,相比DES而言,強度增強AES
:高級密碼標準
-
常用的分組模式
ECB
:電子密碼本模式,每一塊數據獨立加密、獨立解密CBC
:分組密碼采用鏈接模式,使用一個密鑰和一個初始化向量[IV]
對數據執行加密,即上下文是關聯的