偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

圖解AES密鑰擴(kuò)展與加密過程

安全 應(yīng)用安全
本篇介紹了AES加密的原理,通過一個(gè)具體的字符串和自定義密鑰,演示了AES加密的全過程,包括密鑰的擴(kuò)展過程,每輪加密的數(shù)據(jù)變換過程等,最終得到加密的結(jié)果。

在嵌入式軟件開發(fā)中,特別是涉及到與云端進(jìn)行數(shù)據(jù)傳輸時(shí),為確保數(shù)據(jù)的安全性,需要對(duì)數(shù)據(jù)進(jìn)行加密,本篇了就來介紹常用的一種加密方式——AES加密的原理。

1 AES加密簡(jiǎn)介

AES(Advanced Encryption Standard,高級(jí)加密標(biāo)準(zhǔn))是一種廣泛使用的對(duì)稱加密算法,由美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)于 2001 年標(biāo)準(zhǔn)化,用于替代安全性不足的 DES 算法。

AES 的核心特性

  • 對(duì)稱加密:加密和解密使用相同的密鑰,密鑰長(zhǎng)度可選擇 128 位、192 位或 256 位(分別稱為 AES-128、AES-192、AES-256),密鑰越長(zhǎng),安全性越高,但計(jì)算開銷也略大
  • 分組加密:處理固定長(zhǎng)度的明文塊(128 位,即 16 字節(jié)),若明文長(zhǎng)度不足 16 字節(jié),需通過填充(如 PKCS#7)補(bǔ)足;若超過 16 字節(jié),則分塊處理并結(jié)合模式(如 CBC、GCM 等)保證安全性
  • AES 的加密過程是對(duì) 16 字節(jié)明文塊(按 4×4 矩陣排列,稱為 “狀態(tài)矩陣”)進(jìn)行多輪變換,輪數(shù)取決于密鑰長(zhǎng)度:

AES-128:10 輪

AES-192:12 輪

AES-256:14 輪

本篇介紹最基礎(chǔ)的128 位密鑰,10輪加密,并且明文長(zhǎng)度為16 字節(jié)不需要填充的情況。

例如:“coder-love-study”字符串剛好16個(gè)字符,只需要對(duì)這一個(gè)數(shù)據(jù)塊進(jìn)行加密即可。

圖片圖片

在執(zhí)行加密前,需要先將字符串轉(zhuǎn)為對(duì)應(yīng)的16進(jìn)制數(shù),也就是通過ASCII碼表進(jìn)行轉(zhuǎn)換。

另外,需要注意是的,16個(gè)字節(jié)的數(shù)據(jù)塊,要按列優(yōu)先的順序,排列到4x4的矩陣中,如下圖:

圖片圖片

這里再附一份ASCII碼對(duì)照表:

圖片圖片

圖片

AES-128的密鑰,剛好也是4x4的矩形(種子密鑰),而進(jìn)行10輪加密,使用的密鑰是不同的,這些密鑰都是從種子密鑰擴(kuò)展出來的。

下面就開始介紹AES的密鑰擴(kuò)展和具體加密過程

2 輪密鑰的計(jì)算

AES 的原始密鑰(種子密鑰)通過特定算法擴(kuò)展為多輪子密鑰(如 AES-128 需擴(kuò)展為 11 個(gè)子密鑰,包含初始密鑰和 10 輪密鑰)。

擴(kuò)展過程是按列進(jìn)行擴(kuò)展,其計(jì)算過程主要分為兩大類:

  • 列索引是4的倍數(shù):計(jì)算過程稍復(fù)雜
  • 列索引不是4的倍數(shù):計(jì)算過程稍簡(jiǎn)單

圖片圖片

2.1 S-Box表與輪常量表

在介紹密鑰擴(kuò)展的具體步驟之前,先了解一下要用到的一些表

2.1.1 S-box表

是一個(gè)固定的表格,16行x16列,用于數(shù)據(jù)映射,后面字節(jié)代換時(shí)會(huì)用到

圖片圖片

2.1.2 輪常量表

也是一個(gè)固定的表格,一共有10列,后面計(jì)算4的倍數(shù)列的密鑰時(shí)會(huì)用到,10個(gè)擴(kuò)展密鑰分別會(huì)使用對(duì)應(yīng)的列。

圖片圖片

2.2 計(jì)算4的倍數(shù)列

先來介紹4的倍數(shù)列的擴(kuò)展密鑰如何結(jié)算,例如第4列(輪密鑰1的最左側(cè)的列),計(jì)算過程為:

  • 通過i-1列(第3列)進(jìn)行數(shù)據(jù)變換,包括:

字節(jié)旋轉(zhuǎn):就是把第3列的數(shù)據(jù)先取出來,然后循環(huán)移動(dòng)1位

S-box查表:每個(gè)數(shù)據(jù),看作是行、列左邊,去S-box中找到對(duì)應(yīng)的位置,取出其存儲(chǔ)的值,作為替換值

與輪常量進(jìn)行異或運(yùn)算

  • i-4列的值(第0列)與i-1列變換后的值,進(jìn)行異或運(yùn)算

圖片圖片

如上圖的計(jì)算過程,最終計(jì)算得到第4列的密鑰為:9C A5 3F AA

S-box的映射過程舉例:

圖片圖片

異或的計(jì)算過程:

圖片圖片

2.3 計(jì)算非4的倍數(shù)列

再來看不是4的倍數(shù)列的擴(kuò)展密鑰如何結(jié)算,例如第5列(輪密鑰2的第2列),計(jì)算過程為:

  • i-4列的值(第1列)與i-1(第4列),進(jìn)行異或運(yùn)算即可

圖片圖片

2.4 最終結(jié)果

按照上述方式,通過種子密鑰,依次計(jì)算出擴(kuò)展密鑰的第4~43列,也就得到了輪密鑰1~輪密鑰10,后面在多輪加密時(shí),會(huì)分別用到對(duì)應(yīng)輪的密鑰。

圖片圖片

3 加密過程解析

AES-128有10輪加密,其過程可以歸類為:

  • 初始變換

執(zhí)行輪密鑰加(種子密鑰加)

  • 9輪循環(huán)運(yùn)算,每一輪的步驟相同,密鑰不同

      字節(jié)代換

      行移位

      列混淆

      輪密鑰加

  • 1輪最終輪

      字節(jié)代換

      行移位

      輪密鑰加

圖片圖片

3.1 初始變換

初始變換其實(shí)就是執(zhí)行輪密鑰加,準(zhǔn)確的說是種子密鑰加,因?yàn)槌跏甲儞Q使用的是種子密鑰。

具體的變換過程,就是數(shù)據(jù)矩陣和種子密鑰矩陣的對(duì)應(yīng)位置的數(shù)據(jù)進(jìn)行異或操作。

圖片

初始變換舉例:

圖片圖片

3.2 9輪循環(huán)運(yùn)算

9輪循環(huán)中,每輪循環(huán)依次執(zhí)行如下步驟:

  • 字節(jié)代換
  • 行移位
  • 列混淆
  • 輪密鑰加(依次使用密鑰是前面計(jì)算出的輪密鑰1~輪密鑰9

3.2.1 字節(jié)代換與行移位

字節(jié)代換,其實(shí)就是S-box表映射,前面在計(jì)算擴(kuò)展密鑰時(shí)就使用過,這里就是要對(duì)4x4矩陣中的每一個(gè)數(shù)據(jù)都進(jìn)行S-box的映射替換。

行移位,其過程可理解為:

  • 第1行數(shù)據(jù)不動(dòng)
  • 第2行左移1位,然后左邊多出的1位數(shù)據(jù)再移動(dòng)到右邊
  • 第3行左移2位,然后左邊多出的2位數(shù)據(jù)再移動(dòng)到右邊
  • 第4行左移3位,然后左邊多出的3位數(shù)據(jù)再移動(dòng)到右邊

具體過程可參考下圖:

圖片圖片

3.2.2 列混淆

列混淆,是對(duì)4x4的數(shù)據(jù)再左乘一個(gè)列混淆的固定矩形。

列混淆的過程,和矩陣乘積運(yùn)算是類似的,都是行列的數(shù)據(jù)先相乘再相加,不同點(diǎn)是:

  • 相乘的運(yùn)算,是有限域(2的8次方內(nèi))的相乘
  • 相加的運(yùn)算,替換為二進(jìn)制的異或運(yùn)算

圖片圖片

有限域的相乘運(yùn)算的具體過程如下:

  • 先轉(zhuǎn)換為2進(jìn)制進(jìn)行計(jì)算
  • AES的列混淆,與加密數(shù)據(jù)相乘的數(shù)據(jù)只有1、2、3這3種情況

與1相乘,不變

與2相乘,如果數(shù)據(jù)最高位是0,乘2就是左移一位,仍在有限域內(nèi);如果最高位是1,左移1位后會(huì)溢出,需要再與0x1B(AES中規(guī)定的不可約多項(xiàng)式的16進(jìn)制表示)異或

與3相乘,先將3拆為1與2的異或,最終轉(zhuǎn)換為先與2相乘,再與自身異或

圖片圖片

示例,這里對(duì)矩陣的第1行第1列,和第4行第2列進(jìn)行手動(dòng)計(jì)算,分別得到了AF和AB

圖片圖片

3.2.3 輪密鑰加

在前面的初始變換中已解釋過了輪密鑰加,區(qū)別是:

  • 初始變換中,使用的種子密鑰
  • 9輪循環(huán)中,使用的對(duì)應(yīng)輪的輪密鑰

輪密鑰加的過程,是數(shù)據(jù)矩陣和密鑰矩陣進(jìn)行異或的過程

圖片圖片

3.3 最終輪

最終輪中,執(zhí)行如下步驟:

  • 字節(jié)代換
  • 行移位
  • 輪密鑰加(使用輪密鑰10

注意最終輪和前面9輪的區(qū)別是,沒有了列混淆的步驟。

圖片圖片

因此,“coder-love-study”數(shù)據(jù),使用自定義的密鑰,進(jìn)行AES的10輪加密后,最終加密的就是上圖的結(jié)果。

4 總結(jié)

本篇介紹了AES加密的原理,通過一個(gè)具體的字符串和自定義密鑰,演示了AES加密的全過程,包括密鑰的擴(kuò)展過程,每輪加密的數(shù)據(jù)變換過程等,最終得到加密的結(jié)果。

責(zé)任編輯:武曉燕 來源: 碼農(nóng)愛學(xué)習(xí)
相關(guān)推薦

2014-04-10 18:52:22

2022-06-05 23:30:25

AES加密算法

2023-05-12 15:03:42

安全云平臺(tái)加密

2023-08-02 07:27:53

2024-08-26 08:34:47

AES加密算法

2019-08-27 15:29:11

2010-07-22 16:33:08

2024-08-13 09:39:13

2023-10-27 07:20:11

2012-10-24 16:34:46

2012-03-13 08:56:39

2014-06-13 14:27:46

2015-05-25 11:10:49

2011-08-18 12:12:29

2023-03-27 10:00:15

2021-12-17 07:47:38

漏洞密鑰Shiro

2019-09-23 12:16:02

通信安全加密哈希

2015-03-26 11:25:10

對(duì)稱加密加密壓縮加密解密解壓

2009-06-11 10:43:18

Netbeans插件

2010-07-15 12:38:14

SQL Server存
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)