iOS逆向 08:對(duì)稱(chēng)算法(上)

iOS 底層原理 + 逆向 文章匯總
注:大家可以關(guān)-注 Wei-Xin 公-眾-號(hào) :Style月月專(zhuān)欄

本文主要介紹對(duì)稱(chēng)算法的基本概念

對(duì)稱(chēng)加密

對(duì)稱(chēng)加密

  • 加密、解密使用的是同一個(gè)key,即使用同一個(gè)密鑰加密的方式

對(duì)稱(chēng)加密過(guò)程

  • 明文通過(guò)密鑰加密得到密文

  • 密文通過(guò)密鑰解密得到明文

對(duì)稱(chēng)加密優(yōu)點(diǎn)

  • 加密計(jì)算量小

  • 速度快

  • 適合對(duì)大數(shù)據(jù)進(jìn)行加密的場(chǎng)景

對(duì)稱(chēng)加密的缺點(diǎn)

  • 密鑰傳輸問(wèn)題:因?yàn)榧咏饷苁褂玫氖峭粋€(gè)密鑰,所以如何安全的把密鑰傳輸?shù)浇饷苷呤掷锸且粋€(gè)關(guān)鍵。在實(shí)際應(yīng)用中,一般是客戶(hù)端想服務(wù)器請(qǐng)求對(duì)稱(chēng)加密的密鑰,而且密鑰還需要使用非對(duì)稱(chēng)加密后再傳輸

  • 密鑰管理問(wèn)題:因?yàn)槊總€(gè)用戶(hù)都會(huì)有一個(gè)單獨(dú)的密鑰,所以隨著用戶(hù)的增多,密鑰的管理也是一個(gè)問(wèn)題。

常見(jiàn)的對(duì)稱(chēng)加密算法

在上節(jié)iOS逆向 07:Hash算法中我們利用了Hash算法加密,還可以使用對(duì)稱(chēng)加密,對(duì)稱(chēng)加密主要有以下 DES、3DES、 AES等,下面會(huì)分別進(jìn)行介紹

DES

DES (Data Encryption Standard) 是 1977 年美國(guó)聯(lián)邦信息處理標(biāo)準(zhǔn)(FIPS)中所采用的一種對(duì)稱(chēng)密碼(FIPS 46-3)。DES 一直以來(lái)被美國(guó)以及其他國(guó)家的政府和銀行所使用

DES 是一種把 64 位明文加密成 64 位密文的對(duì)稱(chēng)加密算法。它的密鑰長(zhǎng)度為 64 比特,但是除去每 7 個(gè)二進(jìn)制位會(huì)設(shè)置一個(gè)用于錯(cuò)誤檢測(cè)的位以外,實(shí)際上密鑰為 56 比特

  • DES 會(huì)以 64 個(gè)二進(jìn)制為一個(gè)分組進(jìn)行加密。DES一次性只能加密64位明文,如果明文超過(guò)了64位,就要進(jìn)行分組加密


    DES加密
  • DES解密也是64位分組解密,解密密鑰實(shí)質(zhì)也是 56 位。


    DES解密

3DES

三重 DES (triple-DES) 是為了增加 DES 強(qiáng)度,所以將 DES 重復(fù) 3 次得到的一種算法。也稱(chēng)為 TDEA (Triple Data Encryption Algorithm),通??s寫(xiě)為 3DES

  • 加密:進(jìn)行3次DES加密(即 加密-解密-加密),DES的密鑰長(zhǎng)度為56位,所以3DES的密鑰長(zhǎng)度為 56 * 3 = 168 位

    image

  • 解密:解密的過(guò)程正好與加密過(guò)程相反,按照密鑰的逆序解密(即 解密-加密-解密

    image

缺點(diǎn):3DES 由于處理速度不高,除了兼容之前的 DES 以外,目前基本不再使用它了

AES

AES (Advanced Encrytion Standard) 是取代前任標(biāo)準(zhǔn) DES 而成為新標(biāo)準(zhǔn)的一種對(duì)稱(chēng)密碼算法。在全世界的范圍內(nèi)征集 AES 加密算法,最終于 2000 年從候選中選出了 Rijndael 算法,確定它為新的 AES

Rijndael 的分組長(zhǎng)度和密鑰長(zhǎng)度可以分別以 32 位比特為單位在 128 比特到 256 比特的范圍內(nèi)進(jìn)行選擇。不過(guò)在 AES 的規(guī)范中,分組長(zhǎng)度被固定在 128 比特,密鑰長(zhǎng)度只有 128、192 和 256 比特三種。

加密:AES的加密是由多個(gè)輪組成,主要分為4輪

  • 1、SubBytes 字節(jié)變換

  • 2、ShiftRows 移行操作

  • 3、MixColumns 混行操作

  • 4、AddRoundKey 異或運(yùn)算

解密:AES的解密是加密的逆過(guò)程。

所以,在 Rijndael 加密過(guò)程中,每一輪處理的順序?yàn)椋?/p>

  • SubBytes -> ShiftRows -> MixColumns -> AddRoundKey

Rijndael 解密過(guò)程中,每一輪處理的順序?yàn)椋?/p>

  • AddRoundKey -> InvMixColumns -> InvShiftRows -> InvSubBytes

解密過(guò)程中除了第一步和加密完全一樣,其他三步都為加密的逆過(guò)程。

優(yōu)點(diǎn)

  • 加密效率更高
  • 目前還沒(méi)有針對(duì)AES有效的攻擊破譯方式

參考鏈接

注:對(duì)稱(chēng)算法這里也只是簡(jiǎn)單介紹,更為詳細(xì)的了解可以參考以下鏈接

分組模式

由于DES和AES一次加密都只能加密固定長(zhǎng)度的明文,如果需要加密任意長(zhǎng)度的明文,就需要對(duì)分組密碼進(jìn)行迭代。其中分組密碼的迭代方式就稱(chēng)為分組密碼模式

常用的分組模式主要有ECB、CBC,下面來(lái)分別進(jìn)行介紹

ECB

ECB 模式全稱(chēng)“Electronic CodeBook”模式,在 ECB 模式中,將明文分組加密之后的結(jié)果直接就是密文分組,中間不做任何的變換。

簡(jiǎn)單來(lái)說(shuō),ECB就是一個(gè)電子密碼本模式,每一塊數(shù)據(jù),獨(dú)立加密,獨(dú)立解密,如果其中一塊丟失,并不會(huì)影響其他數(shù)據(jù)塊。如下圖所示

ECB模式

ECB是最基本的加密模式,即通常理解的加密,相同的明文將永遠(yuǎn)加密成相同的密文,無(wú)初始向量,容易受到密碼本重放攻擊,一般情況下很少用

缺點(diǎn)

由于ECB的加密和解密都非常直接,所以可以根據(jù)密文中存在多少種重復(fù)的組合就能以此推測(cè)明文,來(lái)破譯密碼。所以ECB模式存在安全風(fēng)險(xiǎn),使用的人很少。

CBC

CBC 模式的全稱(chēng)是 Cipher Block Chaining 模式,密文分組鏈接模式。名字中也展示它的實(shí)質(zhì),像鏈條一樣相互鏈接在一起。使用一個(gè)密鑰和一個(gè)初始化向量[IV]對(duì)數(shù)據(jù)執(zhí)行加密

簡(jiǎn)單理解就是,同ECB一樣,也是一塊一塊的加密,但是后一塊數(shù)據(jù)的加密與前一塊數(shù)據(jù)室友關(guān)聯(lián)的,解密也是如此,如下所示

CBC模式

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

ECB與CBC對(duì)比

  • ECB模式只進(jìn)行了加密

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

    ECB與CBC對(duì)比

優(yōu)點(diǎn)

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

缺點(diǎn)

一個(gè)比特位的缺失就會(huì)導(dǎo)致整個(gè)密文無(wú)法解析。這算是 CBC 鏈?zhǔn)降囊粋€(gè)“小缺點(diǎn)”。相對(duì)ECB而言,更安全

總結(jié)

  • 對(duì)稱(chēng)算法:加解密使用同一個(gè)key

  • 常用的對(duì)稱(chēng)算法

    • DES:數(shù)據(jù)加密標(biāo)準(zhǔn),因?yàn)閺?qiáng)度不夠,所以使用很少

    • 3DES:使用3個(gè)密鑰,多相同的數(shù)據(jù)進(jìn)行加密,相比DES而言,強(qiáng)度增強(qiáng)

    • AES:高級(jí)密碼標(biāo)準(zhǔn)

  • 常用的分組模式

    • ECB:電子密碼本模式,每一塊數(shù)據(jù)獨(dú)立加密、獨(dú)立解密

    • CBC:分組密碼采用鏈接模式,使用一個(gè)密鑰和一個(gè)初始化向量[IV]對(duì)數(shù)據(jù)執(zhí)行加密,即上下文是關(guān)聯(lián)的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容