AES (Advanced Encryption Standard)

KhΓ‘i niệm

AES (Advanced Encryption Standard) lΓ  mα»™t thuαΊ­t toΓ‘n mΓ£ hΓ³a Δ‘α»‘i xα»©ng được sα»­ dα»₯ng để bαΊ£o vệ dα»― liệu trong cΓ‘c hệ thα»‘ng mΓ‘y tΓ­nh vΓ  mαΊ‘ng. AES lΓ  mα»™t chuαΊ©n mΓ£ hΓ³a được cΓ΄ng bα»‘ bởi Viện TiΓͺu chuαΊ©n vΓ  CΓ΄ng nghệ Quα»‘c gia Hoa Kα»³ (NIST) vΓ o nΔƒm 2001, thay thαΊΏ cho chuαΊ©n mΓ£ hΓ³a DES (Data Encryption Standard) cΕ©.

ThuαΊ­t toΓ‘n AES sα»­ dα»₯ng cΓΉng mα»™t khΓ³a cho việc mΓ£ hΓ³a vΓ  giαΊ£i mΓ£ dα»― liệu, lΓ  mα»™t dαΊ‘ng mΓ£ hΓ³a Δ‘α»‘i xα»©ng. AES hoαΊ‘t Δ‘α»™ng trΓͺn cΓ‘c khα»‘i dα»― liệu cΓ³ kΓ­ch thΖ°α»›c cα»‘ Δ‘α»‹nh (128 bit) vΓ  cΓ³ thể sα»­ dα»₯ng cΓ‘c khΓ³a vα»›i Δ‘α»™ dΓ i khΓ‘c nhau (128, 192 hoαΊ·c 256 bit) để tΔƒng cường tΓ­nh bαΊ£o mαΊ­t.

Đặc Δ‘iểm

CΓ³ ba Δ‘α»™ dΓ i cα»§a khΓ³a mΓ£ hΓ³a AES:

  1. Độ dΓ i khΓ³a 128 bit

  2. Độ dΓ i khΓ³a 192 bit

  3. Độ dΓ i khΓ³a 256 bit

MαΊ·c dΓΉ Δ‘α»™ dΓ i khΓ³a cα»§a phΖ°Ζ‘ng phΓ‘p mΓ£ hΓ³a nΓ y khΓ‘c nhau, kΓ­ch thΖ°α»›c khα»‘i cα»§a nΓ³ - 128 bit (hoαΊ·c 16 byte) - vαΊ«n cα»‘ Δ‘α»‹nh.

AES sα»­ dα»₯ng cαΊ₯u trΓΊc block cipher, cΓ³ nghΔ©a lΓ  nΓ³ mΓ£ hΓ³a dα»― liệu theo cΓ‘c khα»‘i cα»‘ Δ‘α»‹nh cΓ³ kΓ­ch thΖ°α»›c 128 bit.

AES sα»­ dα»₯ng cΓ‘c vΓ²ng lαΊ·p mΓ£ hΓ³a, mα»—i vΓ²ng lαΊ·p được thα»±c hiện trΓͺn mα»™t khα»‘i 128 bit cα»§a dα»― liệu.

AES lΓ  mα»™t thuαΊ­t toΓ‘n mΓ£ hΓ³a Δ‘α»‘i xα»©ng, cΓ³ nghΔ©a lΓ  nΓ³ sα»­ dα»₯ng cΓΉng mα»™t khΓ³a để mΓ£ hΓ³a vΓ  giαΊ£i mΓ£ dα»― liệu

VΓ²ng lαΊ·p chΓ­nh cα»§a AES thα»±c hiện cΓ‘c hΓ m:

  1. SubBytes

  2. ShiftRows

  3. MixColumns

  4. AddRoundKey

XΓ’y dα»±ng bαΊ£ng S-box

BαΊ£ng S-box thuαΊ­n được sinh ra bαΊ±ng việc xΓ‘c Δ‘α»‹nh nghα»‹ch Δ‘αΊ£o cho mọt giΓ‘ trα»‹ nhαΊ₯t Δ‘α»‹nh trΓͺn trường

GF(28)=GF(2)[x]/(x8+x4+x3+x+1)GF(2^8) = GF(2)[x]/(x^8+x^4+x^3+x+1)

Nhα»―ng nghα»‹ch Δ‘αΊ£o được chuyển Δ‘Γ΄i thΓ΄ng qua phΓ©p biαΊΏn Δ‘α»•i affine.

S-box nghα»‹ch Δ‘αΊ£o chỉ Δ‘Ζ‘n giαΊ£n lΓ  S-box chαΊ‘y ngược. NΓ³ được tΓ­nh bαΊ±ng phΓ©p biαΊΏn Δ‘α»•i affine nghα»‹ch Δ‘αΊ£o cΓ‘c giΓ‘ trα»‹ Δ‘αΊ§u vΓ o. PhΓ©p biαΊΏn Δ‘α»•i affine nghα»‹ch Δ‘αΊ£o được biểu diα»…n nhΖ° sau:

ThuαΊ­t toΓ‘n sinh khΓ³a

QuÑ trình sinh khóa gồm 4 bước:

  1. Rotword : quay trΓ‘i 8 bit

  2. SubBytes

  3. Rcon: tΓ­nh giΓ‘ trα»‹ Rcon(i):

Rcon(i)=x(iβˆ’1)mod(x8+x4+x3+x+1)Rcon(i) = x(i-1) mod (x^8+x^4+x^3+x+1)
  1. ShiftRow:

CΖ‘ chαΊΏ hoαΊ‘t Δ‘α»™ng

SubBytes

Tα»«ng phαΊ§n tα»­ cα»§a ma trαΊ­n state được thay thαΊΏ bαΊ±ng giΓ‘ trα»‹ tra cα»©u trong bαΊ£ng S-BOX

ShiftRows

CΓ‘c hΓ ng cα»§a ma trαΊ­n state được dα»‹ch chuyển theo chu kα»³.

HΓ ng Δ‘αΊ§u tiΓͺn giα»― nguyΓͺn

HΓ ng thα»© hai dα»‹ch trΓ‘i 1 byte

HΓ ng thα»© ba dα»‹ch trΓ‘i 2 byte

HΓ ng cuα»‘i cΓΉng dα»‹ch trΓ‘i 3 byte

MixColumns

PhΓ©p biαΊΏn Δ‘α»•i MixColumns thα»±c hiện biαΊΏn Δ‘α»•i Δ‘α»™c lαΊ­p tα»«ng cα»™t trong ma trαΊ­n state bαΊ±ng mα»™t phΓ©p nhΓ’n Δ‘a thα»©c. Mα»—i cα»™t cα»§a state Δ‘Ζ°Ζ‘c coi lΓ  biểu diα»…n cα»§a mα»™t Δ‘a thα»©c f(x) trong GF(2^8) nhΖ° vαΊ­y phΓ©p biαΊΏn Δ‘α»•i MixColumns chΓ­nh lΓ  phΓ©p nhΓ’n theo modulo vα»›i x^4+1 vα»›i mα»™t Δ‘a thα»©c cα»‘ Δ‘α»‹nh Δ‘α»‹nh nghΔ©a nhΖ° sau

c(x)Β =Β 3x3Β +Β x2Β +Β xΒ +Β 2Β (moduloΒ x4Β +Β 1Β )c(x) \ = \ 3x^{3} \ + \ x^{2} \ + \ x \ + \ 2 \ (modulo \ x^{4} \ + \ 1 \ )

PhΓ©p nhΓ’n Δ‘a thα»©c trΓͺn cΓ³ thể biểu diα»…n dΖ°α»›i dαΊ‘ng phΓ©p nhΓ’n ma trαΊ­n nhΖ° sau

Rijndael MixColumnsarrow-up-right

VΓ­ dα»₯ về phΓ©p MixColumns

AddRoundKey

Trong thao tΓ‘c AddRoundKey, 128 bit cα»§a ma trαΊ­n state sαΊ½ được XOR vα»›i 128 bit cα»§a khΓ³a con cα»§a tα»«ng vΓ²ng. VΓ¬ sα»­ dα»₯ng phΓ©p XOR nΓͺn phΓ©p biαΊΏn Δ‘α»•i ngược cα»§a AddRoundKey trong cαΊ₯u trΓΊc giαΊ£i mΓ£ cΕ©ng chΓ­nh lΓ  AddRoundKey. Việc kαΊΏt hợp vα»›i khΓ³a bΓ­ mαΊ­t tαΊ‘o ra tΓ­nh lΓ m rα»‘i (confusion) cα»§a mΓ£ hΓ³a. Sα»± phα»©c tαΊ‘p cα»§a thao tΓ‘c mở rα»™ng khΓ³a (KeySchedule) giΓΊp gia tΔƒng tΓ­nh lΓ m rα»‘i nΓ y

TΓ³m tαΊ―t hoαΊ‘t Δ‘α»™ng

1.Key expansion

ThuαΊ­t toΓ‘n AES lαΊ₯y khΓ³a mΓ£ hΓ³a vΓ  mở rα»™ng nΓ³ thΓ nh mα»™t tαΊ­p hợp cΓ‘c round key, mα»™t khΓ³a cho mα»—i vΓ²ng cα»§a quy trΓ¬nh mΓ£ hΓ³a.

2.Initial round

ThuαΊ­t toΓ‘n thα»±c hiện mα»™t vΓ²ng thao tΓ‘c Δ‘αΊ§u tiΓͺn theo thα»© tα»± bao gα»“m

  1. AddRoundKey: round key Δ‘αΊ§u tiΓͺn được XOR vα»›i plaintext(bαΊ£n rΓ΅).

  2. Thα»±c hiện 1 vΓ²ng Δ‘αΊ§u tiΓͺn gα»“m:SubBytes, ShiftRows, MixColumns, AddRound Key

3. Round

Thα»±c hiện mα»™t vΓ²ng lαΊ·p, phα»₯ thuα»‘c vΓ o kΓ­ch thΖ°α»›c khΓ³a

  1. AES-128 - 10 vΓ²ng lαΊ·p

  2. AES-192 - 12 vΓ²ng lαΊ·p

  3. AES-256 - 14 vΓ²ng lαΊ·p

Tα»« vΓ²ng 1 Δ‘αΊΏn vΓ²ng N - 1 thα»±c hiΓͺn

  1. SubBytess

  2. ShiftRows

  3. MixColumns

  4. AddRoundKey

Ở vΓ²ng cuα»‘i cΓΉng thΓ¬ khΓ΄ng cΓ³ bΖ°α»›c MixColums

  1. SubBytess

  2. ShiftRows

  3. AddRoundKey

4. Output

Bản mã 128/192/256-bit kết quả là đầu ra của quÑ trình mã hóa.

KαΊΏt luαΊ­n

AES lΓ  mα»™t trong nhα»―ng thuαΊ­t toΓ‘n mΓ£ hΓ³a Δ‘α»‘i xα»©ng phα»• biαΊΏn nhαΊ₯t hiện nay. NΓ³ cΓ³ nhiều Ζ°u Δ‘iểm, bao gα»“m tΓ­nh bαΊ£o mαΊ­t cao, tα»‘c Δ‘α»™ xα»­ lΓ½ nhanh, khαΊ£ nΔƒng sα»­ dα»₯ng trΓͺn nhiều nền tαΊ£ng vΓ  hα»— trợ cho cΓ‘c khΓ³a cΓ³ Δ‘α»™ dΓ i lΓͺn Δ‘αΊΏn 256 bit. Tuy nhiΓͺn, nhược Δ‘iểm cα»§a AES lΓ  nΓ³ cΓ³ thể bα»‹ tαΊ₯n cΓ΄ng bαΊ±ng cΓ‘c phΖ°Ζ‘ng phΓ‘p nhΖ° tαΊ₯n cΓ΄ng dα»±a trΓͺn khΓ³a vΓ  tαΊ₯n cΓ΄ng bαΊ±ng phΖ°Ζ‘ng phΓ‘p phΓ’n tΓ­ch dα»― liệu. Để Δ‘αΊ£m bαΊ£o an toΓ n cho hệ thα»‘ng mΓ£ hΓ³a, cΓ‘c chuyΓͺn gia bαΊ£o mαΊ­t khuyΓͺn nΓͺn sα»­ dα»₯ng cΓ‘c phiΓͺn bαΊ£n AES mα»›i nhαΊ₯t vΓ  sα»­ dα»₯ng cΓ‘c phΖ°Ζ‘ng phΓ‘p mΓ£ hΓ³a hiện Δ‘αΊ‘i nhαΊ₯t để tΔƒng cường tΓ­nh bαΊ£o mαΊ­t.

ThiαΊΏt kαΊΏ vΓ  Δ‘α»™ dΓ i khΓ³a cα»§a thuαΊ­t toΓ‘n AES ( 128, 192 vΓ  256 bit ) lΓ  Δ‘α»§ an toΓ n để bαΊ£o vệ cΓ‘c thΓ΄ng tin được xαΊΏp vΓ o loαΊ‘i tα»‘i mαΊ­t nhΖ°ng về an ninh cα»§a AES thΓ¬ cΓ‘c nhΓ  khoa học Δ‘Γ‘nh giΓ‘ lΓ  chΖ°a cao. NαΊΏu cΓ‘c kα»Ή thuαΊ­t tαΊ₯n cΓ΄ng được cαΊ£i thiện thΓ¬ AES cΓ³ thể bα»‹ phΓ‘ vα»‘.

Mα»™t vαΊ₯n đề khΓ‘c nα»―a lΓ  cαΊ₯u trΓΊc toΓ‘n học cα»§a AES khΓ‘ Δ‘Ζ‘n giαΊ£n

Block cipher modes of Operation

ECB (Electronic codebook)

AES ECB (Advanced Encryption Standard Electronic Codebook) lΓ  mα»™t chαΊΏ Δ‘α»™ hoαΊ‘t Δ‘α»™ng cα»§a thuαΊ­t toΓ‘n mΓ£ hΓ³a AES (Advanced Encryption Standard). ĐÒy lΓ  chαΊΏ Δ‘α»™ Δ‘Ζ‘n giαΊ£n nhαΊ₯t vΓ  dα»… hiểu nhαΊ₯t trong cΓ‘c chαΊΏ Δ‘α»™ mΓ£ hΓ³a cα»§a AES.

MΓ£ hΓ³a ECB

Plaintext lΓ  Δ‘αΊ§u vΓ o trα»±c tiαΊΏp để thα»±c thi thuαΊ­t toΓ‘n mΓ£ hΓ³a vα»›i khΓ³a mΓ£ K để tαΊ‘o ra ciphertext.

GiαΊ£i mΓ£ ECB

Ciphertext lΓ  Δ‘αΊ§u vΓ o trα»±c tiαΊΏp để thα»±c thi thuαΊ­t toΓ‘n giαΊ£i mΓ£ vα»›i khΓ³a mΓ£ K để tαΊ‘o ra plaintext.

Ζ―u Δ‘iểm cα»§a ECB:

  1. ECB lΓ  mα»™t trong nhα»―ng chαΊΏ Δ‘α»™ mΓ£ hΓ³a Δ‘Ζ‘n giαΊ£n nhαΊ₯t để hiện thα»±c. QuΓ‘ trΓ¬nh mΓ£ hΓ³a vΓ  giαΊ£i mΓ£ Δ‘Ζ‘n giαΊ£n, chỉ Δ‘Ζ‘n giαΊ£n lΓ  Γ‘p dα»₯ng thuαΊ­t toΓ‘n mΓ£ hΓ³a lΓͺn tα»«ng khα»‘i dα»― liệu.

  2. Dα»… dΓ ng xα»­ lΓ½ song song: VΓ¬ mα»—i khα»‘i dα»― liệu được mΓ£ hΓ³a Δ‘α»™c lαΊ­p, việc xα»­ lΓ½ song song trΓͺn cΓ‘c khα»‘i cΓ³ thể được thα»±c hiện dα»… dΓ ng. Điều nΓ y cΓ³ thể Δ‘em lαΊ‘i tα»‘c Δ‘α»™ mΓ£ hΓ³a vΓ  giαΊ£i mΓ£ nhanh hΖ‘n trong mα»™t sα»‘ trường hợp.

Nhược Δ‘iểm cα»§a ECB:

  1. ThiαΊΏu bαΊ£o mαΊ­t: ECB khΓ΄ng cung cαΊ₯p tΓ­nh bαΊ£o mαΊ­t cao.

  2. KhΓ΄ng Δ‘αΊ£m bαΊ£o tΓ­nh toΓ n vαΊΉn

  3. KhΓ΄ng hα»— trợ xα»­ lΓ½ dα»― liệu lα»›n

Dưới đÒy là mô hình mã hóa và giải mã AES-ECB:

CBC (Cipher block chaining)

AES CBC (Advanced Encryption Standard Cipher Block Chaining) lΓ  mα»™t chαΊΏ Δ‘α»™ hoαΊ‘t Δ‘α»™ng cα»§a thuαΊ­t toΓ‘n mΓ£ hΓ³a AES (Advanced Encryption Standard). ĐÒy lΓ  mα»™t trong nhα»―ng chαΊΏ Δ‘α»™ mΓ£ hΓ³a phα»• biαΊΏn vΓ  được sα»­ dα»₯ng rα»™ng rΓ£i trong cΓ‘c hệ thα»‘ng bαΊ£o mαΊ­t. LΓ  chαΊΏ Δ‘α»™ mΓ£ hΓ³a chuα»—i, kαΊΏt quαΊ£ mΓ£ hΓ³a cα»§a khα»‘i dα»― liệu trΖ°α»›c (ciphertext) sαΊ½ được tα»• hợp vα»›i khα»‘i dα»― liệu kαΊΏ tiαΊΏp (plaintext) trΖ°α»›c khi thα»±c thi mΓ£ hΓ³a.

MΓ£ hΓ³a CBC

Ci=EK(PiβŠ•Ciβˆ’1)C_i = E_K(P_i βŠ• C_{i-1})

C0=IVC_0 = IV

LαΊ§n mΓ£ hΓ³a Δ‘αΊ§u tiΓͺn:

  1. Plaintext XOR vα»›i vector khởi tαΊ‘o IV

  2. KαΊΏt quαΊ£ bΖ°α»›c trΓͺn lΓ  Δ‘αΊ§u vΓ o cho việc thα»±c thi thuαΊ­t toΓ‘n mΓ£ hΓ³a vα»›i khΓ³a mΓ£ K

LαΊ§n mΓ£ hΓ³a sau lαΊ§n Δ‘αΊ§u tiΓͺn:

  1. Plaintext XOR vα»›i ciphertext cα»§a lαΊ§n mΓ£ hΓ³a trΖ°α»›c Δ‘Γ³.

  2. KαΊΏt quαΊ£ bΖ°α»›c trΓͺn lΓ  Δ‘αΊ§u vΓ o cho việc thα»±c thi thuαΊ­t toΓ‘n mΓ£ hΓ³a vα»›i khΓ³a mΓ£ K

GiαΊ£i mΓ£ CBC

Pi=DK(Ci)βŠ•Ciβˆ’1P_i = D_K(C_i)βŠ•C_{i-1}

C0=IVC_0 = IV

LαΊ§n giαΊ£i mΓ£ Δ‘αΊ§u tiΓͺn:

  1. Ciphertext được thα»±c thi quΓ‘ trΓ¬nh giαΊ£i mΓ£ vα»›i khΓ³a mΓ£ K

  2. KαΊΏt quαΊ£ bΖ°α»›c trΓͺn được XOR vα»›i vector khởi tαΊ‘o IV để tαΊ‘o ra plaintext

LαΊ§n giαΊ£i mΓ£ sau lαΊ§n Δ‘αΊ§u tiΓͺn:

  1. Ciphertext được thα»±c thi quΓ‘ trΓ¬nh giαΊ£i mΓ£ vα»›i khΓ³a mΓ£ K

  2. KαΊΏt quαΊ£ bΖ°α»›c trΓͺn được XOR vα»›i ciphertext sα»­ dα»₯ng trong lαΊ§n giαΊ£i mΓ£ trΖ°α»›c để tαΊ‘o ra plaintext

Ζ―u Δ‘iểm cα»§a CBC:

  1. Khả năng bảo mật cao hƑn ECB.

  2. QuΓ‘ trΓ¬nh giαΊ£i mΓ£ (mΓ£ hΓ³a nghα»‹ch) vαΊ«n cΓ³ thể thα»±c hiện song song nhiều khα»‘i dα»― liệu.

Nhược Δ‘iểm:

  1. ThiαΊΏt kαΊΏ phαΊ§n cα»©ng phα»©c tαΊ‘p hΖ‘n ECB

  2. Lα»—i bit bα»‹ lan truyền. NαΊΏu mα»™t lα»—i bit xuαΊ₯t hiện trΓͺn ciphertext cα»§a mα»™t khα»‘i dα»― liệu thΓ¬ nΓ³ sαΊ½ lΓ m sai kαΊΏt quαΊ£ giαΊ£i mΓ£ cα»§a khα»‘i Δ‘α»― liệu Δ‘Γ³ vΓ  khα»‘i dα»― liệu tiαΊΏp theo.

  3. KhΓ΄ng thể thα»±c thi quΓ‘ trΓ¬nh mΓ£ hΓ³a song song vΓ¬ xα»­ lΓ½ cα»§a khα»‘i dα»― liệu sau phα»₯ thuα»™c vΓ o ciphertext cα»§a khα»‘i dα»― liệu trΖ°α»›c, trα»« lαΊ§n mΓ£ hΓ³a Δ‘αΊ§u tiΓͺn.

Dưới đÒy là mô hình mã hóa và giải mã AES-CBC

PCBC (Propagating Cipher block chaining)

AES PCBC (Advanced Encryption Standard Propagating Cipher Block Chaining) lΓ  mα»™t chαΊΏ Δ‘α»™ hoαΊ‘t Δ‘α»™ng khΓ‘c cα»§a thuαΊ­t toΓ‘n mΓ£ hΓ³a AES (Advanced Encryption Standard). PCBC lΓ  mα»™t biαΊΏn thể cα»§a chαΊΏ Δ‘α»™ CBC vΓ  thΓͺm vΓ o mα»™t bΖ°α»›c thay Δ‘α»•i (propagation) để tΔƒng tΓ­nh ngαΊ«u nhiΓͺn vΓ  Δ‘αΊ£m bαΊ£o tΓ­nh toΓ n vαΊΉn cα»§a dα»― liệu.

MΓ£ hΓ³a PCBC

Ci=EK(PiβŠ•Piβˆ’1βŠ•Ciβˆ’1,),Β P0βŠ•C0=IVC_i = E_K(P_iβŠ•P_{i-1}βŠ•C_{i-1}, ), \ P_0 βŠ• C_0 = IV

GiαΊ£i mΓ£ PCBC

Pi=DK(Ci)βŠ•Piβˆ’1βŠ•Ciβˆ’1,Β P0βŠ•C0=IVP_i = D_K(C_i)βŠ•P_{i-1}βŠ•C_{i-1}, \ P_0 βŠ• C_0 = IV

Dưới đÒy là mô hình mã hóa và giải mã AES-PCBC

CFB (Cipher feedback)

AES CFB (Advanced Encryption Standard Cipher Feedback) lΓ  mα»™t chαΊΏ Δ‘α»™ hoαΊ‘t Δ‘α»™ng cα»§a thuαΊ­t toΓ‘n mΓ£ hΓ³a AES (Advanced Encryption Standard). ĐÒy lΓ  chαΊΏ Δ‘α»™ mΓ£ hΓ³a mΓ  ciphertext cα»§a lαΊ§n mΓ£ hΓ³a hiện tαΊ‘i sαΊ½ được phαΊ£n hα»“i (feedback) Δ‘αΊΏn Δ‘αΊ§u vΓ o cα»§a lαΊ§n mΓ£ hΓ³a tiαΊΏp theo. NghΔ©a lΓ , ciphertext cα»§a lαΊ§n mΓ£ hΓ³a hiện tαΊ‘i sαΊ½ được sα»­ dα»₯ng để tΓ­nh toΓ‘n ciphertext cα»§a lαΊ§n mΓ£ hΓ³a kαΊΏ tiαΊΏp. MΓ΄ tαΊ£ cΓ³ vαΊ» giα»‘ng CBC nhΖ°ng quΓ‘ trΓ¬nh trα»±c hiện lαΊ‘i khΓ‘c.

MΓ£ hΓ³a CFB

Ci={IV,i=0EK(Ciβˆ’1)⨁Pi,otherwiseC_i = \begin{cases} IV, & & & i = 0 \\ E_K(C_i - 1) \bigoplus P_i, & & & otherwise \end{cases}

LαΊ§n mΓ£ hΓ³a Δ‘αΊ§u tiΓͺn:

  1. Khα»‘i dα»― liệu ngΓ΅ vΓ o cα»§a quΓ‘ trΓ¬nh mΓ£ hΓ³a lαΊ₯y tα»« IV.

  2. Vector khởi tαΊ‘o IV được mΓ£ hΓ³a để tαΊ‘o ra mα»™t khα»‘i giΓ‘ trα»‹ chα»©a b bit.

  3. s bit MSB cα»§a kαΊΏt quαΊ£ trΓͺn sαΊ½ được dΓΉng để XOR vα»›i s bit dα»― liệu (plaintext) để tαΊ‘o ra s bit ciphertext.

LαΊ§n mΓ£ hΓ³a sau lαΊ§n Δ‘αΊ§u tiΓͺn:

  1. Khα»‘i dα»― liệu ngΓ΅ vΓ o cα»§a quΓ‘ trΓ¬nh mΓ£ hΓ³a được ghΓ©p giΓ£ b-s bit LSB cα»§a khα»‘i ngΓ΅ vΓ o cα»§a lαΊ§n mΓ£ hΓ³a trΖ°α»›c Δ‘Γ³ vΓ  s bit cα»§a ciphertext cα»§a lαΊ§n mΓ£ hΓ³a trΖ°α»›c Δ‘Γ³.

  2. GiΓ‘ trα»‹ cα»§a bΖ°α»›c trΓͺn được mΓ£ hΓ³a để tαΊ‘o ra mα»™t khα»‘i giΓ‘ trα»‹ chα»©a b bit.

  3. s bit MSB cα»§a kαΊΏt quαΊ£ trΓͺn sαΊ½ được dΓΉng để XOR vα»›i s bit dα»― liệu (plaintext) để tαΊ‘o ra s bit ciphertext.

GiαΊ£i mΓ£ CFB

Pi=EK(Ciβˆ’1)βŠ•CiP_i = {E_K(C_{i-1})βŠ•C_i}

Ζ―u Δ‘iểm

  1. Khả năng bảo mật cao hƑn ECB

  2. QuΓ‘ trΓ¬nh giαΊ£i mΓ£ (mΓ£ hΓ³a nghα»‹ch) vαΊ«n cΓ³ thể thα»±c hiện song song nhiều khα»‘i dα»― liệu.

  3. TΓΉy biαΊΏn được Δ‘α»™ dΓ i khα»‘i dα»― liệu mΓ£ hΓ³a, giαΊ£i mΓ£ thΓ΄ng qua thΓ΄ng sα»‘ s

Nhược Δ‘iểm:

  1. ThiαΊΏt kαΊΏ phαΊ§n cα»©ng phα»©c tαΊ‘p hΖ‘n CBC

  2. Lα»—i bit bα»‹ lan truyền. NαΊΏu mα»™t lα»—i bit xuαΊ₯t hiện trΓͺn ciphertext cα»§a mα»™t khα»‘i dα»― liệu thΓ¬ nΓ³ sαΊ½ lΓ m sai kαΊΏt quαΊ£ giαΊ£i mΓ£ cα»§a khα»‘i Δ‘α»― liệu Δ‘Γ³ vΓ  khα»‘i dα»― liệu tiαΊΏp theo.

  3. KhΓ΄ng thể thα»±c thi quΓ‘ trΓ¬nh mΓ£ hΓ³a song song vΓ¬ xα»­ lΓ½ cα»§a khα»‘i dα»― liệu sau phα»₯ thuα»™c vΓ o ciphertext cα»§a khα»‘i dα»― liệu trΖ°α»›c, trα»« lαΊ§n mΓ£ hΓ³a Δ‘αΊ§u tiΓͺn

Dưới đÒy là mô hình mã hóa và giải mã AES-CFB

OFB (Output feedback)

AES OFB (Advanced Encryption Standard Output Feedback) lΓ  mα»™t chαΊΏ Δ‘α»™ hoαΊ‘t Δ‘α»™ng cα»§a thuαΊ­t toΓ‘n mΓ£ hΓ³a AES (Advanced Encryption Standard). LΓ  mα»™t thuαΊ­t toΓ‘n mΓ£ hΓ³a Δ‘α»‘i xα»©ng được sα»­ dα»₯ng rα»™ng rΓ£i để bαΊ£o vệ thΓ΄ng tin. ĐÒy lΓ  chαΊΏ Δ‘α»™ mΓ£ hΓ³a mΓ  giΓ‘ trα»‹ ngΓ΅ ra cα»§a khα»‘i thα»±c thi thuαΊ­t toΓ‘n mΓ£ hΓ³a, khΓ΄ng phαΊ£i ciphertext, cα»§a lαΊ§n mΓ£ hΓ³a hiện tαΊ‘i sαΊ½ được phαΊ£n hα»“i (feedback) Δ‘αΊΏn ngΓ΅ vΓ o cα»§a lαΊ§n mΓ£ hΓ³a kαΊΏ tiαΊΏp.

Do tΓ­nh Δ‘α»‘i xα»©ng cα»§a xor nΓͺn việc mΓ£ hΓ³a vΓ  giαΊ£i mΓ£ hoΓ n toΓ n giα»‘ng nhau:

Cj=PjβŠ•MJC_j = P_j βŠ• M_J\text{}

Pj=CjβŠ•OjP_j = C_j βŠ• O_j\text{}

Oj=EK(Ij)O_j = E_K(I_j)\text{}

Ij=Ojβˆ’1I_j = O_{j-1}

I0=IVI_0 = IV

MΓ£ hΓ³a OFB

LαΊ§n mΓ£ hΓ³a Δ‘αΊ§u tiΓͺn:

  1. GiΓ‘ trα»‹ IV được lαΊ₯y lΓ m khα»‘i giΓ‘ trα»‹ Δ‘αΊ§u vΓ o mΓ£ hΓ³a.

  2. Thα»±c thi giαΊ£i thuαΊ­t mΓ£ hΓ³a cho khα»‘i trΓͺn vα»›i khΓ³a mΓ£ K.

  3. XOR plaintext vΓ  kαΊΏt quαΊ£ cα»§a bΖ°α»›c trΓͺn.

LαΊ§n mΓ£ hΓ³a sau lαΊ§n Δ‘αΊ§u tiΓͺn vΓ  trΖ°α»›c lαΊ§n cuα»‘i cΓΉng:

  1. GiΓ‘ trα»‹ cα»§a khα»‘i ngΓ΅ ra (output block) trΖ°α»›c Δ‘Γ³ được lαΊ₯y lΓ m khα»‘i giΓ‘ trα»‹ Δ‘αΊ§u vΓ o mΓ£ hΓ³a.

  2. Thα»±c thi giαΊ£i thuαΊ­t mΓ£ hΓ³a cho khα»‘i trΓͺn vα»›i khΓ³a mΓ£ K.

  3. XOR plaintext vΓ  kαΊΏt quαΊ£ cα»§a bΖ°α»›c trΓͺn.

LαΊ§n mΓ£ hΓ³a cuα»‘i cΓΉng:

  1. GiΓ‘ trα»‹ cα»§a khα»‘i ngΓ΅ ra (output block) trΖ°α»›c Δ‘Γ³ được lαΊ₯y lΓ m khα»‘i giΓ‘ trα»‹ Δ‘αΊ§u vΓ o mΓ£ hΓ³.

  2. Thα»±c thi giαΊ£i thuαΊ­t mΓ£ hΓ³a cho khα»‘i trΓͺn vα»›i khΓ³a mΓ£ K.

  3. XOR plaintext vΓ  vα»›i cΓ‘c bit MSB cα»§a kαΊΏt quαΊ£ cα»§a bΖ°α»›c trΓͺn theo Δ‘α»™ dΓ i cα»§a plaintext.

GiαΊ£i mΓ£ OFB

LαΊ§n giαΊ£i mΓ£ Δ‘αΊ§u tiΓͺn:

  1. GiΓ‘ trα»‹ IV được lαΊ₯y lΓ m khα»‘i giΓ‘ trα»‹ Δ‘αΊ§u vΓ o mΓ£ hΓ³a.

  2. Thα»±c thi giαΊ£i thuαΊ­t mΓ£ hΓ³a cho khα»‘i trΓͺn vα»›i khΓ³a mΓ£ K.

  3. XOR ciphertext vΓ  kαΊΏt quαΊ£ cα»§a bΖ°α»›c trΓͺn.

LαΊ§n giαΊ£i mΓ£ sau lαΊ§n Δ‘αΊ§u tiΓͺn vΓ  trΖ°α»›c lαΊ§n cuα»‘i cΓΉng:

  1. GiΓ‘ trα»‹ cα»§a khα»‘i ngΓ΅ ra (output block) trΖ°α»›c Δ‘Γ³ được lαΊ₯y lΓ m khα»‘i giΓ‘ trα»‹ Δ‘αΊ§u vΓ o mΓ£ hΓ³a.

  2. Thα»±c thi giαΊ£i thuαΊ­t mΓ£ hΓ³a cho khα»‘i trΓͺn vα»›i khΓ³a mΓ£ K.

  3. XOR ciphertext vΓ  kαΊΏt quαΊ£ cα»§a bΖ°α»›c trΓͺn.

LαΊ§n giαΊ£i mΓ£ cuα»‘i cΓΉng (thα»© n):

  1. GiΓ‘ trα»‹ cα»§a khα»‘i ngΓ΅ ra (output block) trΖ°α»›c Δ‘Γ³ được lαΊ₯y lΓ m khα»‘i giΓ‘ trα»‹ Δ‘αΊ§u vΓ o mΓ£ hΓ³a.

  2. Thα»±c thi giαΊ£i thuαΊ­t mΓ£ hΓ³a cho khα»‘i trΓͺn vα»›i khΓ³a mΓ£ K.

  3. XOR ciphertext vΓ  vα»›i cΓ‘c bit MSB cα»§a kαΊΏt quαΊ£ cα»§a bΖ°α»›c trΓͺn theo Δ‘α»™ dΓ i cα»§a ciphertext.

Ζ―u Δ‘iểm

  1. KhαΊ£ nΔƒng bαΊ£o mαΊ­t cao hΖ‘n ECB. Ciphertext cα»§a mα»™t khα»‘i dα»― liệu plaintext cΓ³ thể khΓ‘c nhau cho mα»—i lαΊ§n mΓ£ hΓ³a vΓ¬ nΓ³ phα»₯ thuα»™c vΓ o IV hoαΊ·c khα»‘i ngΓ΅ ra cα»§a lαΊ§n mΓ£ hΓ³a trΖ°α»›c Δ‘Γ³.

  2. Lα»—i bit khΓ΄ng bα»‹ lan truyền. Khi mα»™t lα»—i bit xuαΊ₯t hiện trΓͺn mα»™t ciphertext, nΓ³ chỉ αΊ£nh hưởng Δ‘αΊΏn kαΊΏt quαΊ£ giαΊ£i mΓ£ cα»§a khα»‘i dα»― liệu hiện tαΊ‘i

  3. ThiαΊΏt kαΊΏ phαΊ§n cα»©ng Δ‘Ζ‘n giαΊ£n hΖ‘n CFB.

Nhược Δ‘iểm:

  1. KhΓ΄ng thể thα»±c hiện mΓ£ hΓ³a/giαΊ£i mΓ£ song song nhiều khα»‘i dα»― liệu vΓ¬ lαΊ§n mΓ£ hΓ³a/giαΊ£i mΓ£ sau phα»₯ thuα»™c vΓ o khα»‘i ngΓ΅ ra cα»§a lαΊ§n mΓ£ hΓ³a/giαΊ£i mΓ£ liền trΖ°α»›c nΓ³.

Dưới đÒy là mô hình mã hóa và giải mã AES-OFB

CTR (Counter)

AES-CTR (Advanced Encryption Standard - Counter Mode) lΓ  mα»™t chαΊΏ Δ‘α»™ hoαΊ‘t Δ‘α»™ng cα»§a thuαΊ­t toΓ‘n AES (Advanced Encryption Standard) được sα»­ dα»₯ng để mΓ£ hΓ³a thΓ΄ng tin. ĐÒy lΓ  chαΊΏ Δ‘α»™ mΓ£ hΓ³a sα»­ dα»₯ng mα»™t tαΊ­p cΓ‘c khα»‘i ngΓ΅ vΓ o, gọi lΓ  cΓ‘c counter, để sinh ra mα»™t tαΊ­p cΓ‘c giΓ‘ trα»‹ ngΓ΅ ra thΓ΄ng qua mα»™t thuαΊ­t toΓ‘n mΓ£ hΓ³a. Sau Δ‘Γ³, giΓ‘ trα»‹ ngΓ΅ ra sαΊ½ được XOR vα»›i plaintext để tαΊ‘o ra ciphertext trong quΓ‘ trΓ¬nh mΓ£ hΓ³a, hoαΊ·c XOR vα»›i ciphertext để tαΊ‘o ra plaintext trong quΓ‘ trΓ¬nh giαΊ£i mΓ£.

MΓ£ hΓ³a CTR

GiΓ‘ trα»‹ cα»§a khα»‘i ngΓ΅ ra (output block) được tαΊ‘o tα»« giΓ‘ trα»‹ cα»§a khα»‘i bα»™ Δ‘αΊΏm thα»© j bαΊ±ng cΓ‘ch thα»±c thi giαΊ£i thuαΊ­t mΓ£ hΓ³a vα»›i khΓ³a K.

GiΓ‘ trα»‹ trΓͺn được XOR vα»›i plaintext thα»© j để tαΊ‘o ra ciphertext thα»© j.

Đối vα»›i khα»‘i dα»― liệu cuα»‘i cΓΉng cα»§a chuα»—i dα»― liệu, khα»‘i thα»© n, nαΊΏu Δ‘α»™ dΓ i bit cα»§a plaintext Γ­t hΖ‘n Δ‘α»™ dΓ i bit được quy Δ‘α»‹nh bởi chuαΊ©n mΓ£ hΓ³a thΓ¬ chỉ lαΊ₯y cΓ‘c bit trọng sα»‘ cao cα»§a khα»‘i ngΓ΅ ra (output block) XOR vα»›i plaintext.

GiαΊ£i mΓ£ CTR

GiΓ‘ trα»‹ cα»§a khα»‘i ngΓ΅ ra (output block) được tαΊ‘o tα»« giΓ‘ trα»‹ cα»§a khα»‘i bα»™ Δ‘αΊΏm thα»© j bαΊ±ng cΓ‘ch thα»±c thi giαΊ£i thuαΊ­t mΓ£ hΓ³a vα»›i khΓ³a K.

GiΓ‘ trα»‹ trΓͺn được XOR vα»›i ciphertext thα»© j để tαΊ‘o ra plaintext thα»© j.

Đối vα»›i khα»‘i dα»― liệu cuα»‘i cΓΉng cα»§a chuα»—i dα»― liệu, khα»‘i thα»© n, nαΊΏu Δ‘α»™ dΓ i bit cα»§a ciphertext Γ­t hΖ‘n Δ‘α»™ dΓ i bit được quy Δ‘α»‹nh bởi chuαΊ©n mΓ£ hΓ³a thΓ¬ chỉ lαΊ₯y cΓ‘c bit trọng sα»‘ cao cα»§a khα»‘i ngΓ΅ ra (output block) XOR vα»›i ciphertext.

Ζ―u Δ‘iểm:

  1. KhαΊ£ nΔƒng bαΊ£o mαΊ­t cao hΖ‘n ECB. Tuy quΓ‘ trΓ¬nh mΓ£ hΓ³a/giαΊ£i mΓ£ cα»§a mα»—i khα»‘i dα»― liệu lΓ  Δ‘α»™c lαΊ­p nhΖ°ng mα»—i plaintext cΓ³ thể αΊ£nh xαΊ‘ Δ‘αΊΏn nhiều ciphertext tΓΉy vΓ o giΓ‘ trα»‹ bα»™ Δ‘αΊΏm cα»§a cΓ‘c lαΊ§n mΓ£ hΓ³a.

  2. CΓ³ thể mΓ£ hΓ³a/giαΊ£i mΓ£ song song nhiều khα»‘i dα»― liệu.

Nhược Δ‘iểm:

  1. PhαΊ§n cα»©ng cαΊ§n thiαΊΏt kαΊΏ thΓͺm cΓ‘c bα»™ Δ‘αΊΏm counter hoαΊ·c giαΊ£i thuαΊ­t tαΊ‘o cΓ‘c giΓ‘ trα»‹ counter khΓ΄ng lαΊ·p lαΊ‘i.

Dưới đÒy là mô hình mã hóa và giải mã AES-CTR

GCM (Galois/Counter Mode)

AES-GCM (Advanced Encryption Standard - Galois/Counter Mode) lΓ  mα»™t thuαΊ­t toΓ‘n mΓ£ hΓ³a Δ‘α»‘i xα»©ng được sα»­ dα»₯ng để bαΊ£o vệ tΓ­nh toΓ n vαΊΉn vΓ  bαΊ£o mαΊ­t dα»― liệu trong giao tiαΊΏp trα»±c tuyαΊΏn, bao gα»“m cΓ‘c α»©ng dα»₯ng nhΖ° TLS (Transport Layer Security) vΓ  VPN (Virtual Private Network). AES lΓ  thuαΊ­t toΓ‘n mΓ£ hΓ³a Δ‘α»‘i xα»©ng được sα»­ dα»₯ng để mΓ£ hΓ³a dα»― liệu, trong khi GCM lΓ  mα»™t chαΊΏ Δ‘α»™ hoαΊ‘t Δ‘α»™ng (mode of operation) được sα»­ dα»₯ng để bαΊ£o vệ tΓ­nh toΓ n vαΊΉn dα»― liệu vΓ  xΓ‘c thα»±c nguα»“n gα»‘c dα»― liệu

Trong quΓ‘ trΓ¬nh mΓ£ hΓ³a, AES-GCM sα»­ dα»₯ng mα»™t khΓ³a Δ‘α»‘i xα»©ng cΓΉng vα»›i mα»™t nonce (number used once) vΓ  mα»™t bα»™ Δ‘αΊΏm (counter) để tαΊ‘o ra mα»™t bαΊ£n mΓ£ (ciphertext). Sau Δ‘Γ³, GCM sα»­ dα»₯ng mα»™t thα»§ tα»₯c kiểm tra tΓ­nh toΓ n vαΊΉn vΓ  xΓ‘c thα»±c nguα»“n gα»‘c (authentication) để Δ‘αΊ£m bαΊ£o rαΊ±ng dα»― liệu khΓ΄ng bα»‹ thay Δ‘α»•i hoαΊ·c tαΊ₯n cΓ΄ng trung gian trong quΓ‘ trΓ¬nh truyền tαΊ£i.

HΓ m GHASH sα»­ dα»₯ng trong GCM nhαΊ±m cung cαΊ₯p tΓ­nh xΓ‘c thα»±c cho dα»― liệu bαΊ£o mαΊ­t. HΓ m GHASH được xΓ’y dα»±ng bởi cΓ‘c phΓ©p nhΓ’n trong trường GF(2^128) vα»›i khΓ³a con bΔƒm (H) theo cΓ΄ng thα»©c:

βˆ‘j=1nXj.Hnβˆ’j+1=X1.HnβŠ•X2.Hnβˆ’1βŠ•...βŠ•Xn.H\sum^{n}_{j=1} X_j.H^{n-j+1} = X_1.H^n \oplus X_2.H^{n-1} \oplus ... \oplus X_n.H

trong Δ‘Γ³, X1 Γ· Xn lΓ  cΓ‘c khα»‘i Δ‘αΊ§u vΓ o 128-bit.

MαΊ·c dΓΉ việc lα»±a chọn tham sα»‘ q (sα»‘ nhΓ‘nh nhΓ’n-cα»™ng song song) khΓ΄ng bα»‹ giα»›i hαΊ‘n nhΖ°ng để Δ‘αΊ‘t được sα»‘ chu kα»³ Δ‘α»“ng hα»“ lΓ  nhỏ vΓ  thΓ΄ng lượng cao thΓ¬ sα»­ dα»₯ng q = 2^j, 1 < j < log_2(n). Đầu ra hΓ m GHASH(X,H) nhαΊ­n được:

Trong Δ‘Γ³, tαΊ₯t cαΊ£ cΓ‘c toΓ‘n hαΊ‘ng được thα»±c hiện trong trường GF(2128), vα»›i Δ‘a thα»©c :

P(x)Β =Β x128Β +Β x7Β +Β x2Β +Β xΒ +Β 1P(x) \ = \ x^{128} \ + \ x^7 \ + \ x^2 \ + \ x \ + \ 1

Vα»›i thuαΊ­t toΓ‘n hΓ m GHASH nhΖ° ở (2), sα»‘ chu kα»³ Δ‘α»“ng hα»“ cαΊ§n thiαΊΏt để thα»±c hiện sαΊ½ lΓ  $(\frac{n}{q} + log_2(q))$. Đối vα»›i $(\frac{n}{q} - 1)$ chu kα»³ Δ‘αΊ§u, sαΊ½ thα»±c hiện cΓ‘c phΓ©p nhΓ’n $H^q\text{}$ trong trường $GF(2^{128})\text{}$, vα»›i $log_2(q)\text{}$ chu kα»³ tiαΊΏp theo sαΊ½ thα»±c hiện cΓ‘c hΓ m mΕ© khΓ‘c tΖ°Ζ‘ng α»©ng vΓ  chu kα»³ cuα»‘i cΓΉng lΓ  thα»±c hiện XOR cΓ‘c kαΊΏt quαΊ£ $\sum^{n}_{j-1} X_j.H^{n-j+1}$

Theo (2), ta xét cÑc trường hợp:

  1. q = 8 (8 nhΓ‘nh nhΓ’n - cα»™ng song song)

(X1.H8βŠ•X9).H8.1.1βŠ•(X2.H8βŠ•X10).H4.H2.HβŠ•...βŠ•(Xi.H8βŠ•Xi+8).H4a1(i).H2a2i.Ha3(i)βŠ•...βŠ•(X8.H8βŠ•X16).H.1.1(X_1.H^8 \oplus X_9).H^8 . 1 . 1 \oplus (X_2.H^8 \oplus X_{10}).H^4 . H^2 . H \oplus ... \oplus (X_i.H^8 \oplus X_{i+8}).H^{4a_1^{(i)}} . H^{2a_{2}^{i}} . H^{a_3^{(i)}} \oplus ... \oplus (X_8.H^8 \oplus X_{16}).H . 1 . 1

trong Δ‘Γ³ (a1, a2, a3) lΓ  biểu diα»…n nhα»‹ phΓ’n cα»§a q - i + 1, 1 < i < 8

  1. q = 4 (4 nhΓ‘nh nhΓ’n - cα»™ng song song)

((X1.H4βŠ•X5).H4βŠ•X9).H2βŠ•((X2.H4βŠ•X6).H4βŠ•X10).HβŠ•((X3.H4βŠ•X7).1βŠ•0).H4βŠ•((X4.H4βŠ•X8).H2βŠ•0).H((X_1.H^4 \oplus X_5).H^4 \oplus X_9).H^2 \oplus ((X_2.H^4 \oplus X_6).H^4 \oplus X_{10}).H \oplus ((X_3.H^4 \oplus X_7).1 \oplus 0).H^4 \oplus ((X_4.H^4 \oplus X_8).H^2 \oplus 0).H

  1. q = 2 (2 nhΓ‘nh nhΓ’n - cα»™ng song song)

(X1.HβŠ•X3).H2βŠ•(X2.H2βŠ•X4).H(X_1.H \oplus X_3).H^2 \oplus (X_2.H^2 \oplus X_4).H

Mα»™t sα»‘ kiểu tαΊ₯n cΓ΄ng thường gαΊ·p trong CTF

Meet in the middle Attack with 2DES

β€œMeet-in-the-middle” lΓ  mα»™t kα»Ή thuαΊ­t tαΊ₯n cΓ΄ng được sα»­ dα»₯ng để giαΊ£m Δ‘Γ‘ng kể sα»‘ lượng khΓ³a cΓ³ thể phαΊ£i thα»­ khi tαΊ₯n cΓ΄ng mα»™t hệ mΓ£ hΓ³a. ĐÒy lΓ  mα»™t phΖ°Ζ‘ng phΓ‘p tαΊ₯n cΓ΄ng hiệu quαΊ£ Δ‘α»‘i vα»›i cΓ‘c hệ mΓ£ hΓ³a sα»­ dα»₯ng khα»‘i mΓ£ hΓ³a vα»›i khΓ³a ngαΊ―n.

Double DES: lΓ  mα»™t kα»Ή thuαΊ­t mΓ£ hΓ³a sα»­ dα»₯ng hai phiΓͺn bαΊ£n DES trΓͺn cΓΉng mα»™t plaintext. Trong cαΊ£ hai trường hợp, nΓ³ sα»­ dα»₯ng cΓ‘c khΓ³a khΓ‘c nhau để mΓ£ hΓ³a plaintext. CαΊ£ hai khΓ³a đều được yΓͺu cαΊ§u tαΊ‘i thời Δ‘iểm giαΊ£i mΓ£.Plaintext 64 bit Δ‘i vΓ o phiΓͺn bαΊ£n DES Δ‘αΊ§u tiΓͺn, sau Δ‘Γ³ được chuyển Δ‘α»•i thΓ nh vΔƒn bαΊ£n ở giα»―a 64 bit bαΊ±ng khΓ³a Δ‘αΊ§u tiΓͺn vΓ  sau Δ‘Γ³ chuyển sang phiΓͺn bαΊ£n DES thα»© hai cung cαΊ₯p ciphertext 64 bit bαΊ±ng cΓ‘ch sα»­ dα»₯ng khΓ³a thα»© hai.

Mα»—i khΓ³a K cΓ³ Δ‘α»™ dΓ i 56 bit, tα»•ng lαΊ‘i Double DES sα»­ dα»₯ng khΓ³a 112 bit nhΖ°ng mα»©c bαΊ£o mαΊ­t lαΊ‘i lΓ  2^56 chα»© khΓ΄ng phαΊ£i 2^112, vΓ  dα»… bα»‹ tαΊ₯n cΓ΄ng bở meet-in-the-middle.

MΓ£ hΓ³a

Cho mα»™t bαΊ£n mΓ£ P vΓ  2 key K1, K2. ciphertext C lΓ  sαΊ£n phαΊ©m cα»§a việc mΓ£ hΓ³a

C=EK2(EK1(P))C = E_{K2}(E_{K1}(P))

GiαΊ£i mΓ£

P=DK1(DK2(P))P = D_{K1}(D_{K2}(P))

Cuα»™c tαΊ₯n cΓ΄ng "Meet in the middle 2DES" sα»­ dα»₯ng kα»Ή thuαΊ­t phΓ’n tΓ­ch tΖ°Ζ‘ng tα»± để giαΊ£m sα»‘ lượng khΓ³a cαΊ§n phαΊ£i thα»­ xuα»‘ng 2^57

Cuα»™c tαΊ₯n cΓ΄ng bao gα»“m hai giai Δ‘oαΊ‘n:

  1. Giai Δ‘oαΊ‘n tiền tΓ­nh toΓ‘n: KαΊ» tαΊ₯n cΓ΄ng tαΊ‘o ra mα»™t bαΊ£ng chα»©a tαΊ₯t cαΊ£ cΓ‘c tα»• hợp cΓ³ thể cΓ³ cα»§a khΓ³a Δ‘αΊ§u tiΓͺn vΓ  bαΊ£n mΓ£ tΖ°Ζ‘ng α»©ng, kαΊΏt quαΊ£ tα»« việc mΓ£ hΓ³a bαΊ£n rΓ΅ bαΊ±ng khΓ³a Δ‘αΊ§u tiΓͺn.

  2. Giai Δ‘oαΊ‘n tαΊ₯n cΓ΄ng: KαΊ» tαΊ₯n cΓ΄ng mΓ£ hΓ³a cΓΉng mα»™t bαΊ£n rΓ΅ vα»›i tαΊ₯t cαΊ£ cΓ‘c tα»• hợp cΓ³ thể cΓ³ cα»§a khΓ³a thα»© hai vΓ  so sΓ‘nh bαΊ£n mΓ£ kαΊΏt quαΊ£ vα»›i bαΊ£ng được tαΊ‘o trong giai Δ‘oαΊ‘n Δ‘αΊ§u tiΓͺn. Khi tΓ¬m thαΊ₯y mα»™t kαΊΏt quαΊ£ phΓΉ hợp, cΓ‘c khΓ³a tΖ°Ζ‘ng α»©ng lΓ  nhα»―ng khΓ³a chΓ­nh xΓ‘c.

Quy tình:

  1. Đầu tiΓͺn, attacker Δ‘oΓ‘n K1. Gọi dα»± Δ‘oΓ‘n cα»§a attacker lΓ  K1'.Vα»›i mα»—i lαΊ§n Δ‘oΓ‘n attacker tΓ­nh

Mβ€²=EK1β€²(P)M' = E_{K1'}(P )

sαΊ½ thu được 1 giΓ‘ trα»‹ vΓ  lΖ°u kαΊΏt quαΊ£ vΓ o trong cΓΉng 1 bαΊ£ng vα»›i K1' tΖ°Ζ‘ng α»©ng

  1. Sau khi thΓͺm vΓ o bαΊ£ng, vα»›i mα»—i $2^{56}\text{}$ cΓ³ thể lΓ  chΓ¬a khΓ³a cα»§a K1, attacker chuyển sang Δ‘oΓ‘n K2. TΓ­nh:

Mβ€²=DK2β€²(C)M' = D_{K2'}(C)

sau Δ‘Γ³ kiểm tra M' cΓ³ khα»›p vα»›i bαΊ₯t kΓ¬ M nΓ o Δ‘a lΖ°u trong bαΊ£ng lΖ°u trα»― trΖ°α»›c Δ‘Γ³ hay khΓ΄ng.

  1. NαΊΏu tΓ¬m thαΊ₯y

EK1β€²(P)=DK2β€²(C)E_{K1'} (P) = D_{K2'} (C)

thì K1 = K1' và K2 = K2'

BαΊ±ng cΓ‘ch sα»­ dα»₯ng phΖ°Ζ‘ng phΓ‘p nΓ y, kαΊ» tαΊ₯n cΓ΄ng giαΊ£m khΓ΄ng gian tΓ¬m kiαΊΏm cα»§a cΓ‘c khΓ³a tα»« 2^112 xuα»‘ng 2^56 + 2^56 = 2^57, nhanh hΖ‘n Δ‘Γ‘ng kể so vα»›i tαΊ₯n cΓ΄ng vΓ©t cαΊ‘n. Cuα»™c tαΊ₯n cΓ΄ng nΓ y cΓ²n được gọi lΓ  cuα»™c tαΊ₯n cΓ΄ng β€œdouble-DES”, vΓ¬ nΓ³ liΓͺn quan Δ‘αΊΏn việc khai thΓ‘c việc sα»­ dα»₯ng hai thao tΓ‘c DES vα»›i cΓ‘c khΓ³a khΓ‘c nhau.

chall.py

Vα»›i bΓ i nΓ y được mΓ£ hΓ³a 2 lαΊ§n vα»›i key1 vΓ  key 2.TΓ΄i sαΊ½ Γ‘p dα»₯ng cΓ‘ch tαΊ₯n cΓ΄ng meet-in-the-middle ở bΓͺn trΓͺn Δ‘α»‘i vα»›i bΓ i nΓ y để tΓ¬m ra key1, key2 vΓ  tΓ¬m ra flag.

BΓ i nΓ y key1, key2 được random 3 bytes vΓ  được bΔƒm vα»›i md5.

Dα»±a vΓ o hint assert len(FLAG) % 16 == 1 # hint tΓ΄i thαΊ₯y block cuα»‘i sαΊ½ bα»‹ lαΊ» kΓ­ tα»± } vΓ  padding sao cho Δ‘α»§ 16 byte pad(b"}", 16)

TiαΊΏp Δ‘Γ³ tΓ΄i sαΊ½ brute force key1, key2 sao cho

EK1β€²(P)=DK2(C)E_{K1'} (P) = D_{K2}(C)

vα»›i key1, key2 được random 3 bytes vΓ  được bΔƒm vα»›i md5.

Padding Oracle Attack

Trong symmetric cipher, cuα»™c tαΊ₯n cΓ΄ng oracle đệm cΓ³ thể được Γ‘p dα»₯ng cho mode AES-CBC, trong Δ‘Γ³ β€œoracle” (thường lΓ  mΓ‘y chα»§) rΓ² rỉ dα»― liệu về việc liệu phαΊ§n đệm cα»§a tin nhαΊ―n được mΓ£ hΓ³a cΓ³ chΓ­nh xΓ‘c hay khΓ΄ng. Dα»― liệu nhΖ° vαΊ­y cΓ³ thể cho phΓ©p nhα»―ng kαΊ» tαΊ₯n cΓ΄ng giαΊ£i mΓ£ (vΓ  Δ‘Γ΄i khi mΓ£ hΓ³a) tin nhαΊ―n thΓ΄ng qua oracle bαΊ±ng cΓ‘ch sα»­ dα»₯ng khΓ³a cα»§a oracle mΓ  khΓ΄ng cαΊ§n biαΊΏt khΓ³a mΓ£ hΓ³a.

Việc triển khai tiΓͺu chuαΊ©n cα»§a giαΊ£i mΓ£ CBC trong mαΊ­t mΓ£ khα»‘i lΓ  giαΊ£i mΓ£ tαΊ₯t cαΊ£ cΓ‘c khα»‘i bαΊ£n mΓ£, xΓ‘c thα»±c phαΊ§n đệm, xΓ³a phαΊ§n đệm PKCS7 vΓ  trαΊ£ về plaintext cα»§a tin nhαΊ―n. NαΊΏu mΓ‘y chα»§ trαΊ£ về lα»—i β€œΔ‘α»‡m khΓ΄ng hợp lệ” thay vΓ¬ lα»—i chung β€œgiαΊ£i mΓ£ khΓ΄ng thΓ nh cΓ΄ng”, kαΊ» tαΊ₯n cΓ΄ng cΓ³ thể sα»­ dα»₯ng mΓ‘y chα»§ nhΖ° mα»™t oracle đệm để giαΊ£i mΓ£ (vΓ  Δ‘Γ΄i khi mΓ£ hΓ³a) message

Ở Δ‘Γ’y tΓ΄i tΓ¬m thαΊ₯y 1 tool demo padding oracle toolarrow-up-right vΓ  1 video demo cho dα»… hiểu padding oracle videoarrow-up-right

GiαΊ£ sα»­ attacker cΓ³ block cipher C_1, C_2 , muα»‘n giαΊ£i mΓ£ block2 để cΓ³ được P_2 . Khi Δ‘Γ³ attacker thay Δ‘α»•i byte cuα»‘i cΓΉng cα»§a C_1 (tαΊ‘o C'_1 ) vΓ  gα»­i (IV, C'_1 , C_2 ) Δ‘αΊΏn mΓ‘y chα»§

MΓ‘y chα»§ sαΊ½ trαΊ£ về phαΊ§n đệm cuα»‘i cΓΉng cα»§a block được giαΊ£i mΓ£ P'_2 .

Attacker biαΊΏt byte cuα»‘i cα»§a

DK(C2)βŠ•C1β€²D_K(C_2) βŠ• C'_1

Do Δ‘Γ³ byte cuα»‘i cΓΉng cα»§a D_K (C_2 ) = C'_1 βŠ• \x01

NαΊΏu đệm khΓ΄ng chΓ­nh xΓ‘c, attacker cΓ³ thể thay Δ‘α»•i byte cuα»‘i cΓΉng cα»§a C'_1 Δ‘αΊΏn giΓ‘ trα»‹ tiαΊΏp theo cΓ³ thể, tα»‘i Δ‘a 256 lαΊ§n thα»§ để tΓ¬m byte cuα»‘i cα»§a P_2

Sau khi cΓ³ byte cuα»‘i cα»§a P_2, attacker sα»­ dα»₯ng kΔ© thuαΊ­t tΖ°Ζ‘ng tα»± để cΓ³ byte thα»© 2 Δ‘αΊΏn byte cuα»‘i cα»§a P_2.

Attacker sαΊ½ cΓ³ được plaintext P_2 khΓ΄ng quΓ‘ 256x16 lαΊ§n thα»­.

Source: paper plane cryptohackarrow-up-right

paper_plane.py

SΖ‘ Δ‘α»“ mΓ£ hΓ³a

Vα»›i bΓ i nΓ y dΓΉng 2 IV, tΓ΄i cΓ³ sΖ‘ Δ‘α»“ giαΊ£i mΓ£

Khi tΓ΄i encrypt_flag() thΓ¬ server trαΊ£ về m0, c0, c1 tα»« Δ‘Γ³ dα»±a vΓ o sΖ‘ Δ‘α»“ trΓͺn tΓ΄i bαΊ―t Δ‘αΊ§u vα»›i block Δ‘αΊ§u tiΓͺn vα»›i kiểu tαΊ₯n cΓ΄ng padding oracle mΓ  tΓ΄i cΓ³ đề cαΊ­p ở trΓͺn.

Việc gα»­i M0 Δ‘α»‘i vα»›i block1 vΓ  pt1 sau khi tΓ¬m được Δ‘α»‘i vα»›i sΖ‘ Δ‘α»“ giαΊ£i mΓ£ lΓ  giα»― nguyΓͺn.

Ta chỉ quan tΓ’m tα»›i C0 vΓ  C1 để tαΊ₯n cΓ΄ng theo padding oracle.

NαΊΏu khi ta gα»­i dα»― liệu vΓ o nαΊΏu mΓ  xuαΊ₯t hiện chuα»—i Message received tα»©c lΓ  khi Δ‘Γ³ phαΊ§n đệm cα»§a c0 Δ‘Γ£ chΓ­nh xΓ‘c vΓ  ta chỉ cαΊ§n tΓ¬m lαΊ‘i

vαΊ­y lΓ  ở khα»‘i Δ‘αΊ§u tiΓͺn ta Δ‘Γ£ tΓ¬m được chα»― l.

solved.py

Key-Recovery Attacks on GCM with Repeated Nonces

CΓ‘c bαΊ‘n cΓ³ thể đọc thΓͺm tαΊ‘i 475.pdfarrow-up-right and http://blog.redrocket.club/2018/03/27/VolgaCTF-Forbidden/

GiαΊ£ sα»­ g(X) lΓ  hΓ m GHASH

g(X)=A1Xm+n+1+β‹―+AmXn+2+C1Xn+1+β‹―+CnX2+LX+Sg(X) = A_1X^{m+n+1}+\dots+A_mX^{n+2}+C_1X^{n+1}+\dots+C_nX^2+LX+S

XΓ©t tag T cΓ³ thể tΓ­nh bαΊ±ng:

g(H)=Tg(H) = T

GiαΊ£ sα»­ A_i, C_i lΓ  data blocks vΓ  ciphertext blocks, L biểu thα»‹ Δ‘α»™ dΓ i message vΓ  S lΓ  nonce value. Đều lΓ  cΓ‘c block 128bit trong trường hα»―u hαΊ‘n GF(2^{128})

f1(X)Β =Β A1,1X5Β +Β C1,1X4Β +Β C1,2X3Β +Β C1,3X2Β +Β LX+Sf_1(X) \ = \ A_{1,1}X^5 \ + \ C_{1,1}X^4 \ + \ C_{1,2}X^3 \ + \ C_{1,3}X^2 \ + \ LX + S

f2(X)Β =Β A2,1X5Β +Β C2,1X4Β +Β C2,2X3Β +Β C2,3X2Β +Β +LX+Sf_2(X) \ = \ A_{2,1}X^5 \ + \ C_{2,1}X^4 \ + \ C_{2,2}X^3 \ + \ C_{2,3}X^2 \ + \ + LX + S

S giống nhau vì cùng nonce

Thay H(key hash) sαΊ½ cung cαΊ₯p cho ta authentication tag f_1(H) = T_1

f1β€²(X)Β =Β A1,1X5Β +Β C1,1X4Β +Β C1,2X3Β +Β C1,3X2Β +Β LXΒ +Β SΒ +Β T1f_1'(X) \ = \ A_{1,1}X^5 \ + \ C_{1,1}X^4 \ + \ C_{1,2}X^3 \ + \ C_{1,3}X^2 \ + \ LX \ + \ S \ + \ T_1

f2β€²(X)Β =Β A2,1X5Β +Β C2,1X4Β +Β C2,2X3Β +Β C2,3X2Β +Β LXΒ +Β SΒ +Β T2f_2'(X) \ = \ A_{2,1}X^5 \ + \ C_{2,1}X^4 \ + \ C_{2,2}X^3 \ + \ C_{2,3}X^2 \ + \ LX \ + \ S \ + \ T_2

Cα»™ng hai Δ‘a thα»©c ở trΓͺn ta cΓ³

g(X)=f1β€²(X)Β +Β f2β€²(X)g(X) = f_1'(X) \ + \ f_2'(X)

g(X)=(A1,1Β +Β A2,1)X5Β +Β (C1,1Β +Β C2,1)X4Β +Β ...Β +Β LXΒ +Β T1Β +Β T2g(X) = (A_{1,1} \ + \ A_{2,1})X^5 \ + \ (C_{1,1} \ + \ C_{2,1})X^4 \ + \ ... \ + \ LX \ + \ T1 \ + \ T2

X(H(hash key)) sαΊ½ nαΊ±m trong cΓ‘c nghiệm cα»§a Δ‘a thα»©c g(X), trong GF(2^{128}) việc thΓͺm cΓ‘c hệ sα»‘ cΕ©ng giα»‘ng nhΖ° XOR cΓ‘c khα»‘i tΖ°Ζ‘ng α»©ng cα»§a chΓΊng.

Tα»« Δ‘Γ³ tΓ­nh được S tα»« X(H(hash key)) vα»›i

S=f1β€²(H)Β +Β A1,1H5Β +Β C1,1H4Β +Β C1,2H3Β +Β C1,3H2Β +Β LHΒ +Β T1S = f_1'(H) \ + \ A_{1,1}H^5 \ + \ C_{1,1}H^4 \ + \ C_{1,2}H^3 \ + \ C_{1,3}H^2 \ + \ LH \ + \ T_1

Challenge forbidden fruit cryptohackarrow-up-right

forbiden_fruit.py

solution

TAG=(((((((((((Hβˆ—AD0)+AD1)βˆ—H)+c0)βˆ—H)+c1)βˆ—H)+c2)βˆ—H)+L)βˆ—H)+STAG = (((((((((((H * AD0) + AD1) * H) + c0) * H) + c1) * H) + c2) * H) + L) * H) + S

TAG=AD0βˆ—H6+AD1βˆ—H5+c0βˆ—H4+c1βˆ—H3+c2βˆ—H2+Lβˆ—H+STAG = AD0 * H^6 + AD1 * H^5 + c0 * H^4 + c1 * H^3 + c2 * H^2 + L * H + S

Vα»›i bΓ i nΓ y ta sαΊ½ nhαΊ­p 2 block vΓ  thu được:

TAG=(((((Hβˆ—c0)+c1)βˆ—H)+L)βˆ—H+S)TAG = (((((H * c0) + c1) * H) + L) * H + S)

TAG=c0βˆ—H3+c1βˆ—H2+Lβˆ—H+STAG = c0 * H^3 + c1 * H^2 + L * H + S

Ta cΓ³

TAG1=Aβˆ—H3+c1βˆ—H2+Lβˆ—H+STAG_1 = A * H^3 + c1 * H^2 + L * H + S

TAG2=Aβˆ—H3+c2βˆ—H2+Lβˆ—H+STAG_2 = A * H^3 + c2 * H^2 + L * H + S

TAG1βˆ’TAG2=(c1βˆ’c2)βˆ—H2TAG_1 - TAG_2 = (c1-c2) * H^2

TAG1βˆ’c1βˆ—H2=TAG2βˆ’c2βˆ—H2TAG_1 - c1 * H^2 = TAG_2 - c2 * H^2

Gọi X lΓ  TAG giαΊ£ mαΊ‘o. Khi Δ‘Γ³ ta tΓ­nh được

X=TAG1βˆ’c1βˆ—H2==TAG2βˆ’c2βˆ—H2X = TAG_1 - c1 * H^2 == TAG_2 - c2 * H^2

Khi cΓ³ được X rα»“i ta tΓ­nh

forge(tag)=cβˆ—H2+tag1βˆ’c1βˆ—H2forge(tag) = c * H^2 + tag1 - c1 * H^2

forge(tag)=cβˆ—H2+Xforge(tag) = c * H^2 + X

BΓ’y giờ ta chỉ cαΊ§n gα»­i nonce, ciphertext, forge(tag), AD("Cryptohack") vΓ o server vΓ  get flag.

solved.py

Reference

[1] https://toadstyle.org/cryptopals/63.txtarrow-up-right

[2] https://viblo.asia/p/cryptopals-set-8-abstract-algebra-challenge-63-66-m68Z0Wb9KkGarrow-up-right

[3] https://meowmeowxw.gitlab.io/ctf/utctf-2020-crypto/arrow-up-right

[4] https://en.wikipedia.org/wiki/Advanced_Encryption_Standardarrow-up-right

[5] https://www.geeksforgeeks.org/double-des-and-triple-des/arrow-up-right

[6] https://paddingoracle.github.io/arrow-up-right

[7] http://blog.redrocket.club/2018/03/27/VolgaCTF-Forbidden/arrow-up-right

[8] https://en.wikipedia.org/wiki/Data_Encryption_Standardarrow-up-right

Last updated