iOS逆向 08:對稱算法(上)

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的加密和解密都非常直接,所以可以根據密文中存在多少種重復的組合就能以此推測明文,來破譯密碼。所以ECB模式存在安全風險,使用的人很少。

CBC

CBC 模式的全稱是 Cipher Block Chaining 模式,密文分組鏈接模式。名字中也展示它的實質,像鏈條一樣相互鏈接在一起。使用一個密鑰和一個初始化向量[IV]對數據執行加密

簡單理解就是,同ECB一樣,也是一塊一塊的加密,但是后一塊數據的加密與前一塊數據室友關聯的,解密也是如此,如下所示

CBC模式

明文被加密前要與前面的密文進行異或運算后再加密,因此只要選擇不同的初始向量,相同的密文加密后會形成不同的密文,這是目前引用最廣泛的模式,CBC加密后的密文是上下文相關的,但明文的錯誤不會傳遞到后續分組,但如果一個分組丟失,后面的分組將全部作廢(同步錯誤)

ECB與CBC對比

  • ECB模式只進行了加密

  • CBC模式則是在加密之前進行了一次 XOR(即異或),這樣就完美了克服了 ECB 的缺點了

    ECB與CBC對比

優點

CBC模式采用鏈接模式,可以有效的保證密文的完整性,如果一個數據塊在傳遞是丟失還是改變,后面的數據將無法正常解密

缺點

一個比特位的缺失就會導致整個密文無法解析。這算是 CBC 鏈式的一個“小缺點”。相對ECB而言,更安全

總結

  • 對稱算法:加解密使用同一個key

  • 常用的對稱算法

    • DES:數據加密標準,因為強度不夠,所以使用很少

    • 3DES:使用3個密鑰,多相同的數據進行加密,相比DES而言,強度增強

    • AES:高級密碼標準

  • 常用的分組模式

    • ECB:電子密碼本模式,每一塊數據獨立加密、獨立解密

    • CBC:分組密碼采用鏈接模式,使用一個密鑰和一個初始化向量[IV]對數據執行加密,即上下文是關聯的

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容