首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

用新的高級加密標準(AES)保護資料安全(三):ShiftRows、MixColumns 列混淆與 GF(2^8) 有限域數學基礎

     編輯:關於C語言

ShiftRows:狀態矩陣行位移

ShiftRows 操作示意

  • Row 0:左移 0 位
  • Row 1:左移 1 位
  • Row 2:左移 2 位
  • Row 3:左移 3 位

MixColumns:最具技術深度的步驟

對狀態矩陣每欄進行 GF(2^8) 線性組合:

State[0,1] = (State[0,1]*0x01) + (State[1,1]*0x02) + (State[2,1]*0x03) + (State[3,1]*0x01)
例:0x09*0x01 + 0x60*0x02 + 0xE1*0x03 + 0x04*0x01 = 0x57

此處 + 為 XOR,* 為 GF(2^8) 乘法,非整數運算。

加密主迴圈結構

四步驟 SubBytes → ShiftRows → MixColumns → AddRoundKey 迴圈執行 Nr-1 次(例 192-bit 金鑰 Nr=12,迴圈 11 次)。最後一輪略過 MixColumns,執行 SubBytes → ShiftRows → AddRoundKey 結束。

GF(2^8) 有限域數學

  • 元素集合:{0x00 ... 0xFF}(256 個值)。
  • 加法 = XOR:a + b = a ^ b,結果仍在域內。
  • 乘法:以 0x02 乘法為基礎:
    • b < 0x80:左移 1 位(b << 1)
    • b >= 0x80:左移 1 位後 XOR 0x1B(模多項式 x^8 + x^4 + x^3 + x + 1)
  • 任意常數乘法分解為 2 的冪次和:
    • 0x03 = 0x02 + 0x01 → (b*0x02) ^ b
    • 0x0D = 0x08 + 0x04 + 0x01 → ((b*0x02*0x02*0x02) ^ (b*0x02*0x02) ^ b)
    • 解密係數:0x09, 0x0B, 0x0D, 0x0E 同理分解。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved