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:
Δα» dΓ i khΓ³a 128 bit
Δα» dΓ i khΓ³a 192 bit
Δα» 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:
SubBytes
ShiftRows
MixColumns
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
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:
Rotword : quay trΓ‘i 8 bit
SubBytes
Rcon: tΓnh giΓ‘ trα» Rcon(i):
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Β )

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

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
AddRoundKey: round key ΔαΊ§u tiΓͺn Δược XOR vα»i plaintext(bαΊ£n rΓ΅).
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
AES-128 - 10 vΓ²ng lαΊ·p
AES-192 - 12 vΓ²ng lαΊ·p
AES-256 - 14 vΓ²ng lαΊ·p
Tα»« vΓ²ng 1 ΔαΊΏn vΓ²ng N - 1 thα»±c hiΓͺn
SubBytess
ShiftRows
MixColumns
AddRoundKey
α» vΓ²ng cuα»i cΓΉng thΓ¬ khΓ΄ng cΓ³ bΖ°α»c MixColums
SubBytess
ShiftRows
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:
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.
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:
ThiαΊΏu bαΊ£o mαΊt: ECB khΓ΄ng cung cαΊ₯p tΓnh bαΊ£o mαΊt cao.
KhΓ΄ng ΔαΊ£m bαΊ£o tΓnh toΓ n vαΊΉn
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β)
C0β=IV
LαΊ§n mΓ£ hΓ³a ΔαΊ§u tiΓͺn:
Plaintext XOR vα»i vector khα»i tαΊ‘o IV
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:
Plaintext XOR vα»i ciphertext cα»§a lαΊ§n mΓ£ hΓ³a trΖ°α»c ΔΓ³.
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β1β
C0β=IV
LαΊ§n giαΊ£i mΓ£ ΔαΊ§u tiΓͺn:
Ciphertext Δược thα»±c thi quΓ‘ trΓ¬nh giαΊ£i mΓ£ vα»i khΓ³a mΓ£ K
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:
Ciphertext Δược thα»±c thi quΓ‘ trΓ¬nh giαΊ£i mΓ£ vα»i khΓ³a mΓ£ K
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:
KhαΊ£ nΔng bαΊ£o mαΊt cao hΖ‘n ECB.
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:
ThiαΊΏt kαΊΏ phαΊ§n cα»©ng phα»©c tαΊ‘p hΖ‘n ECB
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.
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β=IV
GiαΊ£i mΓ£ PCBC
Piβ=DKβ(Ciβ)βPiβ1ββCiβ1β,Β P0ββC0β=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
LαΊ§n mΓ£ hΓ³a ΔαΊ§u tiΓͺn:
Khα»i dα»― liα»u ngΓ΅ vΓ o cα»§a quΓ‘ trΓ¬nh mΓ£ hΓ³a lαΊ₯y tα»« IV.
Vector khα»i tαΊ‘o IV Δược mΓ£ hΓ³a Δα» tαΊ‘o ra mα»t khα»i giΓ‘ trα» chα»©a b bit.
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:
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 ΔΓ³.
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.
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β)βCiβ
Ζ―u Δiα»m
KhαΊ£ nΔng bαΊ£o mαΊt cao hΖ‘n ECB
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.
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:
ThiαΊΏt kαΊΏ phαΊ§n cα»©ng phα»©c tαΊ‘p hΖ‘n CBC
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.
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ββMJβ
Pjβ=CjββOjβ
Ojβ=EKβ(Ijβ)
Ijβ=Ojβ1β
I0β=IV
MΓ£ hΓ³a OFB
LαΊ§n mΓ£ hΓ³a ΔαΊ§u tiΓͺn:
GiΓ‘ trα» IV Δược lαΊ₯y lΓ m khα»i giΓ‘ trα» ΔαΊ§u vΓ o mΓ£ hΓ³a.
Thα»±c thi giαΊ£i thuαΊt mΓ£ hΓ³a cho khα»i trΓͺn vα»i khΓ³a mΓ£ K.
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:
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.
Thα»±c thi giαΊ£i thuαΊt mΓ£ hΓ³a cho khα»i trΓͺn vα»i khΓ³a mΓ£ K.
XOR plaintext vΓ kαΊΏt quαΊ£ cα»§a bΖ°α»c trΓͺn.
LαΊ§n mΓ£ hΓ³a cuα»i cΓΉng:
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Γ³.
Thα»±c thi giαΊ£i thuαΊt mΓ£ hΓ³a cho khα»i trΓͺn vα»i khΓ³a mΓ£ K.
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:
GiΓ‘ trα» IV Δược lαΊ₯y lΓ m khα»i giΓ‘ trα» ΔαΊ§u vΓ o mΓ£ hΓ³a.
Thα»±c thi giαΊ£i thuαΊt mΓ£ hΓ³a cho khα»i trΓͺn vα»i khΓ³a mΓ£ K.
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:
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.
Thα»±c thi giαΊ£i thuαΊt mΓ£ hΓ³a cho khα»i trΓͺn vα»i khΓ³a mΓ£ K.
XOR ciphertext vΓ kαΊΏt quαΊ£ cα»§a bΖ°α»c trΓͺn.
LαΊ§n giαΊ£i mΓ£ cuα»i cΓΉng (thα»© n):
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.
Thα»±c thi giαΊ£i thuαΊt mΓ£ hΓ³a cho khα»i trΓͺn vα»i khΓ³a mΓ£ K.
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
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 ΔΓ³.
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
ThiαΊΏt kαΊΏ phαΊ§n cα»©ng ΔΖ‘n giαΊ£n hΖ‘n CFB.
Nhược Δiα»m:
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:
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.
CΓ³ thα» mΓ£ hΓ³a/giαΊ£i mΓ£ song song nhiα»u khα»i dα»― liα»u.
Nhược Δiα»m:
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=1nβXjβ.Hnβj+1=X1β.HnβX2β.Hnβ1β...βXnβ.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Β +Β 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:
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
trong ΔΓ³ (a1, a2, a3) lΓ biα»u diα» n nhα» phΓ’n cα»§a q - i + 1, 1 < i < 8
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
q = 2 (2 nhΓ‘nh nhΓ’n - cα»ng song song)
(X1β.HβX3β).H2β(X2β.H2βX4β).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))
GiαΊ£i mΓ£
P=DK1β(DK2β(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:
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.
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:
ΔαΊ§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)
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
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Γ‘nK2. TΓnh:
Mβ²=DK2β²β(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.
NαΊΏu tΓ¬m thαΊ₯y
EK1β²β(P)=DK2β²β(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)
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 tool vΓ 1 video demo cho dα»
hiα»u padding oracle video
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β²β
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 cryptohack
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.pdf and http://blog.redrocket.club/2018/03/27/VolgaCTF-Forbidden/
GiαΊ£ sα» g(X) lΓ hΓ m GHASH
g(X)=A1βXm+n+1+β―+AmβXn+2+C1βXn+1+β―+CnβX2+LX+S
XΓ©t tag T cΓ³ thα» tΓnh bαΊ±ng:
g(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,1βX5Β +Β C1,1βX4Β +Β C1,2βX3Β +Β C1,3βX2Β +Β LX+S
f2β(X)Β =Β A2,1βX5Β +Β C2,1βX4Β +Β C2,2βX3Β +Β C2,3βX2Β +Β +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,1βX5Β +Β C1,1βX4Β +Β C1,2βX3Β +Β C1,3βX2Β +Β LXΒ +Β SΒ +Β T1β
f2β²β(X)Β =Β A2,1βX5Β +Β C2,1βX4Β +Β C2,2βX3Β +Β C2,3βX2Β +Β LXΒ +Β SΒ +Β T2β
Cα»ng hai Δa thα»©c α» trΓͺn ta cΓ³
g(X)=f1β²β(X)Β +Β f2β²β(X)
g(X)=(A1,1βΒ +Β A2,1β)X5Β +Β (C1,1βΒ +Β C2,1β)X4Β +Β ...Β +Β 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,1βH5Β +Β C1,1βH4Β +Β C1,2βH3Β +Β C1,3βH2Β +Β LHΒ +Β T1β
Challenge forbidden fruit cryptohack
forbiden_fruit.py
solution
TAG=(((((((((((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+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=c0βH3+c1βH2+LβH+S
Ta cΓ³
TAG1β=AβH3+c1βH2+LβH+S
TAG2β=AβH3+c2βH2+LβH+S
TAG1ββTAG2β=(c1βc2)βH2
TAG1ββc1βH2=TAG2ββc2βH2
Gα»i X lΓ TAG giαΊ£ mαΊ‘o. Khi ΔΓ³ ta tΓnh Δược
X=TAG1ββc1βH2==TAG2ββc2βH2
Khi cΓ³ Δược X rα»i ta tΓnh
forge(tag)=cβH2+tag1βc1βH2
forge(tag)=cβH2+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.txt
[2] https://viblo.asia/p/cryptopals-set-8-abstract-algebra-challenge-63-66-m68Z0Wb9KkG
[3] https://meowmeowxw.gitlab.io/ctf/utctf-2020-crypto/
[4] https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
[5] https://www.geeksforgeeks.org/double-des-and-triple-des/
[6] https://paddingoracle.github.io/
[7] http://blog.redrocket.club/2018/03/27/VolgaCTF-Forbidden/
Last updated