iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0
Security

資安小白的密碼學從0到1-CryptoHack平台解題紀錄系列 第 29

【Day 28】對稱式密碼 - AES + 5大Mode 筆記

  • 分享至 

  • xImage
  •  

前言

今天就把之前提到AES跟mode整理一下

AES

https://ithelp.ithome.com.tw/upload/images/20231008/20162613bRnvHL7Y2t.png

個別解釋

  • AddRoundKey

    • 將當前狀態(state)的值跟roundkey做xor
    • https://ithelp.ithome.com.tw/upload/images/20230929/20162613mElDlAa1BS.png

    b[2][2] = a[2][2] ^ k[2][2]

  • subBytes

    • 目的為混淆
    • 將當前狀態(state)的值跟s_box對應位置做替換
    • https://ithelp.ithome.com.tw/upload/images/20230929/20162613WLE8569wOX.png

    new_state = s_box[state[2][2]]

  • shiftRows

    • 將每個列向左移位
      • 第一行向左位移0
      • 第二行向左位移1
      • 第三行向左位移2
      • 第四行向左位移3
    • https://ithelp.ithome.com.tw/upload/images/20230929/20162613jlBbTVfkL6.png
  • Mixcolumns

    • 把一個column中的4個元素當作1,x,x^2,x^3的係數,在和3x^3+x^2+x+2在mod x^4+1下做相乘
    • https://ithelp.ithome.com.tw/upload/images/20230929/20162613B3WvHcFslR.png

    詳細的可以參考"AES進階加密"這篇

  • 總結
    https://ithelp.ithome.com.tw/upload/images/20231008/20162613vpJv5JhESi.png

一開始先
AddRoundKey
進入Round 1
SubBytes -> ShiftRows -> MixColums -> AddRoundKey

到最後一回合的時候變成
SubBytes -> ShiftRows -> AddRoundKey

省略MixColums

文章 :

AES - mode

  • 用途
    • 因字串太長,需要分成一個一個block處理

plaintext = 明文, ciphertext = 密文, block = 16bytes

  • 5大
    • ECB
    • CBC
    • CFB
    • OFB
    • CTR

ECB

  • ECB encrypt
    https://ithelp.ithome.com.tw/upload/images/20231003/20162613RffBTfg5Kn.png

把plaintext切成一個個block,之後丟到AES,最後得到ciphertext

文章 :

CBC

  • CBC encrypt

把加密後命名為plaintext""_xor

https://ithelp.ithome.com.tw/upload/images/20231005/20162613KdVohCyGyw.png

流程
一樣會先把plaintext切成一個個block

在此切為plaintext1、plaintext2、plaintext3
之後會生成一個初始向量iv

  • 第一組
    把plaintext1跟iv做xor,之後進行AES,得到ciphertext1
  • 第二組
    plaintext2跟plaintext1_xor,做xor,之後進行AES,得到ciphertext2
  • 第三組
    plaintext3跟plaintext2_xor,做xor,之後進行AES,得到ciphertext3

每個明文塊先與前一個密文塊進行互斥或後,再進行AES

文章 :

CFB

  • CFB encrypt

把加密後命名為Plaintext""_xor
https://ithelp.ithome.com.tw/upload/images/20231008/20162613DhS0V23mUD.png

流程
IV先丟進AES

  • 第一組
    之後跟Plaintext1做xor得到ciphertext1
  • 第二組
    Plaintext1_xor進AES,之後跟Plaintext2做xor得到ciphertext2
  • 第三組
    Plaintext2_xor進AES,之後跟Plaintext3做xor得到ciphertext3

前一個密文塊先進行AES,之後再跟每個明文塊xor

OFB

  • OFB encrypt
    https://ithelp.ithome.com.tw/upload/images/20231006/20162613vO6hruPMvX.png

流程
把plaintext(明文)切成一個個block
第一輪
由iv經AES後跟第一段plaintext做xor
之後得到第一段ciphertext(密文)
第二輪
iv再經過一次AES,之後跟第二段plaintext做xor得到第二段ciphertext
第三輪同第二輪

最後拚再一起即可獲得完整的ciphertext

文章 :

CTR

  • CTR encrypt
    https://ithelp.ithome.com.tw/upload/images/20231008/20162613Ht4PrrKOfb.png

我們把最上面(Nonce那邊)稱為keystream

流程
keystream進AES
之後跟第一段plaintext xor
得到第一段ciphertext
接下來把keystream + 1
之後就以此類推

文章 :

小結

今天就大概整理了之前學到的觀念,明天可能就會進入非對稱式加密( •̀ ω •́ )✧


上一篇
【Day 27】Symmetric CryptoGraphy09 - Bean Counter
下一篇
【Day 29】Publick-Key CryptoGraphy01-RSA基礎-模運算
系列文
資安小白的密碼學從0到1-CryptoHack平台解題紀錄31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言